标题: 请问单片机C语言位变量不能取反吗? [打印本页]

作者: mtt661    时间: 2023-4-2 22:48
标题: 请问单片机C语言位变量不能取反吗?
P33接了个灯,低电平亮,然后用定时器0,每秒P33接口反转一次,单片机STC8G1K

单片机C语言源程序如下:
  1. bit flag;

  2. void Timer0_Init(void)                //1毫秒@12.000MHz
  3. {
  4.         AUXR |= 0x80;                        //定时器时钟1T模式
  5.         TMOD &= 0xF0;                        //设置定时器模式
  6.         TL0 = 0x20;                                //设置定时初始值
  7.         TH0 = 0xD1;                                //设置定时初始值
  8.         TF0 = 0;                                //清除TF0标志
  9.         TR0 = 1;                                //定时器0开始计时
  10.         ET0=1;
  11.         EA=1;
  12. }


  13. void TM0_Isr() interrupt 1
  14. {
  15.         static unsigned int T0Count;
  16.         T0Count++;
  17.         if(T0Count>=1000)
  18.         {
  19.                 T0Count=0;
  20.     P33 = !P33;
  21.         }
  22. }

  23. void main()
  24. {
  25.         IO_int();
  26.         Timer0_Init();
  27.     while (1);
  28.         {
  29. //        P33=flag;
  30.         }
  31. }
复制代码
上面这样写是没有问题的,然而我用一个flag标志以下,中断函数和while函数改成以下

  1. void TM0_Isr() interrupt 1
  2. {
  3.         static unsigned int T0Count;
  4.         T0Count++;
  5.         if(T0Count>=1000)
  6.         {
  7.                 T0Count=0;
  8.     flag = !flag;//改这里
  9.         }
  10. }

  11. void main()
  12. {
  13.         IO_int();
  14.         Timer0_Init();
  15.     while (1);
  16.         {
  17.         P33=flag;//改这里
  18.         }
  19. }
复制代码
为啥就不行了?灯不亮,位变量不能取反吗?





作者: zoyou    时间: 2023-4-2 23:16
flag没赋初始值
作者: 188610329    时间: 2023-4-2 23:20
while(1)  后面的  分号 去掉
作者: lkc8210    时间: 2023-4-2 23:36


作者: 32小废物    时间: 2023-4-3 00:23
去反符号是~不是!
作者: csmyldl    时间: 2023-4-3 00:52
肯定可以取反的,问题不是出在位变量取反上
作者: cnos    时间: 2023-4-3 08:57
我估计是你没有初始化IO口,IO口的模式不能驱动LED。
作者: 雪糕yya    时间: 2023-4-3 15:22
while(1)  后面不该有;吧




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1