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

📄 11.2.c

📁 串口读写
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define BN 16						//传送一次的字节数

uchar master(uchar addrs,uchar comnd);
uchar SLAVE=0x00;					//从机地址
uchar idata rdata[16];
uchar idata tdata[16]={"abcdefghijklmnop"};
void main(void)
{
  uchar i;
  for(i=0;i<10;i++)
  {
  TMOD=0x20;						//定时器T1定义为模式2
  TL1=0xfd;TH1=0xfd;				//置初值
  PCON=0x00;
  TR1=1;
  SCON=0xD0;					//设置串行口控制字,方式3,允许接收
  master(SLAVE,0x01);
  master(SLAVE,0x02);
  SLAVE++;
  }
}

void error(void)
{
  SBUF=0xFF;					//发给从机数据出错标志
  while(TI!=1);						//等待发送完
  TI=0;
}

uchar master(uchar addrs,uchar comnd)
{ uchar a,i,p;
while(1)
{
  SBUF=SLAVE;					//发呼叫地址 
  while(TI!=1);						//等待发送完
  TI=0;
  while(RI!=1);						//等待从机应答
  RI=0;
  if(SBUF!=addrs)
  error();							//若地址出错,发出错标志,从机复位
  else
  {
   TB8=0;						//清地址标志位,准备接收数据
   SBUF=comnd;					//发命令帧
   while(TI!=1);TI=0;
   while(RI!=1);RI=0;
   a=SBUF;						//接收从机的返回地址帧
   if((a&0x80)==0x80){TB8=1;error();}	//若主机命令非法,发复位信号给从机
   else
   {
	 if(comnd==0x01)				//主机发送的命令是请求从机接收数据
       {
         if((a&0x01)==0x01)			//从机准备接收就绪
         {
              do{
				p=0;					//清校验和
				for(i=0;i<BN;i++)
				 {
				  SBUF=tdata[i];			//发送数据
				  p=p+tdata;				//计算校验和
				  while(TI!=1);TI=0;
				 }
				SBUF=p;				//发送校验和给从机
				while(TI!=1);TI=0;
				while(RI!=1);RI=0;
               }while(SBUF!=0);			//从机接收不正确,主机重新发送
              TB8=1;				//重置地址标志位
              return(0);
          }
      }
	 else{
      if(comnd==0x02)			//主机发送的是接收命令,从机发送数据
        {if((a&0x02)==0x02)		   	//从机准备发送就绪
         {while(1)
           {p=0;
            for(i=0;i<BN;i++)
            {
             while(RI!=1);RI=0;
             rdata[i]=SBUF;		//主机接收数据
             p+=rdata[i];
            }
            while(RI==0);RI=0;
            if(SBUF==p)
			{
			 SBUF=0x00;		//校验和相同,发0x00给从机
			 while(TI!=1);TI=0;
			}
			else
			{
             SBUF=0x0F;			//校验和不同,发0x0F给从机
			 while(TI!=1);TI=0;
			}
          }
	      TB8=1;				//重置地址标志位
       	  return(0);
       }
      }
     }
}
}
}
}

⌨️ 快捷键说明

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