找回密码
 立即注册
搜索
热搜: 中医 针灸 咳嗽
查看: 216|回复: 0

串口的收发案列

[复制链接]

3706

主题

1

回帖

1万

积分

管理员

积分
11870
发表于 2023-2-14 17:48:50 | 显示全部楼层 |阅读模式
  1. /*
  2. 晶振:11.0592

  3. */
  4. #include <REG52.H>

  5. //--------------------------定义区
  6. #define uchar unsigned char
  7. #define Uint  unsigned int
  8. //------------------------全局区域
  9. uchar num; // 需要给PC发的数据

  10. //------------------------函数区域

  11. void delay(Uint z);
  12. void UART_init();

  13. void main()
  14. {
  15.     UART_init();
  16.     while (1) {

  17.     }
  18. }

  19. /*延时函数---传入毫秒值*/
  20. void delay(Uint z)
  21. {
  22.     Uint x;
  23.     Uint y;
  24.     for (x = z; x > 0; x--) {
  25.         for (y = 114; y > 0; y--)
  26.             ;
  27.     }
  28. }
  29. /*串口初始化*/
  30. void UART_init()
  31. {
  32.     // T1工作模式2 8位自动重载
  33.     TMOD = 0x20;
  34.     // 比特率 9600
  35.     TH1 = 0xfd;
  36.     TL1 = 0xfd; //
  37.     // 设置10位异步收发器(8位数据)
  38.     SM0 = 0;
  39.     SM1 = 1;
  40.     // 串口允许接收数据
  41.     REN = 1;
  42.     // 启动T1定时器
  43.     TR1 = 1;
  44.     // 打开总中断
  45.     EA = 1;
  46.     // 打开串口中断
  47.     ES = 1;
  48. }
  49. /*串口通信中断*/
  50. void UART_T1() interrupt 4
  51. {

  52.     if (RI) // 如果RI=1,接收完成
  53.     {
  54.         num = SBUF; // 取出缓存器里的数据
  55.         //==============code
  56.         P1 = SBUF; // 取出接收的数据,将数据传给LED灯的引脚点灯
  57.         RI =0;
  58.         num++; /* 将接收到的数据+1处理*/
  59.         SBUF = num; // 将数据丢给缓存器,等待发送
  60.         //==============CODE_end

  61.         RI = 0; // 软件清0,继续接收
  62.         

  63.         while (!TI);// TI=0时,发送未完成,等待T1=1
  64.         TI   = 0; // 软件清0,继续发送
  65.         
  66.     }
  67. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|私人站点 ( 冀ICP备2023028127号-2 )

GMT+8, 2025-4-19 12:12 , Processed in 0.076724 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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