Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12459
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-25 15:44
文章分类
文章存档

2016年(3)

我的朋友
最近访客

分类: 嵌入式

2016-09-04 11:56:21


点击(此处)折叠或打开

  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. }

阅读(1081) | 评论(0) | 转发(0) |
0

上一篇:欢迎大师们来挑刺(简单的C51串口通信)

下一篇:没有了

给主人留下些什么吧!~~