关于51定时中断的问题?

2019-07-15 07:42发布

我想使用定时器T0产生的中断制作跑马灯
  1. #include<reg51.h>

  2. void main(void)
  3. {
  4.         EA = 1;
  5.         ET0 = 1;
  6.         TMOD = 0x01;
  7.         TH0 = 15536 / 256;
  8.         TL0 = 15536 % 256;
  9.         TR0 = 1;
  10.         P0 = 0xfe;
  11.         while(1)
  12.                 ;
  13. }

  14. void time0(void) interrupt 1 using 0
  15. {
  16.         P0 <<= 1;
  17.         if (P0 != 0xff)
  18.                 P0 |= 1;
  19.         else
  20.                 P0 = 0xfe;        
  21.         TH0 = 15536 / 256;
  22.         TL0 = 15536 % 256;
  23. }
复制代码这样的话八个led只会执行一次循环后无反应
而将P0 <<= 1;if (P0 != 0xff)
P0 |= 1;
else
P0 = 0xfe; 换成_crol_(P0, 1);后,
效果如图:
希望各位解答一下这两种情况的原因
QQ截图20181206232137.png
0条回答

一周热门 更多>