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

📄 tx1.c

📁 程序原码主要应用于工业现场来实现485通讯
💻 C
字号:
#include <reg52.h>
#define uchar unsigned char
#define SLAVE 0x02
#define BN 16
uchar idata rebuf[16];
uchar idata trbuf[16];	
bit tready;
bit rready;
void main(void)
{
	TMOD=0x20;
	TL1=0xfd;
	TH1=0xfd;
	PCON=0x00;
	TR1=1;
	SCON=0xf0;
	ES=1;EA=1;
	while(1)
	{
	 tready=1;rready=1;
	}
	
	
}
void ssio(void)interrupt 4 using 1
{
  void str();
  void sre();
  uchar a;
  RI=0;
  ES=0;

  if(SBUF!=SLAVE)
  {
   ES=1;
   goto reti;
  }
  SM2=0;                                  //取消监听状态
  SBUF=SLAVE;                             //从机地址发回
  while(TI!=1);TI=0;
  while(RI!=1);RI=0;
  if(RB8==1){SM2=1;ES=1;goto reti;}		 //是复位信号,恢复监听
  a=SBUF;								 //接受命令
   if(a==0x01)							 //从机接收主机的数据
   {	
    if(rready==1)SBUF=0X01;			 //接收准备好发状态
    else SBUF=0X00;
    while(TI!=1);TI=0;
    while(RI!=1);RI=0;
    if(RB8==1){SM2=1;ES=1;goto reti;}
	sre();	                             //接收数据块
   }
  else
  {
   if(a==0x02)			                 //从机向主机发数据
   {									 //发送准备好发状态
   	if(tready==1)SBUF=0X02;
	else SBUF=0X00;
	while(TI!=1);TI=0;
    while(RI!=1);RI=0;
	if(RB8==1)
	{SM2=1;ES=1;goto reti;}
	str();								  //发送数据块
   }
   else
   {
   	 SBUF=0X80;							  //命令非法,发状态
	 while(TI!=1);
	 TI=0;
	 SM2=1;ES=1;						  //恢复监听
   }
  }
   reti:;
 }
 void str(void)							  //发送数据块
 {
  uchar p,i;
  tready=0;
  do
  {p=0;									  //清校验和
   for(i=0;i<BN;i++)
   {
   	SBUF=trbuf[i];						  //发送一数据
	p+=trbuf[i];
	while(TI!=1);
	TI=0;
   }
   SBUF=p;								  //发送校验和
   while(TI==0);TI=0;
   while(RI==0);RI=0;
  }
   while(SBUF!=0);						  //主机接收不正确,重新发送
   SM2=1;
   ES=1;
 }
 void sre(void)							  //接收数据块
 {
  uchar p,i;
  rready=0;
  while(1)
  {
   p=0;									  //清校验和
   for(i=0;i<BN;i++)
   {
   	while(RI!=1);RI=0;
	rebuf[i]=SBUF;						  //接收一数据
	p+=rebuf[i];
   }
   while(RI!=1);RI=0;
    if(SBUF==p)
	{
	 SBUF=0x00;break;					  //校验和相同发“00”
	}
  	else
	{
	 SBUF=0xff;							  //校验和不同发“0FF”,重新接收
	 while(TI==0);TI=0;
	}
  }
  SM2=1;
  ES=1;
 } 

⌨️ 快捷键说明

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