找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3704|回复: 5
收起左侧

为啥我的单片机代码在一个死循环中,但是却只执行了一次,百思不得其解

[复制链接]
ID:141296 发表于 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. }
复制代码
回复

使用道具 举报

ID:1 发表于 2018-4-15 23:56 | 显示全部楼层
在keil里面单步 或者用仿真芯片硬件仿真就可以知道答案了
回复

使用道具 举报

ID:308785 发表于 2018-4-16 00:08 | 显示全部楼层
中间可以不看,你就在死循环里面搞一个i++或者其他的看能不能执行,可以执行说明你的串口通讯程序有问题

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:287575 发表于 2018-4-16 00:09 | 显示全部楼层
你的程序结构就只能发送一次,错误是你在中断里写了else TI=0,当你发送完一个字节后,马上进入中断,此时因没有接收中断,只能是发送完成中断了,你把TI=0,而你的SENDONEBYTE()里边傻乎乎的等TI为1呢,TI早让别人清零了,所有去掉中断里的ELSE TI=0就可以了

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:308951 发表于 2018-4-16 08:33 来自手机 | 显示全部楼层
有可能你的中断益出不在执行
回复

使用道具 举报

ID:309009 发表于 2018-4-16 10:01 | 显示全部楼层
一般要给点delay
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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