[51单片机] 欢迎大师们来挑刺(C51串口通信)

[复制链接]
2590|14
 楼主| 小分子 发表于 2016-9-4 11:50 | 显示全部楼层 |阅读模式
  1. /*******************************
  2. MCU通过串口向电脑发送一串字符串
  3. *******************************/

  4. #include <reg52.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. bit g_TranEnd = 1;                                                                  //发送完毕标志

  8. void InitUart();
  9. void DelayMs(uint ms);

  10. void main()
  11. {
  12.         char *string = "I LOVE YOU!";
  13.        
  14.         InitUart();
  15.         while (1)
  16.         {
  17.                 if ((*string != '\0') && (1 == g_TranEnd))                //当字符串不为‘\0'且发送完标志为1时进行发送
  18.                 {
  19.                          SBUF = *string++;
  20.                         g_TranEnd = 0;
  21.                         DelayMs(2);                                                                        //等待发送结束,发送一个数据帧至少要1MS,而执行一条语句一般需要几十个US,如果不延时,程序只能停留在IF处。
  22.                    }       
  23.         }
  24.        
  25. }

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

  38. void UartIRQ() interrupt 4
  39. {
  40.         if (1 == TI)
  41.         {
  42.                  TI = 0;
  43.                 g_TranEnd = 1;
  44.         }
  45.                
  46. }

  47. void DelayMs(uint ms)   //11.0592MHZ,延时1MS
  48. {
  49.         uint x,y;
  50.         for(x=ms;x>0;x--)
  51.         {
  52.                 for(y=113;y>0;y--);
  53.         }
  54. }
xyz549040622 发表于 2016-9-4 13:33 | 显示全部楼层
c51的串口还挑刺。。。
jpaekeo 发表于 2016-9-4 16:25 | 显示全部楼层
用定时器2串口通信,有编程实例没有
yklstudent 发表于 2016-9-4 20:53 | 显示全部楼层
串口发送采用查询为什么不采用常规做法,走肥猪流
llh1979 发表于 2016-9-4 21:04 来自手机 | 显示全部楼层
只要你的延时时间不是刚好,就会降低效率
ihafd 发表于 2016-9-4 22:33 | 显示全部楼层
lihui567 发表于 2016-9-5 08:25 | 显示全部楼层
用中断法非常不错
416356084 发表于 2016-9-5 10:19 | 显示全部楼层
单纯的发送,,,
 楼主| 小分子 发表于 2022-1-4 10:38 | 显示全部楼层
感谢各位老师们的指点。
qin552011373 发表于 2022-1-7 14:21 | 显示全部楼层
这个有什么挑的
ayb_ice 发表于 2022-1-8 08:29 | 显示全部楼层
不如直接查询TI标志,省空间,速度还快些
粤原点科技 发表于 2022-1-8 18:01 | 显示全部楼层
本帖最后由 粤原点科技 于 2022-1-8 18:02 编辑
  1. unsigned char String[]="I LOVE YOU";
  2. unsigned char *pString=String;
野指针了解一下。

xianghou 发表于 2022-1-11 00:10 来自手机 | 显示全部楼层
入门者的水平还用得着挑刺啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

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