|
说明:
这是一个串口通信的收发案列
注意:
该代码将占用定时器T1
相关中断处理的方案代码在函数
URAT_T1()中,代码中只是做了简单的 收到数据HEX +1 的处理具体应用中,自行修改
UART.H
- #ifndef UART_H
- #define UART_H
- #include <reg52.h>
- //--------------------------定义区
- #define uchar unsigned char
- #define Uint unsigned int
- //------------------------全局区域
- //------------------------函数区域
- void delay_UART(Uint z);
- void UART_init();
- #endif
复制代码
UART.C
- /*
- 晶振:11.0592
- */
- #include "UART.H"
- /*延时函数---传入毫秒值*/
- void delay_UART(Uint z)
- {
- Uint x;
- Uint y;
- for (x = z; x > 0; x--) {
- for (y = 114; y > 0; y--)
- ;
- }
- }
- /*串口初始化*/
- void UART_init()
- {
- // T1工作模式2 8位自动重载
- TMOD = 0x20;
- // 比特率 9600
- TH1 = 0xfd;
- TL1 = 0xfd; //
- // 设置10位异步收发器(8位数据)
- SM0 = 0;
- SM1 = 1;
- // 串口允许接收数据
- REN = 1;
- // 启动T1定时器
- TR1 = 1;
- // 打开总中断
- EA = 1;
- // 打开串口中断
- ES = 1;
- }
- /*串口通信中断*/
- void UART_T1() interrupt 4
- {
- uchar num; // 需要给PC发的数据
- if (RI) // 如果RI=1,接收完成
- {
- num = SBUF; // 取出缓存器里的数据
- //==============code
- // RI = 0;
- num++; /* 将接收到的数据+1处理*/
- SBUF = num; // 将数据丢给缓存器,等待发送
- //==============CODE_end
- RI = 0; // 软件清0,继续接收
- while (!TI)
- ; // TI=0时,发送未完成,等待T1=1
- TI = 0; // 软件清0,继续发送
- }
- }
- // void main()
- // {
- // UART_init();
- // while (1) {
- // }
- // }
复制代码
|
|