#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.raoushi.com/bbs/) | Powered by Discuz! X3.1 |