学习目标:
串口通信的基础知识和设置详解。
学习内容:串口通信基础知识
并行通信:多条数据线将数据字节的各个位同时传送*
缺点:1.电磁干扰 2.成本高
3.由于传输线较多,长距离传输成本高
串口通信:将数据字节分为一位一位的形式,在一条传输线上逐个传送
优点:1.传输线少,长距离传输成本低,目前串行通信比较普遍
串口通信:又叫—> UART(全双工通用异步收发器)
串口通信分为 *同步: SPI I2C USART
*异步: UART
串口通信分为 *点对点(USB(通用串行总线))
*点对多(协议(通常是modbus协议)完成)
串口通信开发一般需要解决的问题:
*数据传送:数据传送主要解决传送中的标准,格式及工作方式
*数据转换:数据转换是指数据的串并转换
串口通信的传输方式:
*单工:指数据传输仅能按一个固定方向传输,不能反向输出(一条线解决)
*半双工:指数据传输可以双向输出,但不能同时进行传输(一条线解决)
*全双工:指数据传输可以同时进行双向传输(两条线解决)
串口通信的错误校验:
*奇偶校验
*代码和校验
*循环冗余码校验(CRC)
串口使用方法:
1.确定T1的工作方式,也就是TMOD(TMOD=0x20 //T1工作方式2)
2.确定串口工作方式,也就是SCON(SCON=0x50 //工作方式1)
3.计算T1的初值(设定波特率),装载TH1.TL1
4.启动T1(TCON中的TR1位)
5.如果使用中断,需要开启串口中断控制位(IE)
学习内容:TOMD设置
TMOD = 0x20;
为啥是0x20 就是定时器T1的方式3呢???
定时器工作方式设置图:
寄存器位图:
如上两个图:
当TMOD = 0x20时 0x20 = 0010 0000 代入图1
M1 M0 = 10 就是定时器的 工作方式2
学习内容:SCON设置
由图而知:
当 SCON = 0x50时,0x50 = 0101 0000 代入图中
则 SM0 = 0 SM1 = 1 则 就是方式1
学习内容:波特率计算
常用的波特率设置参数:
例题:
根据例题:可知当 TMOD = 0x20;求波特率9600
则 x = 0xFD 就是 9600
学习内容:代码与效果
#include <reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
void delay_ms(u16 a)
{
u16 x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
unsigned char zifu = 'A';
void uart_init(u8 bound)
{
TMOD |= 0x20;//T1定时器 工作方式2
SCON = 0x50;//工作方式1
// PCON=0X80; //波特率加倍
TH1 = bound;
TL1 = bound;
// ES = 1;
EA = 1;
TR1 = 1;
}
void main()
{
uart_init(0xFD);
while(1)
{
SBUF = zifu;
delay_ms(1000);
while(!TI);
TI=0;
}
}