51单片机计算机向单片机发送字符串完整代码
时间: 2023-06-27 15:02:17 浏览: 107
下面是一个基于51单片机的计算机向单片机发送字符串的完整代码,供您参考:
```c
#include <reg52.h>
#define FOSC 11059200L // MCU主频
#define BAUD 9600 // 串口波特率
#define TIMER_1MS (65536-FOSC/12/1000) // 定时器初值
sbit LED = P1^0; // 控制LED
sbit P_SW = P3^0; // 控制串口工作模式
void InitUart(); // 串口初始化函数
void SendData(char dat); // 串口发送数据函数
void SendString(char *s); // 串口发送字符串函数
void main()
{
InitUart(); // 初始化串口
TMOD = 0x10; // 设置定时器1为模式1
TH1 = TL1 = TIMER_1MS; // 设置定时器初值
TR1 = 1; // 启动定时器1
while(1)
{
LED = ~LED; // 翻转LED状态
SendString("Hello, MCU!"); // 发送字符串
delay(1000); // 延时1s
}
}
void InitUart()
{
SCON = 0x50; // 设置串口为模式1
TMOD &= 0x0F; // 清除定时器1的高4位
TMOD |= 0x20; // 设置定时器1为模式2
TH1 = TL1 = -(FOSC/12/32/BAUD); // 设置波特率
ES = 1; // 允许串口中断
PS = 1; // 设置串口中断为高优先级
EA = 1; // 允许总中断
P_SW = 0; // 将串口工作模式设置为1
}
void SendData(char dat)
{
SBUF = dat; // 将要发送的数据存入SBUF
while(!TI); // 等待发送完成
TI = 0; // 清除发送完成标志
}
void SendString(char *s)
{
while(*s) // 逐个发送字符串中的字符直到遇到结束符'\0'
{
SendData(*s++);
}
}
void InterruptUart() interrupt 4 using 1
{
if(RI) // 如果收到数据
{
RI = 0; // 清除接收中断标志
}
if(TI) // 如果发送完成
{
TI = 0; // 清除发送中断标志
}
}
```
以上代码通过串口向单片机发送字符串,并在单片机上控制LED翻转,以便观察串口通信是否正常。需要注意的是,代码中使用了定时器来控制串口波特率,同时也使用了中断来处理串口的收发,这样可以在单片机忙于其他任务时也能完成串口收发。
阅读全文