上位机通过串行口发送信息到单片机,控制LED。
/*************************
项目名称:项目五串行通信系统
任务名称:任务5-2串行口系统应用
任务描述:上位机通过串行口发送信息到单片机,控制LED
*************************/
#include<reg51.h>
int dat;//存放接收到的控制信息
/****************串行发送*****************/
void receive()
{
while(RI==0);//等待接收1帧数据
dat=SBUF;//读取字节数据(上位机发来的控制信息)
RI=0;//允许下一次发送
}
/******************串行通信初始化***************/
void init_uart()//init初始化,uart异步串行口
{
SCON=0X50;//串行口工作方式1:9位1帧,允许接收
TMOD=0X20;//T1定时器工作方式2
PCON=0X00;//波特率不倍增
TH1=0xfd;//波特率节奏器,数三下产生波特率,9600bps,fosc=11.0592MHz
TL1=0xfd;
RI=0;//清除接收标志
TR1=1;//启动定时器T1,开始数数,产生波特率
}
/*******************主函数****************/
void main()
{
init_uart();
while(1)
{
receive();//接收上位机控制信息
if(dat=='o')
P1=0x00;//开灯
if(dat=='n')
P1=0xff;//关灯
}
}
通过键盘输入o n控制灯亮灭。
若想看见自己的输入可以:在virtual terminal中左键选择Echo Typed Character
接收数据
/*************************
项目名称:项目五串行通信系统
任务名称:任务5-2串行口系统应用
任务描述:上位机通过串行口发送信息到单片机,控制LED
*************************/
#include<reg51.h>
int dat;//存放接收到的控制信息
/****************串行发送*****************/
void receive()
{
while(RI==0);//等待接收1帧数据
dat=SBUF;//读取字节数据(上位机发来的控制信息)
RI=0;//允许下一次发送
}
/******************串行通信初始化***************/
void init_uart()//init初始化,uart异步串行口
{
SCON=0X50;//串行口工作方式1:9位1帧,允许接收
TMOD=0X20;//T1定时器工作方式2
PCON=0X00;//波特率不倍增
TH1=0xfd;//波特率节奏器,数三下产生波特率,9600bps,fosc=11.0592MHz
TL1=0xfd;
RI=0;//清除接收标志
TR1=1;//启动定时器T1,开始数数,产生波特率
}
/*******************主函数****************/
void main()
{
init_uart();
while(1)
{
receive();//接收上位机控制信息
P1=dat;//用接收的数据控制led 0x00 0xff
}
}