你好,欢迎访问达普芯片交易网!|  电话:010-82614113

C51入门6,串口通信实验

发布时间:2018-09-28

从上位机(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;
}

在线人工客服

点击这里给我发消息

点击这里给我发消息

点击这里给我发消息

010-82614113

客服在线时间周一至周五
9:00-17:30