赞
踩
1.了解串口
串口——可实现两个设备的互相通信。
单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。
2.硬件电路
图1
3.电平标准
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
TTL电平:+5V表示1,0V表示0
RS232电平:-3~-15V表示1,+3~+15V表示0
RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)
TTL和RS232电平只能传输10几米,而RS485电平可以传输几千米
51单片机不支持流控制
4.常用通信接口比较
图2
5.相关术语
全双工:通信双方可以在同一时刻互相传输数据
半双工:通信双方可以互相传输数据,但必须分时复用一根数据线
单工:通信只能有一方发送到另一方,不能反向传输
异步:通信双方各自约定通信速率,通俗来讲就是通信双方在发送数据之前,约定通信速率进行接收和发送信息。
同步:通信双方靠一根时钟线来约定通信速率
总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流)
图3
STC89C52有1个UART
STC89C52的UART有四种工作模式:
模式0:同步移位寄存器
模式1:8位UART,波特率可变(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可变
此例中选用了UART模式1
6.串口模式图
图4
串口通信:先发低位,再发高位
SBUF当左值的时候,是被赋值,此时是写值状态,写完之后会自动发出此数据,发送完会有一个TI;SBUF当右值的时候,接收数据,接收完之后会有一个RI
7.串口和中断系统
图5
8.串口相关寄存器
图6
串行口控制寄存器SCON和PCON
图7
图8
PCON
图9
图10
图11
0x20表示是0010 0000表示进入8位的模式
因为定时器1是8位计数,8位最高为256,即累加到256溢出一次,0XF3=243,256-243=13,即每隔13us溢出一次,溢出率为1/13us=0.07692MHZ。
0.07692MHZ/16=0.00480769MHZ=4807.69HZ
发送部分的原理就是SBUF写数据,自动发送,发完之后TI==1表示发送完毕,软件置为0表示归位。
SBUF接数据,RI为1表示接收到。
1.新建项目,添加Delay.c及Delay.h
2.main.c编码
void UART_Init()
{
SCON = 0x40; //首先配这个串行口寄存器
PCON |= 0x80; //波特率加倍,不加倍时钟会变慢,会对之后的结果形成较大的误差
//前两个SCON和PCON是串口的部分,剩下的都素定时器1的部分
TMOD &= 0x0F; //清除定时器1模式位
//SCON选择的是使用定时器1,这里的TMOD|= 0x20表示设定定时器1为8位自动重装方式,看图11
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //定时器赋值这个可以得波特率值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;//将Byte写入SBUF中
while(TI==0);//TI为1时,说明产生了发送中断,表示发送数据完成
TI=0;//数据发送完了,软件将TI置0
}
void main()
{
UART_Init();
while(1)
{
UART_SendByte(scd);
scd++;
Delay(1000);
}
}
3.最终结果
串口介绍
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。