最近在使用芯聖HC89S003F4時,在使用官方INT1掉電喚醒例程中,無論如何都無法完全喚醒MCU,經廠方檢視程式,調試,很快找出原因,由于INT1不是最高優先級,是以喚醒沒有成功,後來将INT1的優先級設為最高,就一切正常了。
估計原因是:INT1不是最高優先級,喚醒啟動後就被更高優先級的搶去了控制權,就是和和各種中斷打架去了,最後誰也幹不成活。
IP0 |= 0X30; //INT1優先級設為最高,喚醒用的中斷一定要設為最高優先級。否則有可能喚醒不成功
留做自勉。
補充一下,
上面的問題是因為在低級别中斷裡執行了掉電指令,由于級别不夠,造成喚醒不成功,故要設定最進階中斷。
有時序的東西最好不要放到中斷執行
如果是在main函數裡進入掉電模式,就可以不用設定最高優先級,
bit PD_flag;
main()
{
while(PD_flag)
{
PCON |= 0x02; //進入掉電模式
PD_flag=0;
}
}
其他函數給 PD_flag指派,
T0_INT()
{
if(.......)
{
PD_flag=1;
}
}
經試驗可行