c51串口字符串点灯命令
时间: 2023-08-30 12:12:30 浏览: 108
可以使用下列代码实现C51串口接收字符串命令并控制LED灯点亮:
```
#include <reg52.h>
#include <stdio.h>
#include <string.h>
sbit LED = P1^0; // 控制LED灯的IO口
void main()
{
TMOD = 0x20; // 设置计数器1为模式2
TH1 = 0xFD; // 设置波特率为9600bps
SCON = 0x50; // 设置串口为模式1,允许接收
TR1 = 1; // 启动计数器1
EA = 1; // 开启总中断
ES = 1; // 开启串口中断
while(1);
}
void UART() interrupt 4
{
static char buf[20]; // 用于存储接收到的字符串
static int i = 0; // 记录接收到的字符数
char c; // 存储当前接收到的字符
if(RI == 1)
{
RI = 0; // 清除接收标志位
c = SBUF; // 获取接收到的字符
if(c == '\r') // 当接收到回车符时,执行命令
{
buf[i] = '\0'; // 将字符串结束符置为'\0'
i = 0; // 重置字符计数器
if(strcmp(buf, "led on") == 0) // 如果接收到的命令为"led on"
{
LED = 1; // 控制LED灯点亮
}
else if(strcmp(buf, "led off") == 0) // 如果接收到的命令为"led off"
{
LED = 0; // 控制LED灯熄灭
}
}
else if(i < 20) // 如果接收到的字符不是回车符且字符数小于20
{
buf[i++] = c; // 将接收到的字符存储到buf中
}
}
}
```
在上述代码中,我们使用串口中断来实现对串口的接收。当接收到回车符时,判断接收到的字符串是否为"led on"或"led off",如果是,则控制LED灯点亮或熄灭。如果接收到的字符不是回车符,则将其存储到buf中,直到接收到回车符为止。
阅读全文