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

UART的封装

[复制链接]

3706

主题

1

回帖

1万

积分

管理员

积分
11870
发表于 2023-2-28 16:19:56 | 显示全部楼层 |阅读模式

说明:
这是一个串口通信的收发案列
注意:
该代码将占用定时器T1
相关中断处理的方案代码在函数
URAT_T1()中,代码中只是做了简单的 收到数据HEX +1 的处理具体应用中,自行修改

UART.H


  1. #ifndef UART_H
  2. #define UART_H
  3. #include <reg52.h>

  4. //--------------------------定义区
  5. #define uchar unsigned char
  6. #define Uint  unsigned int
  7. //------------------------全局区域


  8. //------------------------函数区域

  9. void delay_UART(Uint z);
  10. void UART_init();
  11. #endif
复制代码


UART.C
  1. /*
  2. 晶振:11.0592

  3. */
  4. #include "UART.H"

  5. /*延时函数---传入毫秒值*/
  6. void delay_UART(Uint z)
  7. {
  8.     Uint x;
  9.     Uint y;
  10.     for (x = z; x > 0; x--) {
  11.         for (y = 114; y > 0; y--)
  12.             ;
  13.     }
  14. }
  15. /*串口初始化*/
  16. void UART_init()
  17. {
  18.     // T1工作模式2 8位自动重载
  19.     TMOD = 0x20;
  20.     // 比特率 9600
  21.     TH1 = 0xfd;
  22.     TL1 = 0xfd; //
  23.     // 设置10位异步收发器(8位数据)
  24.     SM0 = 0;
  25.     SM1 = 1;
  26.     // 串口允许接收数据
  27.     REN = 1;
  28.     // 启动T1定时器
  29.     TR1 = 1;
  30.     // 打开总中断
  31.     EA = 1;
  32.     // 打开串口中断
  33.     ES = 1;
  34. }
  35. /*串口通信中断*/
  36. void UART_T1() interrupt 4
  37. {
  38.     uchar num; // 需要给PC发的数据
  39.     if (RI)    // 如果RI=1,接收完成
  40.     {
  41.         num = SBUF; // 取出缓存器里的数据
  42.         //==============code
  43.         // RI = 0;
  44.         num++;      /* 将接收到的数据+1处理*/
  45.         SBUF = num; // 将数据丢给缓存器,等待发送
  46.         //==============CODE_end

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

  48.         while (!TI)
  49.             ;   // TI=0时,发送未完成,等待T1=1
  50.         TI = 0; // 软件清0,继续发送
  51.     }
  52. }

  53. // void main()
  54. // {
  55. //     UART_init();
  56. //     while (1) {
  57. //     }
  58. // }
复制代码


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

本版积分规则

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

GMT+8, 2025-4-20 07:19 , Processed in 0.069928 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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