欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STC8G1K16的PD(掉電)模式用外部中斷正常喚醒,但I(xiàn)DLE模式卻無法喚醒[已解決] [打印本頁]

作者: ccyg8774    時(shí)間: 2021-6-29 13:28
標(biāo)題: STC8G1K16的PD(掉電)模式用外部中斷正常喚醒,但I(xiàn)DLE模式卻無法喚醒[已解決]
這是我的代碼(改自STC8G手冊(cè)6.5.8 “使用T0/T1/T2/T3/T4 中斷喚醒MCU”例程):
  1. #include "STC8.H"
  2. #include "intrins.h"
  3. void INT0_Isr() interrupt 0
  4. {
  5.         _nop_();
  6.         _nop_();
  7. }
  8. void INT1_Isr() interrupt 2
  9. {
  10.         P11 = 0;
  11.         _nop_();
  12.         _nop_();
  13.         //PCON |=  0x01 ;          //MCU 進(jìn)入 IDL 模式   問題在這里這里這里這里這里這里這里這里這里
  14.         PCON |=  0x02 ;          //MCU 進(jìn)入 掉電 模式
  15.         _nop_();
  16.         _nop_();
  17. }
  18. void main()
  19. {
  20.         P1M1 &= ~(1<<1);
  21.         P1M0 |= (1<<1); //設(shè)置為推挽輸出
  22.         IT0 = 1; //使能 INT0 下降沿中斷
  23.         EX0 = 1; //使能 INT0 中斷
  24.         IT1 = 1; //使能 INT1 下降沿中斷
  25.         EX1 = 1; //使能 INT1 中斷
  26.         EA = 1;
  27.         P11 = 0;
  28.         //PCON |=  0x01 ;          //MCU 進(jìn)入 IDL 模式  還有這里這里這里這里這里這里這里這里
  29.         PCON |=  0x02 ;          //MCU 進(jìn)入 掉電 模式
  30.         _nop_();
  31.         _nop_();
  32.         while (1)
  33.         {
  34.                 P11 = !P11;               
  35.         }
復(fù)制代碼
我的電路是:
兩個(gè)按鍵分別連到P32(按鍵1)和P33(按鍵2),示波器連到P11。

當(dāng)我使用掉電模式(PCON |=  0x02)時(shí):
剛通電,P11輸出低。此時(shí)是低功耗(掉電)模式。
按下按鍵1,P11開始輸出方波。此時(shí)是正常工作模式。
按下按鍵2,P11輸出低。此時(shí)是低功耗(掉電)模式。
再按下按鍵1,P11繼續(xù)輸出方波。
再按下按鍵2,P11輸出低
……
總之使用掉電模式的時(shí)候一切看起來都挺正常。


當(dāng)我使用IDLE模式(PCON |=  0x01)時(shí):
剛通電,P11輸出低。此時(shí)是低功耗(掉電)模式。正常。
按下按鍵1,P11開始輸出方波。此時(shí)是正常工作模式。正常。
按下按鍵2,P11輸出低。此時(shí)是低功耗(掉電)模式。正常。
再按下按鍵1,P11依然輸出低。不僅沒有輸出,電源的電流和剛才低功耗模式下也沒有變化。
再按下按鍵2,沒變化
……
除了這兩行代碼別的什么都沒變。總之,換到IDLE模式后,只有上電后第一次能用INT0正常喚醒,第二次就不能。

手冊(cè)6.4“系統(tǒng)電源管理”說明:
PD:掉電模式控制位
0:無影響
1:單片機(jī)進(jìn)入掉電模式,CPU 以及全部外設(shè)均停止工作。喚醒后硬件自動(dòng)清零。
IDL:IDLE(空閑)模式控制位
0:無影響
1:單片機(jī)進(jìn)入 IDLE 模式,只有 CPU 停止工作,其他外設(shè)依然在運(yùn)行。喚醒后硬件自動(dòng)清零

網(wǎng)上也查過了,大部分資料說的內(nèi)容都差不多,摘取一個(gè)講的比較詳細(xì)的:
空閑模式是指只有單片機(jī)不工作的狀態(tài)。此時(shí)CPU無時(shí)鐘停止工作,但是外部中斷、外部低壓檢測(cè)電路、定時(shí)器、A/D轉(zhuǎn)換、串行口等仍正常運(yùn)行。在空閑模式下,RAM、堆棧指針(SP)、程序計(jì)數(shù)器(PC)、程序狀態(tài)字(PSW)、累加器(A)等寄存器都保持原有數(shù)據(jù)。I/O口保持著空閑模式被激活前那一刻的邏輯狀態(tài)。此時(shí)單片機(jī)所有的外圍設(shè)備都能正常運(yùn)行,當(dāng)任何一個(gè)中斷產(chǎn)生時(shí),它們都可以將單片機(jī)喚醒,單片機(jī)被喚醒后,CPU將繼續(xù)執(zhí)行進(jìn)入空閑模式語句的下一條指令。
怎樣退出空閑模式?
a.中斷:任何一個(gè)中斷的產(chǎn)生都會(huì)引起IDL/PCON.0被硬件清除,從而退出空閑模式;
b.外部RST引腳復(fù)位:將復(fù)位腳拉高,產(chǎn)生復(fù)位。再將RST腳拉低,結(jié)束復(fù)位,單片機(jī)從用戶程序的0000H處開始正常工作

休眠模式(又叫掉電模式、停機(jī)模式)
當(dāng)單片機(jī)進(jìn)入掉電模式時(shí),外部晶振停振、CPU、定時(shí)器、串行口全部停止工作,只有外部中斷繼續(xù)工作。使單片機(jī)進(jìn)入休眠模式的指令將成為休眠前單片機(jī)執(zhí)行的最后一條指令,進(jìn)入休眠模式后,芯片中程序未涉及到的數(shù)據(jù)存儲(chǔ)器和特殊功能寄存器中的數(shù)據(jù)都將保持原值。可由外部中斷低電平觸發(fā)或由下降沿觸發(fā)中斷或者硬件復(fù)位模式換醒單片機(jī),需要注意的是,使用中斷喚醒單片機(jī)時(shí),程序從原來停止處繼續(xù)運(yùn)行,當(dāng)使用硬件復(fù)位喚醒單片機(jī)時(shí),程序?qū)念^開始執(zhí)行。
怎樣退出休眠模式?
a.可將CPU從休眠模式喚醒的外部管腳有:外部中斷0、外部中斷1、定時(shí)器0、定時(shí)器1、RxD、PWM0/PCA0/P3.7、PWM2/PCA2/P2.0、PWM3/PCA3/P2.4

