标题: 为啥我的单片机代码在一个死循环中,但是却只执行了一次,百思不得其解 [打印本页]

作者: baigezy    时间: 2018-4-15 22:36
标题: 为啥我的单片机代码在一个死循环中,但是却只执行了一次,百思不得其解
单片机代码如下:
  1. #include<main.h>
  2. void InitUART(void)
  3. {
  4.     TMOD = 0x20;
  5.     SCON = 0x40;
  6.     TH1 = 0xFF;
  7.     TL1 = TH1;
  8.     PCON = 0x80;
  9.     EA = 1;
  10.     ES = 1;
  11.     TR1 = 1;
  12. }
  13. void SendOneByte(unsigned char c)
  14. {
  15.     SBUF = c;
  16.     while(!TI);
  17.     TI = 0;
  18. }
  19. void UARTInterrupt(void) interrupt 4
  20. {
  21.     if(RI)
  22.     {
  23.         RI = 0;
  24.         //add your code here!
  25.     }
  26.     else
  27.         TI = 0;
  28. }
  29. void main()
  30. {
  31.         uchar i;
  32.         InitUART();        
  33.         while(1)
  34.         {
  35.         #include<main.h>
  36. void InitUART(void)
  37. {
  38.     TMOD = 0x20;
  39.     SCON = 0x40;
  40.     TH1 = 0xFF;
  41.     TL1 = TH1;
  42.     PCON = 0x80;
  43.     EA = 1;
  44.     ES = 1;
  45.     TR1 = 1;
  46. }
  47. void SendOneByte(unsigned char c)
  48. {
  49.     SBUF = c;
  50.     while(!TI);
  51.     TI = 0;
  52. }
  53. void UARTInterrupt(void) interrupt 4
  54. {
  55.     if(RI)
  56.     {
  57.         RI = 0;
  58.         //add your code here!
  59.     }
  60.     else
  61.         TI = 0;
  62. }
  63. void main()
  64. {
  65.         uchar i;
  66.         InitUART();        
  67.         while(1)//这里是死循环,但是块内代码就只执行了一次,串行口只发送了一次数据,请问是什么原因
  68.        {        
  69.              DTH11_Ready();                        
  70.              for(i=0;i<5;i++)
  71.             {
  72.                    SendOneByte(DTH11_DATA[i]);        
  73.             }
  74.                         
  75.         }

  76. }
复制代码

作者: admin    时间: 2018-4-15 23:56
在keil里面单步 或者用仿真芯片硬件仿真就可以知道答案了
作者: suph007    时间: 2018-4-16 00:08
中间可以不看,你就在死循环里面搞一个i++或者其他的看能不能执行,可以执行说明你的串口通讯程序有问题
作者: zhangxiaozi    时间: 2018-4-16 00:09
你的程序结构就只能发送一次,错误是你在中断里写了else TI=0,当你发送完一个字节后,马上进入中断,此时因没有接收中断,只能是发送完成中断了,你把TI=0,而你的SENDONEBYTE()里边傻乎乎的等TI为1呢,TI早让别人清零了,所有去掉中断里的ELSE TI=0就可以了
作者: jwl595    时间: 2018-4-16 08:33
有可能你的中断益出不在执行
作者: kqqnhzl    时间: 2018-4-16 10:01
一般要给点delay




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