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

📄 13.1.3单片机rs-485接口.txt

📁 MCS-51单片机应用开发实用子程序.zip
💻 TXT
字号:
void sendwframe(void)
{
unsigned char data i;						
b-rightMeterFrame=0;						
RDCTP- command-table[13]=0x43;			
RDCTP-command-table[14]=0xc3;
RDCTP-command-table [15]=0x44;			
RE-DE=1;								
for(i=0;i<17;i++)
{
SBUF= RDCTP-command-table [i]; 			
delay();								
}
RE-DE=0;								
b-timerOver=0;							
countex-10ms=0x00;						
ET0=1;								
TR0=1								
Do								
{
if(b-tirnerOver)							
TR0=0;								
ET0=0;								
b-timerOver=0;							
counter-10ms=0x00;						
RE-DE=1;								
m-meterAddrC=0x00;						
RS485-status=0x00;						
b-rightMeterFrame=0;						
return;
}
}while(b-rightMeterFrame != 1);				
RE-DE=1;								 
}
//以中断方式通过RS-485接口从电表接收数据帧
com-isp(void) interrupt 4 using 1
if(RI)
{
RI=0;								
RS485-data=SBUF;						
if(RS485-status == 0x00)					
if(RS485-data==meter-address-return[m-meterAddrC])
{							
m-metcrAddC=0x00;						
}
else									
{									
m-meterAddrC=0x00;
}
if(m-meterAddrC == 11)
{									
m-meterAddrC=0x00;						
RS485-status=0x01;					
}
else if(RS485-status == 0x01)				
{									
if(RS485-data != 0x68)					
{
RS485-status=0x00;						
m-metcrAddrC=0x00;						
}
else									
{
RS485-status=0x02;						
}
}
else if(RS485-status=0x02)					
{									
m-meterCtrCode=RS485-data;				
RS485-status=0x03;						
}
else if(RS485-status==0x03)				
{									
m-meterDatLen=RS485-data;				
m-meterDataC=0x00;						
RS485-status=0x04;						
}
else if(RS485-status==0x04)				
{									
m-meterDatBuf[m-meterDataC]=RS485-data;	
m-meterDataC++;						
if(m-meterDataC==m-meterDatLen)			
{
m-meterSysCheck=0xD3;					
RS485-status=0x05:						
}
else if(RS485-status==0x05)				
{									
m-meterCheck=RS485-data;				
//准备对接收的数据进行累加和校验
m-meterSysCheck+=0x68;					
m-meterSysCheck+=m-meterCtrCode;			
m-meterSysCheck+=m-meterDatLen;			
if(m-meterDatLen!=0x00)
{									
for(m-meterDataC=0;m-meterDataC<m-meterDatLen;mmeterDataC++)
{
m-meterSysCheck+=m-meterDatBuf[m-meterDataC];
}
if(m-meterCheck!=mLneterSysCheck)			
{
m-meterAddrC=0x00;			
RS485 status=0x00;						
}
else									
{
m-meterEndC=0x00;						
RS485-status=0x06;						
}
}
else if(RS485-status=0x06)					
{									
if(RS485-data!=0x16)						
I
m-meterAddrC=0x00;						
RS485 status=0x00;					
}
else									
{
m-meterEndC++;						
}
if(m-meterEndC=0x02)					
{
b-rightMeterFrame=1;						
RE-DE=1;								
m-meterAddrC=0x00;						
RS485 status=0x00;						
}
}
}
if(T1)
{
TI=0;									
}
}

⌨️ 快捷键说明

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