按這個(gè)說法外部中斷應(yīng)該可以在兩個(gè)模式下都喚醒的啊?為啥會(huì)有這樣的問題呢?


更新:采用了4樓Y_G_G 壇友 建議的方法,不要在中斷函數(shù)內(nèi)進(jìn)入省電模式,而是在中斷函數(shù)中操作一個(gè)標(biāo)志位,在主函數(shù)中檢測(cè)這個(gè)標(biāo)志位進(jìn)入省電模式。問題已解決。


作者: yzwzfyz    時(shí)間: 2021-6-29 16:52
樓主很用功,分析很到位,驗(yàn)證方式也很清晰、簡潔。是塊好料子。
IDL:僅切斷CPU的CLK。
PD:不僅切斷CPU的CLK,還切斷其它使用系統(tǒng)時(shí)鐘的內(nèi)部硬件設(shè)備的CLK,如定時(shí)器、串口、AD……。
如果,僅僅是以上這一點(diǎn)點(diǎn)程序運(yùn)行,這時(shí)的IDL與PD的功能一樣,因?yàn)椴簧婕捌渌鼉?nèi)部硬件。
也就是說,我的看法與您完全一致。幫不上忙了。
建議一下:在IDL語句之后,將NOP增加到24個(gè)。再試試是否同樣?


作者: Y_G_G    時(shí)間: 2021-6-29 21:17
對(duì)于省電模式,STC并沒有多少的說明,但實(shí)際上,它的原理應(yīng)該是和掉電差不多的,不同的是:省電模式只有CPU停止工作,其它外設(shè)是正常工作的
個(gè)人分析是這樣的:因?yàn)槟阍谥袛嘀羞M(jìn)入了省電模式,CPU馬上就停止了工作,但中斷還是在工作的,所以,程序?qū)嶋H上是一直停留在中斷中的,因?yàn)镃PU停止工作了,那就沒法中斷返回了

省電模式和掉電模式是這樣工作的:一進(jìn)入該模式之后,CPU停止工作(掉電模式外設(shè)也會(huì)停止工作),所有的IO保持進(jìn)入模式前的狀態(tài),電平不變
那么,喚醒之后,程序是馬上進(jìn)入喚醒的中斷程序,執(zhí)行完中斷程序之后再返回執(zhí)行
//PCON |=  0x01 ;        
  PCON |=  0x02 ;
的下一條語句.
所以,我覺得你不應(yīng)該在中斷中進(jìn)入掉電或者省電模式,要在主程序中進(jìn)入,一定要中斷控制的話,也是中斷控制一個(gè)標(biāo)志位,再由主程序檢測(cè)標(biāo)志位要不要進(jìn)入掉電/省電模式
作者: ccyg8774    時(shí)間: 2021-6-30 10:28
yzwzfyz 發(fā)表于 2021-6-29 16:52
樓主很用功,分析很到位,驗(yàn)證方式也很清晰、簡潔。是塊好料子。
IDL:僅切斷CPU的CLK。
PD:不僅切斷CPU ...

試了一下,沒變化,和之前還是一樣。這類多加nop操作的原理是什么呢?是不是多加幾個(gè)延時(shí)確保相應(yīng)的數(shù)值被寫到寄存器里面了?

作者: ccyg8774    時(shí)間: 2021-6-30 10:29
Y_G_G 發(fā)表于 2021-6-29 21:17
對(duì)于省電模式,STC并沒有多少的說明,但實(shí)際上,它的原理應(yīng)該是和掉電差不多的,不同的是:省電模式只有CPU停止 ...

謝謝,采用了您建議的方法,問題解決了。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1