如果在串口中断函数里面加一个while循环,在用定时器0做秒针的加一,为什么不进入串口中断函数时,可以正常加一,进去中断之后,定时器0就不起作用了,是为什么呢?理论上定时器0的中断优先级要比串口的高,为什么程序停在串口中断里,定时器0就不能在进行中断了呢?谢谢
理论上定时器0的中断优先级要比串口的高,你对中断优先级的理解有误。在默认情况下,单片机的5个中断源都是同级的优先级,只在同时申请中断时,先响应定时器T0的中断,但不等于T0的优先级比串口高,而是同级的。在响应了同级的中断时,是不能再响应其它同级的中断的。
你的问题解决的办法是:在响应串口中断时,要能响应T0的中断,必须设置T0的中断为高优先级才行,这样,T0的中断才能打断串口的中断。中断优先级有两个,分高、低两个优先级,默认是都是低级的。由中断优先级寄存器IP来设置,见下表,应该设置 PT0=1; 就行了。
C语言程序:PT0=1;
汇编程序:SETB PT0