从上位机(PC)发送数据给单片机,并显示到单片机的LED上。
实验一:查询法
程序:
/如果串口右数据发送就点亮LED
#include<reg52.h>
//主函数
void main()
{
TMOD=0x20; //设置定时器1为工作方式2
TH1=0xfd; //波特率设置
TL1=0xfd;
// TR1=1; //启动定时器1
REN=1; //允许串口接收
SM0=0; //串行工作方式1
SM1=1;
// EA=1; //开定时器中断
// ES=1; //开总中断
while(1)
{
if(RI==1) //接收中断标志位,如果有中断到来执行下面语句
{
RI=0;
P1=SBUF; //接收的数句存在SBUF中?
}
}
}
实验二:中断法
//如果串口右数据发送就点亮LED
#include<reg52.h>
//主函数
void main()
{
TMOD=0x20; //设置定时器1为工作方式2
TH1=0xfd; //波特率设置
TL1=0xfd;
TR1=1; //启动定时器1
REN=1; //允许串口接收
SM0=0; //串行工作方式1
SM1=1;
EA=1; //开定时器中断
ES=1; //开总中断,串口中断打开
while(1)
{
/*if(RI==1) //接收中断标志位,如果有中断到来执行下面语句
{
RI=0;
P1=SBUF; //接收的数据存在SBUF中
}*/
}
}
//中断函数
void ser() interrupt 4
{
RI=0; //中断到来后,RI必须清0
P1=SBUF; //接收的数据存在SBUF中
}
从上位机(PC)发送数据给单片机,并显示到单片机的LED上,然后单片机再发送给PC机。
程序:
//如果串口右数据发送就点亮LED
#include<reg52.h>
unsigned char flag;
unsigned char temp;
//主函数
void main()
{
TMOD=0x20; //设置定时器1为工作方式2
TH1=0xfd; //波特率设置
TL1=0xfd;
TR1=1; //启动定时器1
REN=1; //允许串口接收
SM0=0; //串行工作方式1
SM1=1;
EA=1; //开定时器中断
ES=1; //开总中断,串口中断打开
while(1)
{
/*if(RI==1) //接收中断标志位,如果有中断到来执行下面语句
{
RI=0;
P1=SBUF; //接收的数据存在SBUF中
}*/
if(flag==1) //flag=1说明收到数据
{
ES=0; //关串口中断,在发送时关串口中断
flag=0;
SBUF=temp;
while(!TI); //检测数据是否发送完
TI=0;
ES=1;
}
}
}
//中断函数
void ser() interrupt 4
{
RI=0; //中断到来后,RI必须清0
P1=SBUF; //接收的数据存在SBUF中
temp=SBUF;
flag=1;
}