#include "reg52.h" typedef unsigned int u16;//对系统默认数据类型进行重定义 typedef unsigned char u8; void uart_init(u8 baud) { TMOD|=0X20; //设置计数器工作方式 2 SCON=0X50; //设置为工作方式 1 PCON=0X80; //波特率加倍 TH1=baud; //计数器初始值设置 TL1=baud; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void main() { uart_init(0XFA);//波特率为 9600 while(1) { } } void uart() interrupt 4 //串口通信中断函数 { u8 rec_data; RI = 0; //清除接收中断标志位 rec_data=SBUF; //存储接收到的数据 SBUF=rec_data; //将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 } |
Materialism 发表于 2022-7-6 12:00
51单片机没有独立的波特率发生器,它需要借助定时器当作波特率发生器。如果你不设置定时器的话,串口这种异 ...
Materialism 发表于 2022-7-6 12:00
51单片机没有独立的波特率发生器,它需要借助定时器当作波特率发生器。如果你不设置定时器的话,串口这种异 ...
wulin 发表于 2022-7-6 14:51
此程序只是演示最基本的串口通讯的配置和使用,实际使用中往往传输的是按照通讯协议编制的数据串,可能是只 ...
Hephaestus 发表于 2022-7-7 15:31
波特率加倍只能恶化误差,减半才是减少误差的方法。
kirei0715 发表于 2022-7-6 13:22
但是这个定时器的中断号是2,也没有用到中断2呀。这个定时器就感觉和串口通信没什么联系
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |