终于搞清楚了!
原来:我项目需用到STC8的INT0/INT1(2个脚都是类似插拔电,而非按键类型),本来完全可简简单单都用T0查询方式消抖(无需开ET0!其实软件消抖多几十ms都很可靠的了)! 但我想试试T0中断方式消抖的,结果就是中断方式消抖只能用于其中1个中断,而那另1个中断不能再用T0中断或查询方式消抖,只能软件消抖,怎么试都只能这样(项目也确实有点特殊,需判2个中断脚4种状态且其中2种复位并标记刷新EEPR,LED不同指示等很多需要判断区别的东西);
原来:只要其中1个用了T0,重载并TR0=1启动过,不管有没有启动过ET0中断,都会产生一个溢出标志TF0=1,而有T0中断服务函数的话,就会进去响应,只有响应了T0中断TF0才硬件清0,当然也可软件查询清0。但我这个T0中断服务函数是只是专门处理其中一个中断事件的,而这个T0中断服务函数里面的判断条件很难于满足二个中断所需各种状态的判断和处理,所以就乱了;
所以:之前测试很久反复出现复位2次,误复位或造成LED指示混乱或EEPR记录混乱等莫名其妙问题!到处清0或开关中断,以及改优先权都无效!
成果:这次虽然千辛万苦,但项目特殊仍未用上T0中断方式消抖!但至少搞清楚了T0中断方式消抖的用法及有关具体问题!其他项目必要/合适时再用! 当然具体情况得具体分析!
后话:一直说尽量少用软延时,特别是中断服务函数里面,效率才高。其实也无需好高骛远,物尽其用且简单可靠才是王道第一!效率问题永远后面再说,就如本案简简单单的2个中断事件的消抖处理,还非要都用定时器消抖的话,都用查询方式够了,想用中断方式的话,尽管去试吧!得不偿失。