|
這是89c52的51單片機教程中演示串口的一個示例程序:
#include "reg52.h"
typedef unsigned int u16;//對系統(tǒng)默認(rèn)數(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; //清除接收中斷標(biāo)志位
rec_data=SBUF; //存儲接收到的數(shù)據(jù)
SBUF=rec_data; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
}
|
這個程序可以實現(xiàn)將串口接收到的數(shù)據(jù)再發(fā)送回相連的電腦。
設(shè)置定時器對這樣的串口通信有什么用嗎,我感覺沒有用啊。
還有為什么要波特率加倍,波特率一開始又是什么。。暈
真的很迷惑
|
|