
- 前言
- 一、串口通信是什么?
- 二、功能实现
- 1.硬件 电路
- 2.串口时序及模式
- 3.代码
- 总结
前言
为了增强了单片机系统的硬件实力,单片机需要与各式各样的模块(WiFi模块,蓝牙模块等)互相通信,本文介绍了串口通信以及通过相关代码实现单片机与电脑的互相通信。
一、串口通信是什么?
1.串口:
•串行接口简称串口,也称串行通信接口或串行通讯接口,是采用串行通信方式的扩展接口。
• 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 • 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。 • 51 单片机内部自带 UART ( Universal Asynchronous Receiver Transmitter ,通用异步收发器),可实现单片机的串口通信。2.常见通信接口比较:
3.术语解释:
• 全双工:通信双方可以在同一时刻互相传输数据( 打电话,双方能同时说话 ) • 半双工:通信双方可以互相传输数据,但必须分时复用一根数据线( 对讲机 ) • 单工:通信只能有一方发送到另一方,不能反向传输( 收音机 ) • • 异步:通信双方各自约定通信速率 • 同步:通信双方靠一根时钟线来约定通信速率 • • 总线:连接各个设备的数据传输线路(类似于一条马路,把路边各住户连接起来,使住户可以相互交流) •波特率:串口通信速率,单位时间内传输二进制的位数(例波特率为9600,指1s内传输 9600位,则传输一位需要1/9600=104.17us)4.电平标准
• 电平标准是数据 1 和数据 0 的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种: • • TTL电平(transistor transistor logic ): +5V 表示 1 , 0V 表示 0 • RS232 电平: -3~-15V 表示 1 , +3~+15V 表示 0 • RS485 电平:两线压差 +2~+6V 表示 1 , -2~-6V 表示 0 (差分信号) 二、功能实现目标:
①单片机与电脑通信(单片机每隔一段时间通过串口向电脑发送数据)
②电脑与单片机通信(电脑通过串口向单片机发送数据控制灯的亮灭)
1.硬件 电路①51单片机 USB-TTL模块
注意:模块的TXD与单片机的RXD(P30)相连 ,模块的 RXD与的TXD(P31)相连
RXD、TXD是Receive Data ,Transmit Data 的意思。 RXD 为接收数据的引脚,TXD 为发送数据的引脚。
②51单片机的UART
• STC89C52 有 1 个 UART • STC89C52 的 UART 有四种工作模式:模式0:同步移位寄存器
模式1:8位UART,波特率可变(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可变
2.串口时序及模式1.串口时序
8位时序图
9位时序图
2.串口模式
•SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写 *** 作时,写入的是发送寄存器,读 *** 作时,读出的是接收寄存器
3.代码①单片机与电脑通信(单片机每隔一段时间通过串口向电脑发送数据)
代码如下:
#include
// 延时函数1s
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//串口初始化
void Uart_Init(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
}
void main()
{
unsigned char a;
Uart_Init();
while(1)
{
SBUF=a;//把a的值赋给缓存
Delay1000ms();//延时1s
a++;//自增
}
}
电脑端接受缓存区如下图
数据为16进制,从00一直加到FF ,加到FF后溢出又变为00
②电脑与单片机通信(电脑通过串口向单片机发送数据控制灯的亮灭)
代码如下:
#include
void UART_Init(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
EA=1; //开启总中断
ES=1; //开启串口中断
}
void main()
{
UART_Init();
while(1)
{
}
}
void UART_Rountine(void) interrupt 4 //串口中断函数
{
if(RI==1)
{
P2=SBUF;
RI=0;
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了串口通信的使用,而许多模块都采用串口通信,了解了串口通信之后,就能使用更多模块实现更多功能。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)