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