文章目录
前言
为了增强了单片机系统的硬件实力,单片机需要与各式各样的模块(WiFi模块,蓝牙模块等)互相通信,本文介绍了串口通信以及通过相关代码实现单片机与电脑的互相通信。
一、串口通信是什么?
1.串口:
•串行接口简称串口,也称串行通信接口或串行通讯接口,是采用串行通信方式的扩展接口。
2.常见通信接口比较:
3.术语解释:
4.电平标准
二、功能实现
目标:
①单片机与电脑通信(单片机每隔一段时间通过串口向电脑发送数据)
②电脑与单片机通信(电脑通过串口向单片机发送数据控制灯的亮灭)
1.硬件 电路
①51单片机 USB-TTL模块
注意:模块的TXD与单片机的RXD(P30)相连 ,模块的 RXD与的TXD(P31)相连
RXD、TXD是Receive Data ,Transmit Data 的意思。 RXD 为接收数据的引脚,TXD 为发送数据的引脚。
②51单片机的UART
模式0:同步移位寄存器
模式1:8位UART,波特率可变(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可变
2.串口时序及模式
1.串口时序
8位时序图
9位时序图
2.串口模式
•SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器
3.代码
①单片机与电脑通信(单片机每隔一段时间通过串口向电脑发送数据)
代码如下:
#include <REGX52.H>
// 延时函数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 <REGX52.H>
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;
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了串口通信的使用,而许多模块都采用串口通信,了解了串口通信之后,就能使用更多模块实现更多功能。