通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议,应用十分广泛。UART工作原理是将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。
简单双向串口通信有两根通信线(发送端TXD接收端RXD)
TXD与RXD要交叉连接
当只需要单向数据传输时,可以直接一根通信线
一个TXD支持多个RXD(一发多收)
当电平标志不一致时,需要加电平转换芯片
波特率设置:
void UartInit(void) //4800bps@11.0592MHz [UART_Init()]
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF4; //设定定时初值
TH1 = 0xF4; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
数据显示模式:
编码即ASCII码
电脑通过串口控制LED
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char Sec;
//同一函数不能即在主函数中出现又在中断函数中出现,中断会打断主函数
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Routine() interrupt 4 //中断服务子函数 电脑发送给单片机
{
if(RI == 1)
{
P2 = ~SBUF; //有数据即存在SBUF中,赋值给P2 LED指示数据
UART_SendByte(SBUF);
RI = 0; //硬件只负责置1,T1和R1需要软件复位置0
}
}