#include "reg52.h" typedef unsigned int u16;//對系統(tǒng)默認數(shù)據(jù)類型進行重定義 typedef unsigned char u8; void uart_init(u8 baud) { TMOD|=0X20; //設(shè)置計數(shù)器工作方式 2 SCON=0X50; //設(shè)置為工作方式 1 PCON=0X80; //波特率加倍 TH1=baud; //計數(shù)器初始值設(shè)置 TL1=baud; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計數(shù)器 } void main() { uart_init(0XFA);//波特率為 9600 while(1) { } } void uart() interrupt 4 //串口通信中斷函數(shù) { u8 rec_data; RI = 0; //清除接收中斷標志位 rec_data=SBUF; //存儲接收到的數(shù)據(jù) SBUF=rec_data; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器 while(!TI); //等待發(fā)送數(shù)據(jù)完成 TI=0; //清除發(fā)送完成標志位 } |
Materialism 發(fā)表于 2022-7-6 12:00
51單片機沒有獨立的波特率發(fā)生器,它需要借助定時器當作波特率發(fā)生器。如果你不設(shè)置定時器的話,串口這種異 ...
Materialism 發(fā)表于 2022-7-6 12:00
51單片機沒有獨立的波特率發(fā)生器,它需要借助定時器當作波特率發(fā)生器。如果你不設(shè)置定時器的話,串口這種異 ...
wulin 發(fā)表于 2022-7-6 14:51
此程序只是演示最基本的串口通訊的配置和使用,實際使用中往往傳輸?shù)氖前凑胀ㄓ崊f(xié)議編制的數(shù)據(jù)串,可能是只 ...
Hephaestus 發(fā)表于 2022-7-7 15:31
波特率加倍只能惡化誤差,減半才是減少誤差的方法。
kirei0715 發(fā)表于 2022-7-6 13:22
但是這個定時器的中斷號是2,也沒有用到中斷2呀。這個定時器就感覺和串口通信沒什么聯(lián)系
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |