📄 carrierint.c
字号:
/********************************************************************
包含头文件
********************************************************************/
#include "PL3200.H"
#include "CONST.H"
#include "RAM.H"
#include "IO.H"
/********************************************************************
函数名称: void CarrierInt(void) interrupt 7
功 能: 载波接收和发送中断处理
入 口: 无
出 口: ZB_RECE_OK ZB_RECE_OK='Z',接收载波帧成功
其他:未成功接收数据帧
********************************************************************/
void CarrierInt(void) interrupt 7
{
uint8 i ;
uint8 state ;
ssc_adr_bak = SSC_ADR ;
zb_busy_bit = 1 ;
zb_tmr = 100 ;
SSC_ADR = 0x00 ;
state = SSC_DAT ;
if((state&0x01)==1)
{//载波发送
if((zb_send_ptr<(zb_total_len-1))&&(zb_send_ptr<zb_send_buf_len))
{
zb_send_ptr++ ;
SSC_BUF = zb_send_buf[zb_send_ptr] ;
}
}
else
{//载波接收
if(zb_rece_ptr>=zb_rece_buf_len)
{
goto zb_rece_exit ;
}
if((state&0x04)==4)
{//接收帧头
if(zb_rece_step==0)
{
zb_rece_crc = 0 ;
zb_rece_ptr = 0 ;
zb_rece_buf[zb_rece_ptr] = SSC_BUF ;
zb_rece_crc = zb_rece_crc+zb_rece_buf[zb_rece_ptr] ;
zb_rece_len = 2 ;
zb_rece_step = 1 ;
}
else
{
zb_rece_step = 0 ;
SSC_ADR = 0x00 ;
SSC_DAT = 0x00 ;
}
}
else if(zb_rece_step==1)
{//接收后续表号
zb_rece_ptr++ ;
zb_rece_buf[zb_rece_ptr] = SSC_BUF ;
zb_rece_crc = zb_rece_crc+zb_rece_buf[zb_rece_ptr] ;
zb_rece_len-- ;
if(zb_rece_len==0)
{
zb_rece_step = 2 ;
}
}
else if(zb_rece_step==2)
{//接收控制码
zb_rece_ptr++ ;
zb_rece_buf[zb_rece_ptr] = SSC_BUF ;
zb_rece_crc = zb_rece_crc+zb_rece_buf[zb_rece_ptr] ;
zb_rece_step = 3 ;
}
else if(zb_rece_step==3)
{//接收数据长度
zb_rece_ptr++ ;
zb_rece_buf[zb_rece_ptr] = SSC_BUF ;
zb_rece_crc = zb_rece_crc+zb_rece_buf[zb_rece_ptr] ;
if((SSC_BUF=!0)&&(SSC_BUF<=(zb_rece_buf_len-8)))
{
zb_rece_len = SSC_BUF ;
zb_rece_step = 4 ;
}
else
{
zb_rece_step = 0 ;
SSC_ADR = 0x00 ;
SSC_DAT = 0x00 ;
}
}
else if(zb_rece_step==4)
{//接收数据
zb_rece_ptr++ ;
zb_rece_buf[zb_rece_ptr] = SSC_BUF ;
zb_rece_crc = zb_rece_crc+zb_rece_buf[zb_rece_ptr] ;
zb_rece_len-- ;
if(zb_rece_len==0)
{
zb_rece_len = 2 ;
zb_rece_step = 5 ;
}
}
else if(zb_rece_step==5)
{//接收校验码
zb_rece_ptr++ ;
zb_rece_buf[zb_rece_ptr] = SSC_BUF ;
zb_rece_len-- ;
if(zb_rece_len==0)
{
if(((zb_rece_crc%256)==zb_rece_buf[zb_rece_ptr-1])&&((zb_rece_crc/256)==zb_rece_buf[zb_rece_ptr]))
{
for(i=0;i<(zb_rece_buf[4]+7);i++)
{
zb_rece_buf_bak[i] = zb_rece_buf[i] ;
}
zb_rece_step = 0 ;
SSC_ADR = 0x00 ;
SSC_DAT = 0x00 ;
ZB_RECE_OK = 'Z' ;
}
}
}
else
{
zb_rece_step = 0 ;
SSC_ADR = 0x00 ;
SSC_DAT = 0x55 ;
}
}
zb_rece_exit:
SSC_ADR = ssc_adr_bak ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -