📄 rxd.c
字号:
#include "reg58.h"
#define _RXD_C_
#include "rxd.h"
#include "intrins.h"
#include "define.h"
#include "keypad.h"
#include "finger.h"
#include "bus.h"
#include "pccomm.h"
#include "timer.h"
#include "system.h"
#include "373.h"
/////////////////////////////////////////////////////////////////////////////////
//unsigned char UARTDATA uart1buff[MAXUART1LEN];
//unsigned char data uart0buff[2];
unsigned char data rxd0chksum;
bit rxd0flag,rxd0packflag,rxd1flag;
bit keypackflag;
//unsigned short idata rxd1len;
unsigned short data rxd0len,rxd0counter;
unsigned char data rxd0timer;
/////////////////////////////////////////////////////////////////////////////////
void rxd1() interrupt 7 using 1
{
if(RI_1) //receive interrupt
{
RI_1=0;
if(!rxd0packflag)
{
if(!rxd0flag) //if uart0 is receiving data, uart1 do nothing
{
if(!rxd1flag)
{
if(SBUF1==PCPACKAGEHEAD) //receive pc data
{
uart0buff[0]=PCPACKAGEHEAD;
rxd1flag=1;
rxd0counter=1;
rxd0timer=timerh;
}
}
else
{
if(rxd0counter==1)
{
rxd0len=SBUF1+0x100; //+0x100 for fear that rxd0counter can be larger than rxd0len
}
else if(rxd0counter==2)
{
rxd0len&=0xff;
rxd0len+=SBUF1<<8;
rxd0len+=3; //package length is 5 bytes longer than packagelen
}
uart0buff[rxd0counter]=SBUF1;
rxd0counter++;
if(rxd0counter>=rxd0len)
{
rxd0packflag=1;
rxd1flag=0;
}
}
}
}
}
else //transmit interrupt
{
}
}
/////////////////////////////////////////////////////////////////////////////////
void rxd0() interrupt 4 using 1
{
if(RI) //receive interrupt
{
RI=0;
if(!rxd0flag)
{
if(SBUF==FIMPACKHEAD)
{
keypackflag=0;
uart0buff[0]=FIMPACKHEAD;
rxd0flag=1;
rxd0counter=1;
rxd0timer=timerh;
rxd1flag=0; //to keep uart1 from receiving any data
}
else if(SBUF==KEYPACKHEAD)
{
keypackflag=1;
rxd0chksum=SBUF;
rxd0flag=1;
rxd0counter=1;
rxd0timer=timerh;
}
}
else
{
if(keypackflag)
{
if(rxd0counter<KEYPACKLEN-1)
{
if(rxd0counter==2)
{
keytype=SBUF;
}
else if(rxd0counter==3)
{
keynumber=SBUF;
}
else if(rxd0counter==4)
{
cardnumhigh=SBUF;
}
rxd0counter++;
rxd0chksum+=SBUF;
}
else
{
if(!(rxd0chksum+SBUF))
{
keydownflag=1;
rxd0flag=0;
}
}
}
else
{
if(rxd0counter==1)
{
rxd0len=SBUF+0X100;
}
else if(rxd0counter==2)
{
//rxd1len<<=8;
rxd0len&=0xff;
rxd0len+=(SBUF<<8);
rxd0len+=5; //package length is 5 bytes longer than packagelen
}
uart0buff[rxd0counter]=SBUF;
rxd0counter++;
if(rxd0counter>=rxd0len)
{
rxd0packflag=1;
rxd0flag=0;
}
}
}
/*if(!rxd0flag) //PC&KEYPAD
{
if(SBUF==PCPACKAGEHEAD)
{
keypackflag=0;
uart0buff[0]=PCPACKAGEHEAD;
rxd0flag=1;
rxd0counter=1;
rxd0timer=timerh;
rxd1flag=1; //to keep uart1 from receiving any data
}
else if(SBUF==KEYPACKHEAD)
{
keypackflag=1;
rxd0chksum=SBUF;
rxd0flag=1;
rxd0counter=1;
rxd0timer=timerh;
}
}
else
{
if(keypackflag)
{
if(rxd0counter<KEYPACKLEN-1)
{
if(rxd0counter==2)
{
keytype=SBUF;
}
else if(rxd0counter==3)
{
keynumber=SBUF;
}
else if(rxd0counter==4)
{
cardnumhigh=SBUF;
}
rxd0counter++;
rxd0chksum+=SBUF;
}
else
{
if(!(rxd0chksum+SBUF))
{
keydownflag=1;
rxd0flag=0;
}
}
}
else
{
if(rxd0counter==1)
{
rxd0len=SBUF+0x100;
}
else if(rxd0counter==2)
{
//rxd1len<<=8;
rxd0len&=0xff;
rxd0len+=SBUF<<8;
rxd0len+=3; //package length is 5 bytes longer than packagelen
}
uart0buff[rxd0counter]=SBUF;
rxd0counter++;
if(rxd0counter>=rxd0len)
{
rxd0packflag=1;
rxd0flag=0;
}
}
}*/
/*if(!rxd0flag) //KEYPAD
{
if(SBUF==KEYPACKHEAD)
{
keypackflag=1;
rxd0chksum=SBUF;
rxd0flag=1;
rxd0counter=1;
rxd0timer=timerh;
}
else if(SBUF==FIMPACKHEAD)
{
keypackflag=0;
uart0buff[0]=FIMPACKHEAD;
rxd0flag=1;
rxd0counter=1;
rxd0timer=timerh;
}
else return;
}
else
{
if(keypackflag)
{
if(rxd0counter<KEYPACKLEN-1)
{
if(rxd0counter==2)
{
keytype=SBUF;
}
else if(rxd0counter==3)
{
keynumber=SBUF;
}
else if(rxd0counter==4)
{
cardnumhigh=SBUF;
}
rxd0counter++;
rxd0chksum+=SBUF;
}
else
{
if(!(rxd0chksum+SBUF))
{
keydownflag=1;
rxd0flag=0;
}
}
}
else
{
if(rxd0counter==1)
{
rxd0len=(unsigned short)SBUF;
}
else if(rxd0counter==2)
{
//rxd1len<<=8;
rxd0len+=(SBUF<<8);
rxd0len+=5; //package length is 5 bytes longer than packagelen
}
uart0buff[rxd0counter]=SBUF;
rxd0counter++;
if(rxd0counter>=rxd0len)
{
rxd0packflag=1;
rxd0flag=0;
}
}
}*/
}
else if(TI) //transmit interrupt
{
//TI=0;
}
}
/////////////////////////////////////////////////////////////////////////////////
void init_rxd()
{
SCON=0X70; //10BIT ASYNCHRONOUS VARIABLE
SCON1=0X70; //10BIT ASYNCHRONOUS VARIABLE
//SBUF=0X55;
}
/////////////////////////////////////////////////////////////////////////////////
/*void deal_rxd0()
{
if(!rxd0flag)return ;
deal_pccomm();
}*/
/////////////////////////////////////////////////////////////////////////////////
/*void deal_rxd1()
{
if(!rxd1flag)return;
//if(SELFK)deal_key();
deal_finger();
}*/
/////////////////////////////////////////////////////////////////////////////////
/*void send_byte(unsigned char senddata,unsigned char ch)
{
if(!ch)
{
//if(SPTA0)return FALSE;
SBUF=senddata;
delayTimerl(T38400DELAY);
//while(SPTA0);
//return TRUE;
}
else
{
//if(SPTA1)return FALSE;
SBUF1=senddata;
while(SPTA1);
//return TRUE;
}
}*/
/////////////////////////////////////////////////////////////////////////////////
void sendstring1(unsigned short sendcount)
{
unsigned short i;
set_373(RS485PORT); //070307
delay50us(); //070307
for(i=0;i<sendcount;i++)
{
SBUF1=uart0buff[i];
while(!TI_1);
TI_1=0;
}
clr_373(RS485PORT); //070307
}
/////////////////////////////////////////////////////////////////////////////////
void sendstring(unsigned short sendcount)
{
//unsigned char i,tempchar;
//for(i=0;i<sendcount;i++)
//{
// tempchar=*(pchar+i);
// send_byte(tempchar,ch);
//}
unsigned short i;//,tempchar;
for(i=0;i<sendcount;i++)
{
//tempchar=*(pchar+i);
SBUF=uart0buff[i];
while(!TI);
TI=0;
//delayTimerl(T38400DELAY);
//send_byte(tempchar,ch);
}
//return TRUE;
//if(!ch)
//{
// if(txdcounter0)return FALSE;
// txdcounter0=sendcount-1;
// SBUF=*pchar;
// return TRUE;
//}
//else
//{
// if(txdcounter1)return FALSE;
// txdcounter1=sendcount-1;
// SBUF1=*pchar;
// return TRUE;
//}
}
/////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -