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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5420|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

STC8G1K16的PD(掉電)模式用外部中斷正常喚醒,但IDLE模式卻無法喚醒[已解決]

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:853816 發(fā)表于 2021-6-29 13:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我的代碼(改自STC8G手冊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 進入 IDL 模式   問題在這里這里這里這里這里這里這里這里這里
  14.         PCON |=  0x02 ;          //MCU 進入 掉電 模式
  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 進入 IDL 模式  還有這里這里這里這里這里這里這里這里
  29.         PCON |=  0x02 ;          //MCU 進入 掉電 模式
  30.         _nop_();
  31.         _nop_();
  32.         while (1)
  33.         {
  34.                 P11 = !P11;               
  35.         }
復(fù)制代碼
我的電路是:
兩個按鍵分別連到P32(按鍵1)和P33(按鍵2),示波器連到P11。

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


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

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

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

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

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


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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:401564 發(fā)表于 2021-6-29 21:17 | 只看該作者
對于省電模式,STC并沒有多少的說明,但實際上,它的原理應(yīng)該是和掉電差不多的,不同的是:省電模式只有CPU停止工作,其它外設(shè)是正常工作的
個人分析是這樣的:因為你在中斷中進入了省電模式,CPU馬上就停止了工作,但中斷還是在工作的,所以,程序?qū)嶋H上是一直停留在中斷中的,因為CPU停止工作了,那就沒法中斷返回了

省電模式和掉電模式是這樣工作的:一進入該模式之后,CPU停止工作(掉電模式外設(shè)也會停止工作),所有的IO保持進入模式前的狀態(tài),電平不變
那么,喚醒之后,程序是馬上進入喚醒的中斷程序,執(zhí)行完中斷程序之后再返回執(zhí)行
//PCON |=  0x01 ;        
  PCON |=  0x02 ;
的下一條語句.
所以,我覺得你不應(yīng)該在中斷中進入掉電或者省電模式,要在主程序中進入,一定要中斷控制的話,也是中斷控制一個標(biāo)志位,再由主程序檢測標(biāo)志位要不要進入掉電/省電模式

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:853816 發(fā)表于 2021-6-30 10:28 | 只看該作者
yzwzfyz 發(fā)表于 2021-6-29 16:52
樓主很用功,分析很到位,驗證方式也很清晰、簡潔。是塊好料子。
IDL:僅切斷CPU的CLK。
PD:不僅切斷CPU ...

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

使用道具 舉報

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

謝謝,采用了您建議的方法,問題解決了。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表