基于串口控制的流水灯控制51单片机代码
时间: 2023-05-27 16:08:00 浏览: 171
以下是基于串口控制的流水灯控制51单片机代码的示例:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P2^0; // 流水灯连接的引脚
void delay(uint xms) // 延时函数
{
uint i, j;
for(i = xms; i > 0; i--)
for(j = 112; j > 0; j--);
}
void main()
{
uchar ch;
SCON = 0x50; // 串口工作方式1:8位数据,无校验,1位停止位
TMOD = 0x20; // 定时器1工作方式2:8位自动重装载计数器
TH1 = 0xfd; // 波特率9600
TL1 = 0xfd;
TR1 = 1; // 启动定时器1
ES = 1; // 开启串口中断
EA = 1; // 开启总中断
while(1)
{
LED = 0; // 流水灯熄灭
delay(500); // 延时500ms
LED = 1; // 流水灯点亮
delay(500); // 延时500ms
}
}
void Uart() interrupt 4 // 串口中断函数
{
uchar ch;
if(RI) // 接收到数据
{
RI = 0; // 清除接收中断标志位
ch = SBUF; // 读取接收到的数据
if(ch == '0') // 收到字符'0',流水灯熄灭
LED = 0;
else if(ch == '1') // 收到字符'1',流水灯点亮
LED = 1;
}
}
在上述代码中,首先定义了一个流水灯连接的引脚,然后实现了一个延时函数。在 main 函数中,设置了串口工作方式、定时器工作方式和波特率,并开启了串口中断和总中断。然后进入一个无限循环中,不停地让流水灯点亮和熄灭。最后,定义了一个串口中断函数,在接收到数据时根据数据的值控制流水灯的状态。