通信
分类: 并行通信 串行通信
串行通信: 设备
接受
发送
CPU
协议 (通信协议) 硬件层协议
软件层协议
CH340: 把计算机传到USB口的数据信号 转化到 UART串口
串行通信的分类 单工 半双工 全双工
按同步时钟信号
同步通信(有CLK引脚的、信息帧)
异步通信 (数据帧、传输速度相同(波特率))
有效传输速率 80%
传输速度
1、波特率 单位时间传输了多少码元 bps 二进制码元 0或1
2、比特率 单位时间传输了多少二进制位数
在单片机里 波特率=比特率(不是所有领域)
UART 51单片机的串口 是一个异步全双工的UART串口
没有时钟引脚 靠数据帧和波特率 可收可发 2根线 通过异步收发器(一个电路结构)
TI 发送中断
RI 接受中断
SCON寄存器
SM0:工作方式
SM1:工作方式
SM2:多机通信(只有两台机器 就直接设置为0)
REN:允许接受
TB8:发送校验位
RB9:接受校验位
SBUF (串口数据缓冲寄存器)
波特率发生器 T1 :设置T1初值 方式2 自动清除
1/9600溢出
TH1 = TL1= 256 – (focs*10的六次方)/12*9600*32
fosc 晶振频率
9600波特率 :TL0 = TH0 = 0xFD
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint jieshou;
void main()
{
SCON =0x50;
TMOD = 0x20;
EA=1;
ES=1;
TL1 =0xfd;
TH1 =0xfd;
TR1 =1;
while(1);
}
void es() interrupt 4
{
if(TI==1){TI = 0;}
if(RI==1)
{
RI = 0;
jieshou =SBUF;
if(jieshou == 1){P2 =~0x01;}
else if(jieshou == 2){P2 = ~0x02;}
else if(jieshou == 3){P2 = ~0x03;}
else if(jieshou == 4){P2 = ~0x04;}
else if(jieshou == 5){P2 = ~0x05;}
else if(jieshou == 6){P2 = ~0x06;}
else if(jieshou == 7){P2 = ~0x07;}
else if(jieshou == 8){P2 = ~0x08;}
else {P2 = 0xff;SBUF = 0x0e;}
}
}