目录
前言:
单片机串口通信是单片机和计算机之间进行数据传输的一种常见方式。在实际应用中,我们通常会使用串口通信来完成一些实时数据采集、控制等功能。在串口通信中,收发字符串是一种常见的操作,本文将介绍如何用51单片机进行串口通信收发字符串。
1.硬件连接
串口数据收发线要交叉连接,计算机的 TXD 要对应单片机的 RXD,计算机的 RXD 要对应单片机的 TXD,并且共 GND,以确保信号传输的稳定性。
2.代码编写
接下来,需要编写代码来实现串口通信收发字符串的功能。代码的核心部分是通过串口发送和接收数据来实现的。具体实现步骤如下:
1.设置串口参数
在进行串口通信之前,需要设置串口的波特率、数据位、停止位等参数,以保证数据传输的正确性。
2.发送字符串
使用串口发送字符串的方式可以调用UART_SendString函数,该函数使用循环调用UART_SendByte函数来实现字符串发送。在调用该函数前,需要将要发送的字符串存储在一个字符数组中。
3.接收字符串
(1).使用串口接收字符串的方式可以编写串口接收中断函数,通过反复的触发中断条件,反复调用中断函数,实现单片机接收字符串。
(2).使用串口接收字符串的方式可以调用UART_ReceiveString函数,该函数使用循环调用UART_ReceiveByte函数来实现字符串接收。在调用该函数前,需要定义一个用于存储接收数据的字符数组。
UART_SendString函数
void UART_SendByte(unsigned char byte) //串口发送单个字节函数
{
SBUF = byte;
while(!TI); //等待发送完成
TI = 0; //清除发送完成标志位
}
void UART_SendString(unsigned char *str) //串口发送字符串函数
{
while(*str!='\0') //判断字符串截止位则退出
{
UART_SendByte(*str);
str++;
}
}
UART_ReceiveString函数
第一种:
void UART_Routine(void) interrupt 4 //串口接收中断函数
{
if(RI==1)
{
RI=0;
P2=SBUF; //判断串口是否接收成功
UART_SendByte(SBUF);
}
}
第二种:
unsigned char UART_ReceiveByte() //串口接收单个字节函数
{
while(!RI); //等待接收完成
RI = 0; //清除接收完成标志位
return SBUF; //返回单个字节
}
unsigned char UART_ReceiveString() //串口接收字符串函数
{ unsigned char value[50];
unsigned char i = 0;
while((value[i]=UART_ReceiveByte;)!='\r') //接收到回车符则退出
{
i++;
}
return value[50]; //返回字符串
}
下面是基于AT89C52的串口收发字符串示例代码:
#include <REGX52.H>
#include <intrins.H>
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
ES=1;
EA=1;
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UART_SendByte(unsigned char byte) //串口发送单个字节函数
{
SBUF = byte;
while(!TI); //等待发送完成
TI = 0; //清除发送完成标志位
}
void UART_SendString(unsigned char *str) //串口发送字符串函数
{
while(*str!='\0') //判断字符串截止位则退出
{
UART_SendByte(*str);
str++;
}
}
void main()
{
unsigned char array[20]={1,2,3,4,5,6}; //定义一个长度为20的字符数组
UartInit(); //初始化串口
while(1)
{
UART_ReceiveString(array); //接收字符串
Delay1000ms(); //延时1秒
}
}
void UART_Routine(void) interrupt 4 //串口接收中断函数
{
if(RI==1)
{
RI=0;
P2=SBUF; //判断串口是否接收成功
UART_SendByte(SBUF);
}
}
3.实验现象
4.代码测试
完成代码编写后,需要进行测试以确认串口通信收发字符串的正确性。
步骤如下:
1.编译下载程序。使用Keil等开发环境将代码编译生成hex文件,并将其下载到单片机中。
2.打开串口调试助手。使用串口调试助手等工具,设置好串口参数,并打开串口。
3.测试串口通信。在串口调试助手中输入要发送的字符串,并点击发送按钮。如果一切正常,则可以在接收框中看到回显的字符串。
总结
通过本文的介绍,我们了解了如何用51单片机实现串口通信收发字符串。串口通信是单片机应用中比较常见的一种通信方式,在实际应用中需要根据具体需求进行相应的设置和调试。