C51入门6,串口通信实验

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

 

posted on 2013-03-16 16:53  AI_JJ  阅读(335)  评论(0)    收藏  举报

导航