51单片机向电脑通过串口通信传输数据的代码
时间: 2023-11-11 19:07:02 浏览: 101
51单片机与串口通信代码.docx
以下是基本代码:
```c
#include <reg51.h>
#define FOSC 18432000ul // 时钟频率
#define BAUD 9600ul // 波特率
#define DIV_THX(x) ((char)(256 - (FOSC / (12ul * BAUD * x))))
void init_uart() // 初始化串口
{
// 配置波特率
TMOD |= 0x20; // 采用定时器1作为波特率发生器
TH1 = DIV_THX(1); // 波特率发生器初值
TL1 = DIV_THX(1); // 波特率发生器重装值
TR1 = 1; // 启动波特率发生器
// 配置数据格式
SCON = 0x50; // 工作在模式1(8位数据,可变波率)
ES = 1; // 允许接收中断
EA = 1; // 全局中断使能
}
void send_data(char c) // 发送1个字节
{
SBUF = c;
while(!TI); // 等待发送完成
TI = 0; // 发送完成标志清零
}
void send_string(char *s) // 发送字符串
{
while(*s != '\0')
{
send_data(*s);
s++;
}
}
char receive_data() // 接收1个字节
{
while(!RI); // 等待接收完成
RI = 0; // 接收完成标志清零
return SBUF;
}
void receive_string(char *s) // 接收字符串
{
do
{
*s = receive_data();
s++;
} while(*(s-1) != '\r'); // 输入回车结束
*(s-1) = '\0'; // 字符串结束符
}
void main()
{
init_uart();
while(1)
{
char s[50];
send_string("Input some data: ");
receive_string(s); // 接收字符串
send_string("Received data: ");
send_string(s); // 发送字符串
send_data('\n');
send_data('\r');
}
}
void uart_interrupt() interrupt 4 // 串口中断处理程序
{
if(RI)
{
RI = 0; // 接收完成标志清零
// 收到数据以后的处理
}
if(TI)
{
TI = 0; // 发送完成标志清零
// 发送下一个数据
}
}
```
请注意:这篇文章只是代码的展示,为了编写代码的完整性和清晰性,省略了相关说明和注释。如果您要使用这段代码,请认真阅读详细的说明和注释,避免出现任何的错误和问题。
阅读全文