uart
1.并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。
串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。
2.异步通信与同步通信
异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程
异步通信是以字符(构成的帧)为单位进行传输
3.单工是指数据传输仅能沿一个方向,不能实现反向传输。
半双工是指数据传输可以沿两个方向,但需要分时进行。
全双工是指数据可以同时进行双向传输
4.比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)
其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,
由定时器T1的溢出率来决定:
方式0的波特率 = fosc/12
方式2的波特率 =(2SMOD/64)· fosc
方式1的波特率 =(2SMOD/32)·(T1溢出率)
方式3的波特率 =(2SMOD/32)·(T1溢出率)
T1 溢出率 = fosc /{12×[256 -(TH1)]}
5.如果:TH1=0XF3; fosc=12MHZ(晶振)
T1 溢出率 = 1/(256-0xf3) = 1 / 13
方式1的波特率 = 2/32 x 1/13 x 1000000 = 4800bit/s
6.内容较多,可以参考普中科技PPT
#include <reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
void uart_init(void)
{
//波特率:4800
//设置为工作方式1
SCON=0X50;
//设置定时器工作方式2
TMOD=0X20;
//波特率加倍
PCON=0X80;
//计数器初始值设置,注意波特率是4800的
TH1=0XF3;
TL1=0XF3;
//串行口中断允许位(这个是包含串口的接收和发送中断的)
ES=1;
//打开总中断
EA=1;
//打开计数器
TR1=1;
}
// 通过串口发送1个字节出去
void uart_send_byte(u8 dat)
{
// 第1步,发送一个字节
SBUF = dat;
// 第2步,确认串口发送部分有没有发完,发完了TI会设置为1
while (!TI);
// 第3步,软件复位TI标志位
TI = 0;
}
void uart_send_string(u8 * str)
{
while ('\0' != *str)
{
uart_send_byte(*str);
++str;
}
}
int main(void)
{
uart_init();
// uart_send_string("This a uart test\r\n");
return 0;
}
void uart_isr(void) interrupt 4
{
u8 tmp;
//接收到数据RI会设置为1
if (RI)
{
tmp = SBUF;
RI = 0;
}
//把收到的发回去
uart_send_byte(tmp);
}