📄 mmm.c
字号:
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,lensend=0 ; //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] =1 ;
SerBuffer[3]= Numptr*2;
break;
case 0x81: //green LED
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;
lensend= Numptr*2;
SerBuffer[1] =0;
SerBuffer[2] =lensend+4;
memcpy(&SerBuffer[3], RemainRec,lensend);
SerBuffer[3+lensend]=0;//wasi
SerBuffer[4+lensend]=0;//wasi
rx_bcc.intX=cal_crc3964(&SerBuffer[3],2+lensend);//16);
SerBuffer[5+lensend]=rx_bcc.chrX[0];
SerBuffer[6+lensend]=rx_bcc.chrX[1];
break;
case 0x85: //
for(i=0;i<8;i++)
Call_id[i]= SerBuffer[i*2+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;
};
}
/********************************************************************8*/
void Check_call(void)
{
unsigned char idata i,tt;
for(i=0;i<8;i++)
{
if((Call_id[i]>0)&&(Call_id[i]<201))
{
tt=Find(Call_id[i],1);
if(!tt)Find(Call_id[i],1);
}
}
}
//*********************************************************************8
void addNum(unsigned int num)
{
inttem.intX= num;
RemainRec[Numptr][0]=inttem.chrX[0];
RemainRec[Numptr][1]=inttem.chrX[1];
Numptr++;
}
//******************************************************
bit CheckNum(unsigned int num)
{
unsigned char i;
for(i=0;i<Numptr;i++)
{
inttem.chrX[0]=RemainRec[i][0];
inttem.chrX[1]=RemainRec[i][1];
if((inttem.intX&0x3fff)==num)
return 1;
}
return 0;
}
//******************************************************
void SetWingNum(unsigned int num)
{
unsigned char i;
for(i=0;i<Numptr;i++)
{
inttem.chrX[0]=RemainRec[i][0];
inttem.chrX[1]=RemainRec[i][1];
if((inttem.intX&0x3fff)==num)
{
inttem.intX=inttem.intX|0x4000 ;
RemainRec[i][0]=inttem.chrX[0];
RemainRec[i][1]=inttem.chrX[1];
}
}
}
//******************************************************
void ClrWingNum(unsigned int num)
{
unsigned char i;
for(i=0;i<Numptr;i++)
{
inttem.chrX[0]=RemainRec[i][0];
inttem.chrX[1]=RemainRec[i][1];
if((inttem.intX&0x3fff)==num)
{
inttem.intX= num;
RemainRec[i][0]=inttem.chrX[0];
RemainRec[i][1]=inttem.chrX[1];
}
}
}
//******************************************************************
void DelNum(unsigned int num)
{
unsigned char i,j;
for(i=0;i<Numptr;i++)
{
inttem.chrX[0]=RemainRec[i][0];
inttem.chrX[1]=RemainRec[i][1];
if((inttem.intX&0x3fff)==num)
break;
}
if(i<Numptr)
{
for(j=i;j<Numptr;j++)
{
RemainRec[j][0]= RemainRec[j+1][0];
RemainRec[j][1]= RemainRec[j+1][1];
}
Numptr--;
}
}
/***************
void test(void)
{
unsigned char x;
while(1)
{
addNum(x);
x++;
if( CheckNum(8))
{
DelNum(7);
}
}
}*/
//**************************************************************************
void main(void)
{
unsigned int idata xx=0;//,bcc;
unsigned char idata i=0,ttt;
unsigned long idata yyy=0;
unsigned int numtem=0;
//unsigned char xdata ccc[6]={0x00,0x18,0x00,0x1e,0x00,0x00};
// numtem=cal_crc3964(ccc,6);//16);
TX_EN=0;
rest_delay=0;
En485 = RECV;
//Delay100ms(1);
TX_EN=1;
init_com();
InitREG();
UartInit();
Test_led=!Test_led;
Delay100ms(1);
Comm_Off();
PWR_UP=1;
Test_led=!Test_led;
EA=1;
Numptr=0;
Init_X25045(0x00);
for(i=0;i++;i<200)//clr
{
RemainRec[i][0]=0; RemainRec[i][1]=0;
}
if((ByteRead_Check(20)==0x00)||(ByteRead_Check(20)==0xff))ADDR=0XD2;
else
ADDR=ByteRead_Check(20);
// ADDR=0xd2;
if(ADDR%2)
{
CS=0;
}
else
{
CS=1;
}
CS=1;
Watch_dog();
for(i=0;i<8;i++)Call_id[i]=0;
while(1)
{
/*init_com();
InitREG();
UartInit(); */
TX_EN=1;
Watch_dog();
if(rest_delay>750)while(1);
if (Cmdok) //通讯
{
rest_delay=0;
Watch_dog();
Cmdok = FALSE;
Waring=0; //报警清掉
RecvReady = FALSE;
SendReady = FALSE;
cmd_execution();
SendReady = TRUE ; //发起始字
TI = 1;
}
for(i=1;i<201;i++)
{
if((i==1)||(i==150)||(i==50)||(i==100))Check_call();
if(rest_delay>750)while(1);
Watch_dog();
if (Cmdok) //通讯
{
Waring=0;
rest_delay=0;
Cmdok = FALSE;
RecvReady = FALSE;
SendReady = FALSE;
cmd_execution();
SendReady = TRUE ; //发起始字
TI = 1;
Test_led=!Test_led;
}
Watch_dog();
ttt=Find(i,0);
if(ttt)
{
Card_id[i]=3;//循环监测的次数
Test_led=!Test_led;//在区域
if(!CheckNum(i))
{
numtem=i;
if(ttt==2)
{
numtem=numtem|0x4000;
/* for(j=0;j<10;j++)
{ Delay1ms(50);
Test_led=!Test_led;
}*/
}
addNum(numtem); //加入
}
else
{
if(ttt==2)
{
numtem=i;
SetWingNum(numtem);
/*for(j=0;j<10;j++)
{ Delay1ms(50);
Test_led=!Test_led;
}*/
}
else
{
if(!Waring) //已经取走
{
numtem=i;
ClrWingNum(numtem);
}
}
}
}
else //不再区域
{
if(CheckNum(i)) //如果原来就存在
{
ttt=Find(i,0); //再次查找
if(ttt==0)
{
Card_id[i]--;
if( Card_id[i]==0)
{
DelNum(i);
}
}
}
else //原来就不在
{
if(!Waring) //没有报警信息
{
DelNum(i);
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -