📄 mmm.c
字号:
}
else
{
DataDleReceived = FALSE; //如果不是结束标记 留下
};
};
if (Index < SERBUFLEN) //将数据写入SerBuffer[]
{
SerBuffer[Index++] = c;
};
RecvState = RECV_DATA_DLE_ETX;
START_T0(T_533_ms);
break;
case RECV_DLE: //Recieve answer from HOST
if ( c == DLE)
{
En485 = SEND;
//Ir_En = SEND;
for (i = 0; i < (3 + SerBuffer[2] +1); i++) //send data
{
SBUF = SerBuffer[i];
while (!TI);
TI = FALSE;
if ( SerBuffer[i] == DLE ) //send DLE two
{
SBUF = DLE;
while (!TI);
TI = FALSE;
};
};
SBUF = DLE; //send END
while (!TI);
TI = FALSE;
SBUF = ETX;
while (!TI);
TI = FALSE;
RecvState = RECV_DLE_OR_NAK ;
START_T0(T_533_ms);
En485 = RECV;
//Ir_En = RECV;
}
else
{
CALL_isr_T0() ;
};
break;
case RECV_DLE_OR_NAK: //Recieve answer from HOST
if ( c == DLE)
{
SendOk = TRUE;
SendReady = FALSE;
RecvReady = TRUE;
RecvState = RECV_STX;
}
else
{
SendOk = FALSE;
SendReady = TRUE;
RecvReady = FALSE;
CALL_isr_T0() ;
};
En485 = RECV;
//Ir_En = RECV;
break;
default:
CALL_isr_T0() ;
break;
};//end of case
} //end of if(RecvReady)
};//end of if(RI)
if ( TI && !RI )
{
TI = 0 ;
if ( SendReady )
{
SendReady = FALSE ;
bcc = SerBuffer[0]; //计算BCC
for ( i = 1 ; i < SerBuffer[2]+3 ; i++ )
{
bcc = bcc ^ SerBuffer[i] ;
};
SerBuffer[SerBuffer[2]+3] = bcc;
En485 = SEND;
//Ir_En = SEND;
SBUF = STX ; //发送起始位}
RecvReady = TRUE ;
RecvState = RECV_DLE ; //准备接收应答
// LED_GREEN = ~LED_GREEN;
while(!TI) ;
TI = FALSE ;
En485 = RECV;
//Ir_En = RECV;
START_T0(T_533_ms) ; //chao shi
} ;
};
}
/*************************原有的函数需改变*************************************
* *
* Function: isr_timer0 *
* *
* Input: - *
* Output: - *
* *
* Description: *
* *
* *
****************************************************************************/
void isr_timer0(void) interrupt 1 using 0
{
//TR0=0;
rest_delay++;
if(com2)
{
if(RXTimerOUT!=0) //此if{}else{} 为新加入的判断超时功能
{
RXTimerOUT--;
}
else
{
RXSTAT=0;
RXNOM=0;
}
}//end ifcom2
if(com1)
{
if ( Timer0Cnt != 0 )
{
--Timer0Cnt;
}
else
{
TR0 = 0 ;
if ((RecvState == RECV_DLE) || (RecvState == RECV_DLE_OR_NAK)) //发送起始字超时
{
ErrorCount++;
if ( ErrorCount <= 1)
{
SendReady = TRUE;
TI = 1;
}
else
{
ErrorCount = 0 ;
SendReady = FALSE;
RecvReady = TRUE;
RecvState = RECV_STX;
En485 = RECV;
//Ir_En = RECV;
}
}
else //接收超时
{
SendReady = FALSE;
RecvReady = TRUE;
RecvState = RECV_STX;
En485 = RECV;
};
};
}
TR0=1;
TH0=0X90;
TL0=0X95;
//TR0=1;
}
//**************************************************************
unsigned char Find(unsigned char addr,bit call)
{
unsigned char data i=0,j;
unsigned int data crc;
TX_EN=1;
Delay1ms(2);
// Test_led=!Test_led;
RXtem[0]=0X55;
RXtem[1]=0XAA;
RXtem[2]=addr;
if(call) //有传呼信息
{
RXtem[3]=0x33;
// PutChar1(0x33);
}
else
{
RXtem[3]=0x44;
// PutChar1(0x44);
}
crc=cal_crc(RXtem, 4);
RXtem[4]=crc>>8;
RXtem[5]=(unsigned char)crc;
for(j=0;j<3;j++)
{
for(i=0;i<6;i++)
{
PutChar1( RXtem[i]);
}
}
TX_EN=0;
Comm_On();
Delay1ms(1);
rxok=0; //add
/*while(!rxok)
{
Delay1ms(1);
i++;
if(i>15)break;
}*/
Delay1ms(22);
Comm_Off();
TX_EN=1;
if(rxok)
{
rxok=0;
if(ring_flg==2)Waring=1;
return(ring_flg);
}
else
{
return 0;// return 0;
}
}
/****************************************************************************
* *
* Function: TransferRecord *
* *
* Input: - uchar 1 *
* Output: - 0 *
* *
* Description: *
****************************************************************************/
TransferRecord(unsigned char Day , unsigned int i)
{
Day=0;
SerBuffer[3] = RemainRec[i][0];//.Flg ;
SerBuffer[4] = RemainRec[i][1];//ParkingRecord[i].CardID.chrX[3] ;
SerBuffer[5] =RemainRec[i][2];//ParkingRecord[i].CardID.chrX[2] ;
SerBuffer[6] =RemainRec[i][3];//ParkingRecord[i].CardID.chrX[1] ;
SerBuffer[7] =RemainRec[i][4];//ParkingRecord[i].CardID.chrX[0] ;
SerBuffer[8] = RemainRec[i][5];// ParkingRecord[i].BeginTime.hour ;
SerBuffer[9] =RemainRec[i][6];// ParkingRecord[i].BeginTime.minute ;
SerBuffer[10]= RemainRec[i][7];// ParkingRecord[i].BeginTime.second ;
SerBuffer[11] =RemainRec[i][8]; // ParkingRecord[i].BeginTime.century ;
SerBuffer[12] =RemainRec[i][9];// ParkingRecord[i].BeginTime.year ;
SerBuffer[13] =RemainRec[i][10];// ParkingRecord[i].BeginTime.month ;
SerBuffer[14] =RemainRec[i][11];// ParkingRecord[i].BeginTime.day ;
SerBuffer[15] =RemainRec[i][12];
SerBuffer[16] =RemainRec[i][13];
SerBuffer[17] =RemainRec[i][14];
SerBuffer[18] =RemainRec[i][15];
//SerBuffer[14] =RemainRec[i][16];
}
//*************************************************************************
void SetPosNum(unsigned char xdata *dat)
{
//ByteWrite_Check (124,dat[0]);
ByteWrite_Check(20,dat[0]);
ADDR=dat[0];
}
/****************************************************************************
* cmd_execution(); *
* Function: *
* *
* Input: *
* Output: - *
* *
* Description: *
****************************************************************************/
void cmd_execution(void)
{ unsigned char len ; //Status ;//, adr ;
//unsigned int e;
//unsigned char idata size , tt[2];
unsigned char i;
//WatchDog();
len = SerBuffer[2] ;
SerBuffer[2] = 0 ;
switch ( SerBuffer[1] )
{
case 0x80: //Write time
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x81: //green LED
if ( SerBuffer[3] == 1) {LED_GREEN = 1;}
else if( SerBuffer[3] == 0) { LED_GREEN = 0;};
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x82: //red RED
if ( SerBuffer[3] == 1) {LED_RED = 1;}
else if( SerBuffer[3] == 0) { LED_RED = 0;};
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x83: //Transfer Record
// Status = TransferRecord(SerBuffer[3],SerBuffer[4]);
// SerBuffer[1] = Status;
recordint.chrX[1]=SerBuffer[4];
recordint.chrX[0]=SerBuffer[5];
TransferRecord(SerBuffer[3],recordint.intX);
SerBuffer[1] =0;
SerBuffer[2] =16;
break;
case 0x85: //Config FeeRate
for(i=0;i<8;i++)
Call_id[i]= SerBuffer[i+4];
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x86: //return ocuppy or vacance
SerBuffer[2] = 0;
break;
case 0x87: //Set Meter Number
//MeterNum.chrX[3] = SerBuffer[3];
// MeterNum.chrX[2] = SerBuffer[4];
// MeterNum.chrX[1] = SerBuffer[5];
// MeterNum.chrX[0] = SerBuffer[6];
SetPosNum(&SerBuffer[3]); //add
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x90:
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x91:
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x92:
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
case 0x93:
SerBuffer[1] = 0;
SerBuffer[2] = 0;
break;
default:
SerBuffer[1] = 250; //command error
SerBuffer[2] = 0;
break;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -