標題: 請問單片機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.torrancerestoration.com/bbs/) Powered by Discuz! X3.1