本实验运用单片机串口发送接收功能,使得PC端可以通过发送数据控制单片机的LED
#include "reg52.h"
#include "intrins.h"
#include "string.h"
#define size 12
sfr AUXR=0x8e;
sbit led1=P3^7;
char mes[size];
void UartInit(void) //9600bps@11.0592MHz
{
AUXR=0x01;
SCON=0x50; //使能REN
TMOD &=0xF0;
TMOD |= 0x20;
TH1=0xfd;
TL1=0xfd;//9600波特率的初值
TR1=1;//启动定时器
EA=1; //开启总中断
ES=1;//开启串口中断
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}void sendbyte(char data_byte)
{
SBUF=data_byte; //发送数据
while(!TI);
TI=0;
}
void sendstring(char *str)
{
while(*str!='\0')
{
sendbyte(*str);
str++;
}
}
void main()
{
UartInit();
led1=1;
while(1)
{
Delay1000ms();
sendstring("hello,world\r\n");
}
}
void UARTHander() interrupt 4
{
static i=0;
if(RI)
{
RI=0;
mes[i]=SBUF;
i++;
if(i==size)
{
i=0;
}
if(strstr(mes,"en"))
{
led1=0;
i=0;
memset(mes,'\0',size);
}
if(strstr(mes,"se"))
{
led1=1;
i=0;//数组内容重新遍历
memset(mes,'\0',size);//清空数组里的值
}
}
}
实验结果
电脑端发送 “open”,LED亮
电脑端发送 "close",LED灭