本帖最后由 46621295 于 2012-5-25 16:51 编辑
PIC18F6720,4MHz晶振,开启了高级中断INT0、INT1,INT0接时钟IC每秒或每分产生的时间脉冲,INT1接按键脉冲。main()中首先初始化之后while(1)循环,该循环内首先扫描按键,然后处理时间脉冲标记,第三开启开门狗(1:16)进入休眠,第四关闭开门狗、使能高中断。
故障:绝大多数样机使用该程序运行正常,但个别样机在正常运行几天后出现假死状态,此时按下按键,设备恢复正常运行但不是从开机画面开始的那种运行,而是好像程序停在了某处之后再从此处运行的样子。为了检验while(1)是否停止,我特意在第二步处理时间脉冲标记处加入蜂鸣报警提示1,也在第四步开始加入了蜂鸣报警提示2,将程序烧入故障样机,有的连续正常运行一天有的两天不等后,又出现同样的问题,表现出来就是开始蜂鸣报警1和2均正常,一天或两天(不同设备不等)后没有了蜂鸣报警声,按下按键后恢复正常,蜂鸣报警声恢复并且读取到的时钟IC时间也正确,说明在没有蜂鸣报警期间时钟IC是正常工作的。
问题就来了,从表现来看,是正常运行一段时间后while(1)循环没有被执行。一、是硬件故障吗?比如晶振停振,但为何通过按下按键产生INT1中断可以恢复正常,并且不是彻底的重启(正常启动时设备会出现开始画面),还有时钟IC的INT0中断为何不能使设备恢复,如果晶振停振后再起振的话程序是从什么地方执行的。二、如果是软件故障,为什么大部分样机能正常运行?三、是进入休眠后未能唤醒吗?看门狗溢出和INT0每秒或没分中断应该都可以唤醒啊。
请各位帮我分析分析,谢谢! |