本帖最后由 liziride 于 2020-11-4 20:13 编辑
UART10通讯模式
一个起始位,8个数据位,一个结束位存入SBUF
SBUF同一个地址,但在内部有两个物理结构
一个用于发送,一个用于接收
发送接收都是按bit操作
#include<reg51.h>
unsigned char temp;
//波特率发生器只能用timer1
void UART_Init(unsigned int BAUD){
TMOD = (TMOD & 0x0F) | 0x20;//定时器1,8位自动重装模式
TH1 = 256 - (11059200/12/32/BAUD);//计算出初值,固定不变,重装用
TL1 = TH1;//手动第一次赋值
TR1 = 1;//定时器1开始计时
ET1 = 0;//定时器1制作波特率发生器,不用产生中断
SCON = 0x50;//方式一,10位UART可变波特率,常用此模式
ES = 1; //串口使能中断
PS = 0; //串口低级中断
PCON = 0x00;//波特率不加倍,加倍则0x80;定时器2波特率不受影响
}
void Uart() interrupt 4{
if(RI){
RI = 0;
temp = SBUF;
}
}
void SendData(unsigned char dat){//写入SBUF之后函数挂起,只有中断之后,后续的调用才会进来
SBUF = dat;
while(TI == 0);
TI = 0;
}
//接收完毕中断RI自动1,编程置0,发送完毕中断TI自动1,编程置0
//单片机通过对应的转换装置与电脑的通讯口,电脑上的软件通过对应的com口与单片机通讯
//也可以采取两个单片机之间互相测试,发送口 连 接收口,不能相同对接,即TXD接RXD
//可以尝试一下,一个单片机自己接自己.哈哈
void main(){
UART_Init(9600);
EA = 1;//总中断
while(1);
}
|
@dirtwillfly :谢谢鼓励,新手自学
不错