[51单片机] 大师们,帮助挑挑毛病。辛苦了!看看哪里有不足处指正一下

[复制链接]
654|1
 楼主| 小分子 发表于 2016-9-1 22:24 | 显示全部楼层 |阅读模式
  1. /***********************************
  2. 电脑向MCU发一串字符后,原样返还电脑
  3. ************************************/

  4. #include <reg52.h>

  5. #define uchar unsigned char

  6. bit g_NewRec = 0;                                                                 //接收到数据标志
  7. bit g_TranEnd = 1;                                                                 //发送完毕标志
  8. uchar g_UartBuff;                                                                 //字符缓存变量

  9. void InitUart();                                                                  //串口通信初始化函数

  10. void main()
  11. {
  12.         InitUart();
  13.         while (1)
  14.         {
  15.                 if ((1 == g_NewRec) && (1 == g_TranEnd))          //确定接收到新数据且上次数据以发送完毕
  16.                 {
  17.                         SBUF = g_UartBuff;                                                  //将接收到的数据发送出去
  18.                         g_NewRec = 0;                                                          //对标志清零
  19.                         g_TranEnd = 0;
  20.                 }       
  21.         }
  22. }

  23. void InitUart()
  24. {
  25.         TMOD &= 0x0F;                                   //清空T1的控制位
  26.         TMOD |= 0x20;                                   //配置T1工作模式为2,即自动重装模式;
  27.         TH1 = 0xFD;                                           //晶振为11.0592MHZ,波特率为9600
  28.         TL1 = TH1;                                           //将TH1中的数据添加到TL1中
  29.         PCON = 0x00;                                   //波特率正常不倍增
  30.         SCON = 0x50;                                   //配置串口工作模式为1,且开启接收功能
  31.         TR1 = 1;                                           //串口的波特率发生器由T1(T2)产生,开启定时器T1;
  32.         ES = 1;                                                   //开启串口中断
  33.         EA = 1;                                                   //开启总中断
  34. }

  35. void UartIRQ() interrupt 4                   //串口中断
  36. {
  37.         if (1 == RI)
  38.         {
  39.                 g_UartBuff = SBUF;                   //从接收缓冲器中读取字符
  40.                 RI = 0;                                           //接收中断标志们清零
  41.                 g_NewRec = 1;       
  42.         }
  43.         if (1 == TI)
  44.         {
  45.                 TI = 0;                                          //发送中断标志们清零
  46.                 g_TranEnd = 1;                          //发送标志置1
  47.         }
  48. }
kk118a 发表于 2016-9-1 22:32 | 显示全部楼层
void UartIRQ() interrupt 4                   //串口中断
{
        if (1 == RI)
        {
                g_UartBuff = SBUF;                   //从接收缓冲器中读取字符
                RI = 0;                                           //接收中断标志们清零
                g_NewRec = 1;        
        }
        if (1 == TI)
        {
                TI = 0;                                          //发送中断标志们清零
                g_TranEnd = 1;                          //发送标志置1
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部