外部中断子程序: INT0_ISR: push a push x lcall _get_data_interrupt pop x pop a RETI 外部中断子程序调用的函数:
void get_data_interrupt() { GET_DATA_INT_DISABLE; P0DATA|=(0x01<<5); TEST=1; GET_DATA_INT_ENABLE; GET_DATA_INT_CLR_FLAG; return; } 主函数: volatile BYTE TEST; void main() { M8C_EnableGInt; GET_DATA_INT_ENABLE; P0DATA|=(0x01<<5); while(1) { if (TEST ==1) { P0DATA&=~(0x01<<5); TEST=0; } } } 这段程序的目的是:进入中断后把P0.5电平拉高,TEST=1;主程序中判断TEST是否为1,如果为1,把P0.5电平拉低,TEST=0; 问题是:中断后运行结果P0.5电平一直是高的,我可以肯定的是TEST的值在中断函数中确实是被改变为1. 不过回到主函数中这个改变无效了。If中的不会被执行到。 如果我把IF语句去掉,while(1)中只有P0DATA&=~(0x01<<5);这样运行的结果是:进中断的话P0.5输出高电平,出中断后被拉低。说明程序是可以进入中断并且可以退出中断的。
|