单片机问题

如果在串口中断函数里面加一个while循环,在用定时器0做秒针的加一,为什么不进入串口中断函数时,可以正常加一,进去中断之后,定时器0就不起作用了,是为什么呢?理论上定时器0的中断优先级要比串口的高,为什么程序停在串口中断里,定时器0就不能在进行中断了呢?谢谢

理论上定时器0的中断优先级要比串口的高,你对中断优先级的理解有误。在默认情况下,单片机的5个中断源都是同级的优先级,只在同时申请中断时,先响应定时器T0的中断,但不等于T0的优先级比串口高,而是同级的。在响应了同级的中断时,是不能再响应其它同级的中断的。

你的问题解决的办法是:在响应串口中断时,要能响应T0的中断,必须设置T0的中断为高优先级才行,这样,T0的中断才能打断串口的中断。中断优先级有两个,分高、低两个优先级,默认是都是低级的。由中断优先级寄存器IP来设置,见下表,应该设置 PT0=1; 就行了。

C语言程序:PT0=1;

汇编程序:SETB  PT0

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-14
1。“code”是单片机C语言特有的关键字
在单片机中RAM的空间特别小,特别珍贵。RAM空间,存放变量。而一些常量,比如码表等常量放在ROM中。所以单片机中code就是告诉单片机这个数据放入ROM中。
本例中dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; 数组内容为常量,故加上code,以节约RAM的空间。
其实code放在unsigned char 前也可以,比如code unsigned char dispbit[8]效果一样。
2.关于void T1zd(void) interrupt 3
“interrupt ”是单片机c语言中断关键字,至于后面的0,1,2,3,4,5,分别表示
0-外部中断0
1-定时器0
2-外部中断1
3-定时器1
4-串口中断
5-定时器2
“interrupt ”是单片机c语言中断关键字,是c51 语言在单片机中规定的,在程序编译时指明中断的类型。当相应的中断发生时,并执行这个中断函数。
本例中当定时器计数时间一到(即 TH1和TL1全部计满,并溢出 ),便执行下面程序,将0x1c放到 TH1中 0x18放到TL1 中,再开始重新计数(不断加1),每计满一次 LedNumVal值 加1。如此下去。。。