C51入门6,串口通信实验
扫描二维码
随时随地手机看文章
从上位机(PC)发送数据给单片机,并显示到单片机的LED上。
实验一:查询法
程序:
/如果串口右数据发送就点亮LED
#include
//主函数
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
//主函数
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
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;
}