⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11.1.c

📁 《单片机C语言编程与实例的代码.rar
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define TR 1						//接收、发送区别值,TR=0为发送

uchar idata buf[10];
uchar sum;							//检验和
void init(void)
{TMOD=0x20;						//串行口初始化
 TH1=0xE8;TL1=0xE8;				//设定波特率
 PCON=0x00;
 TR1=1;							//启动T1
 SCON=0x50;						//串行口工作在方式1,并允许接收
}

/*发送程序*/
void send(void)
{uchar i;
 do{
    SBUF=0xAA;					//发送联络信号"AA"
    while(TI==0);					//等待发送结束
    TI=0;
    while(RI==0);					//等待B机回答
    RI=0;
   }while((SBUF^0xBB)!=0);			//B机未准备好,继续联络
do{
   sum=0;							//清检验和
   for(i=0;i<16;i++)
    {SBUF=buf[i];
     sum+=buf[i];					//求校验和
     while(TI==0);
     TI=0;
    }
   SBUF=sum;						//发送校验和
   while(TI==0);TI=0;
   while(RI==0);RI=0;				//等待B机应答
}while(SBUF!=0);					//出错则重发
}

/*接收程序*/
void receive()
{uchar i;
 do{}while(RI==0);RI=0;
 while((SBUF^0xAA)!=0)				//判断A机是否发出请求
    SBUF=0xBB;					//发送应答信号"BB"
    while(TI==0);					//等待发送结束
    TI=0;
    while(1)
    {sum=0;						//清校验和
     for(i=0;i<16;i++)
     {while(RI==0);RI=0;
      buf[i]=SBUF;					//接收一个数据
      sum+=buf[i];					//求校验和
     }
    while(RI==0);RI=0;			//接收A机校验和
    if((SBUF^sum)==0)			//比较检验和
    {SBUF=0x00;break;}			//校验和相同则发"00"
   else
    {SBUF=0xFF;				//出错发"FF",重新接收
     while(TI==0);TI=0;
    }
}
}

/*主程序main()*/
void main(void)
{init();
 if(TR==0) {send();}				//发送
 else{receive();}					//接收
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -