找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 878|回复: 7
收起左侧

请问单片机C语言位变量不能取反吗?

[复制链接]
ID:1010435 发表于 2023-4-2 22:48 | 显示全部楼层 |阅读模式
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. }
复制代码
为啥就不行了?灯不亮,位变量不能取反吗?




回复

使用道具 举报

ID:1069585 发表于 2023-4-2 23:16 | 显示全部楼层
flag没赋初始值
回复

使用道具 举报

ID:624769 发表于 2023-4-2 23:20 | 显示全部楼层
while(1)  后面的  分号 去掉
回复

使用道具 举报

ID:161164 发表于 2023-4-2 23:36 | 显示全部楼层
2023-04-02_233556.png
回复

使用道具 举报

ID:1069548 发表于 2023-4-3 00:23 来自手机 | 显示全部楼层
去反符号是~不是!
回复

使用道具 举报

ID:235200 发表于 2023-4-3 00:52 | 显示全部楼层
肯定可以取反的,问题不是出在位变量取反上
回复

使用道具 举报

ID:688692 发表于 2023-4-3 08:57 | 显示全部楼层
我估计是你没有初始化IO口,IO口的模式不能驱动LED。
回复

使用道具 举报

ID:1069659 发表于 2023-4-3 15:22 | 显示全部楼层
while(1)  后面不该有;吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表