#include <reg52.h>
#include<intrins.h> //位移头文件_crol_
#define uchar unsigned char
unsigned char flag,i;
char w='0';
char wu[15];
int k=0;
int q=0;
void receive() interrupt 4 //串口中断服务程序
{
if(RI==1){
RI=0; //重新清0等待接收
w=SBUF;//接收电脑传输过来的数据
wu[k]=w; //将W的值赋给wu数组
k++;
SBUF=w;//单片机把接收到的数据返回给电脑
TI=0; //清除发送中断标志位
}
}
void init(){
SCON=0x50;//串口控制寄存器,等价于SM0=0,SM1=1,SM2=0,串口方式一通信
TMOD=0X20; //设置定时器1为模式2,做为波特率发生器,8位初值自动重装的8位定时器,定时到TH1的值自动装到TL1
TH1=0xfd;//设置波特率为9600
TL1=0xfd;
REN=1;//允许串口接收中断?
EA=1;//开全局中断
ES=1;//串口中断允许
TR1=1; //启动波特率发生器
}
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
init();
P1=0xfe;//LED:1111 1110
while(1)
{
if(w=='\n') //当发送了新行时,
{
k=0; //数组里的元素清零
for(q=0;q<20;q++)
{
wu[q]=0;
}
q=0;
}
//当串口调试助手发送sujunjun时执行10ms流水灯功能
if(wu[0]=='s'&&wu[1]=='u'&&wu[2]=='j'&&wu[7]=='n'&&wu[8]=='\r')
{
k=0; //数组里的元素清零
while(1)
{
delay(10);
P1=_crol_(P1,1);//LED灯左移一位
if(wu[0]=='q') //如果收到q则跳出sujunjun的流水灯
break;
}
}
//当串口调试助手发送suweiwei时执行50ms流水灯功能
if(wu[0]=='s'&&wu[1]=='u'&&wu[2]=='w'&&wu[7]=='i'&&wu[8]=='\r')
{
k=0; //数组里的元素清零
while(1)
{
delay(50);
P1=_crol_(P1,1);//LED灯左移一位
if(wu[0]=='q')//如果收到q则跳出suweiwei的流水灯
break;
}
}
}
}
51单片机基础——串口通信字符串控制流水灯
最新推荐文章于 2024-05-12 21:23:57 发布