用STC12C5616AD做了一個時鐘,想法是讓單片機定時進入掉電模式,然后利用DS3231的INT/SQW定時輸出通過單片機的外總中斷0(P3.2)來喚醒掉電的單片機而使時鐘繼續正常工作。現在的問題是:能進入掉電模式,也參通過外總中斷喚醒,但只是一閃就又停了。如果把中斷子程序中的“I2CWrite(DS3231_STATUS,0x00);”去掉就能夠正常喚醒工作。求助:問題出在哪?如何解決?
......
while (1) //主循環
{
if(ReadTimeFlag==1) //讀取時間
{
ReadTimeFlag=0;
Readtime();
}
Scan_Key();
}
}
......
/*------------------------------------------------
中斷0開啟 初始化
------------------------------------------------*/
void Alarm_Int0_Init() //中斷0開啟
{
EA = 1;
EX0 = 1;
IT0 = 0;//0電平的觸發方式,1下降沿觸發
}
/*------------------------------------------------
中斷子程序
------------------------------------------------*/
void Alarm_Int0() interrupt 0
{
PCON = 0x00;
I2CWrite(DS3231_STATUS,0x00); //清DS3231內部鬧鐘標志位.狀態寄存器
}
......
if(hour==23&&min==00&&sec==00) //關機
{
PCON = 0X02;
}
......
void InitDS3231() //初始化
{
SCL=1;
delayus(5);
SDA=1;
delayus(5);
I2CWrite(DS3231_AL1DAY,0x81); //A1M4置位,時分秒匹配時鬧鐘響應
I2CWrite(DS3231_AL2DAY,0x81); //A2M4置位,時分匹配時鬧鐘響應
I2CWrite(DS3231_STATUS,0x00); //32KHZ輸出禁止,鬧鐘標志位清零
I2CWrite(DS3231_CONTROL,0x07); //中斷允許,鬧鐘1和2打開
I2CWrite(DS3231_AL1HOUR,0x06); //開機一:時
I2CWrite(DS3231_AL1MIN,0x00); //開機一:分
I2CWrite(DS3231_Al1SEC,0x00); //開機一:秒
I2CWrite(DS3231_AL2HOUR,0x17); //開機二:時
I2CWrite(DS3231_AL2MIN,0x30); //開機二:分
}
|