原创 用两个8952作的异步串行双工通信程序

2008-5-11 11:59 1565 0 分类: MCU/ 嵌入式

/*---用两个89S52作的异步串行双工通信之发送程序--*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code c[10]={0xc0,0xf9,0xa4,0xb0,0x99,
                  0x92,0x82,0xf8,0x80,0x90};
void serial_inti();                       //声明
void delay();
main()
{
 char i;
 serial_inti();                          //初始化
do
 {
  for(i=0;i<4;i++)                       //P0显示0-4
    {
     SBUF="c";
     P0=c;
     delay();
    }
  
 }while(1);


}


void serial_inti()                       //初始化 
{
 TMOD=0x20;                              //用定时器T1,工作方式2
 TH1=0xfa;                               //频率为11.0592MHz波特率为4800bit/s
 TL1=0xfa;


 PCON=0x00;                              //SMOD=0
 SCON=0xd8;                              //串口 方式3,11bit异步收发方式,允许接受
 RI=0;
 TI=0;


 TR1=1;                                  //t1运行
 EA=1;                                   //开总中断
 ES=1;                                   //开串行口中断
 ET1=0;                      


}



void serial_inter() interrupt 4 using 2    //串行中断
{
 if(RI)                                    //是否接受完
  {
    RI="0";                                  //接受完清0                                    
    P2=SBUF;                               //P2显示反馈的数据
    delay();
   
   }
 if(TI)                                    //是否发送完
  {
   TI="0";                                   //发送完清0
  }
}



void delay()                         //延时
{
 uchar i,j,k;
  for(i=0;i<20;i++)
    {
      for(j=0;j<200;j++)
        {
          for(k=0;k<250;k++)
            {
              ;
            }
        }
    }
}


 


/*---用两个8952作的异步串行通信之接受程序---*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void serial_inti();                    //声明
void delay();
uchar code c[10]={0xc0,0xf9,0xa4,0xb0,0x99,
                  0x92,0x82,0xf8,0x80,0x90};
main()
{
 serial_inti();                       
 
do
 {
  ;
  
 }while(1);


}


void serial_inti()                     //初始化
{
 TMOD=0x20;                            //用定时器T1,工作方式2
 TH1=0xfa;
 TL1=0xfa;                             //频率为11.0592MHz波特率为4800bit/s


 PCON=0x00;                            //SMOD=0
 SCON=0xd8;                            //串口 方式3,11bit异步收发方式,允许接受
 RI=0;
 TI=0;


 TR1=1;                                //t1运行
 EA=1;                                 //开总中断
 ES=1;                                 //开串行口中断
 ET1=0;


}
char i;
void serial_inter() interrupt 4 using 2 
{
 if(RI)                                //判断是否接受完
  {
    i++;                              
    if(i==8)
     i="4";
    RI="0";                              //接受完后清0
    ACC="SBUF";
    P1=ACC;
    SBUF="c";                         //反馈一个数据
  
    delay();
   
  }
 if(TI)                                //是否发送完
  {
   TI="0";                               //发送完清0
  }
}



void delay()                           //延时
{
 uchar i,j,k;
  for(i=0;i<20;i++)
    {
      for(j=0;j<200;j++)
        {
          for(k=0;k<250;k++)
            {
              ;
            }
        }
    }
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /1 下一条