📄 st3lib10.c
字号:
//st3_st3lib10.c: (V1.0) 2002.1 dxs
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <absacc.h>
#include <reg52.h>
#include <usign.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
//define int number
#define DEF_INT_EX0 0
#define DEF_INT_TIME0 1
#define DEF_INT_EX1 2
#define DEF_INT_ASYNC 4
#define DEF_INT_TIME2 5
//define int T0 use-mode
#define DEF_T0_NONE 0x00
#define DEF_T0_ICREC 0x01
#define DEF_T0_ICSEND 0x02
//define comm code
#define DEF_COMMBUFF_LEN 0x100
#define EXP_COMMBUFF_LEN 0x100
//define parity
#define DEF_PARITY_NONE 0x00
#define DEF_PARITY_EVEN 0x01
#define DEF_PARITY_ODD 0x02
//define the high program switch address
#define DEF_RAM_PAGE 0xffef
#define DEF_PORT_DATECS P1_1
#define DEF_LCD_COL 0x10
#define DEF_ADDR_LCDDATA 0x8021
#define DEF_ADDR_LCDCOMM 0x8020
#define DEF_HIGH_Card 0x8000
#define DEF_HIGH_Key 0x8000
#define DEF_HIGH_AddrICNo 0x8010
#define DEF_HIGH_Date 0x8040
#define DEF_HIGH_Card_Rest 0x8050
#define DEF_CRC_OK 0xB8F0
//define modem return type
#define DEF_MODEM_RESET 0x80
#define DEF_MODEM_DIAL 0x90
#define DEF_MODEM_DATAINFO 0xA0
#define DEF_MODEM_REC 0xB0
#define DEF_MODEM_SEND 0xC0
#define DEF_MODEM_CONNECT 0xD0
//defien modem error dscr
#define DEF_MODEM_STATUS_OK 0x00
#define DEF_MODEM_STATUS_NOMODEM 0x01
#define DEF_MODEM_STATUS_NOLINE 0x02
#define DEF_MODEM_STATUS_BUSY 0x03
#define DEF_MODEM_STATUS_NOCARRY 0x04
#define DEF_MODEM_STATUS_NOANSWER 0x05
#define DEF_MODEM_STATUS_NOHDLC 0x06
#define DEF_MODEM_STATUS_USERCANCEL 0x07
#define DEF_MODEM_STATUS_OVERTIME 0x08
#define DEF_MODEM_STATUS_CRCERROR 0x09
//define modem return datainfo
#define DEF_DATAINFO_BEGIN 0x01
#define DEF_DATAINFO_END 0x02
#define DEF_DATAINFO_CANCEL 0x03
//define modem rec-status
#define DEF_REC_STATUS_NULL 0x00
#define DEF_REC_STATUS_ADDR 0x01
#define DEF_REC_STATUS_CTRL 0x02
#define DEF_REC_STATUS_INFO 0x03
#define DEF_REC_STATUS_CTRLCRC 0x04
#define EXP_XTAL 11059200 /* CPU Oscillator Frequency *///
#define EXP_RHR 0x8000
#define EXP_THR 0x8000
#define EXP_DLL 0x8000
#define EXP_DLM 0x8001
#define EXP_IER 0x8001
#define EXP_ISR 0x8002
#define EXP_FCR 0x8002
#define EXP_LCR 0x8003
#define EXP_MCR 0x8004
#define EXP_LSR 0x8005
#define EXP_EFR 0x8002
#define DEF_232_POWER P1_2
#define DEF_232_RXD P3_0
#define DEF_232_TXD P3_1
#define DEF_MODEM_RXD P3_5
#define DEF_MODEM_TXD P1_7
#define DEF_MODEM_TXC P1_3
#define DEF_MODEM_RXC P1_0
#define DEF_MODEM_DR 0x8002
#define DEF_MODEM_ID 0x8006
#define DEF_MODEM_CR0 0x8000
#define DEF_MODEM_CR1 0x8001
#define DEF_MODEM_TR 0x8003
//define printer status
#define DEF_PRINT_OK 0x00
#define DEF_PRINT_NOPAPER 0x01
#define DEF_PRINT_LOWBATT 0x02
#define DEF_PRINT_STATUS 0x8010
#define DEF_PRINT_OUTDATA 0x8030
#define DEF_PRINT_PRNCLK 0x8060
#define DEF_PRINT_LATCH 0x8070
//st3 internal Keyboard value
#define DEF_KEY_1 11
#define DEF_KEY_2 10
#define DEF_KEY_3 9
#define DEF_KEY_4 7
#define DEF_KEY_5 6
#define DEF_KEY_6 5
#define DEF_KEY_7 3
#define DEF_KEY_8 2
#define DEF_KEY_9 1
#define DEF_KEY_0 14
#define DEF_KEY_ESC 4
#define DEF_KEY_ENTER 13
#define DEF_KEY_CLEAR 15
#define DEF_KEY_DOT 16
#define DEF_KEY_F1 12
#define DEF_KEY_F2 8
uchar *CrcTabL =
"\x00\x11\x23\x32\x46\x57\x65\x74\x8c\x9d\xaf\xbe\xca\xdb\xe9\xf8\x10\x01\x33\x22\x56\x47\x75\x64\x9c\x8d\xbf\xae\xda\xcb\xf9\xe8"
"\x21\x30\x02\x13\x67\x76\x44\x55\xad\xbc\x8e\x9f\xeb\xfa\xc8\xd9\x31\x20\x12\x03\x77\x66\x54\x45\xbd\xac\x9e\x8f\xfb\xea\xd8\xc9"
"\x42\x53\x61\x70\x04\x15\x27\x36\xce\xdf\xed\xfc\x88\x99\xab\xba\x52\x43\x71\x60\x14\x05\x37\x26\xde\xcf\xfd\xec\x98\x89\xbb\xaa"
"\x63\x72\x40\x51\x25\x34\x06\x17\xef\xfe\xcc\xdd\xa9\xb8\x8a\x9b\x73\x62\x50\x41\x35\x24\x16\x07\xff\xee\xdc\xcd\xb9\xa8\x9a\x8b"
"\x84\x95\xa7\xb6\xc2\xd3\xe1\xf0\x08\x19\x2b\x3a\x4e\x5f\x6d\x7c\x94\x85\xb7\xa6\xd2\xc3\xf1\xe0\x18\x09\x3b\x2a\x5e\x4f\x7d\x6c"
"\xa5\xb4\x86\x97\xe3\xf2\xc0\xd1\x29\x38\x0a\x1b\x6f\x7e\x4c\x5d\xb5\xa4\x96\x87\xf3\xe2\xd0\xc1\x39\x28\x1a\x0b\x7f\x6e\x5c\x4d"
"\xc6\xd7\xe5\xf4\x80\x91\xa3\xb2\x4a\x5b\x69\x78\x0c\x1d\x2f\x3e\xd6\xc7\xf5\xe4\x90\x81\xb3\xa2\x5a\x4b\x79\x68\x1c\x0d\x3f\x2e"
"\xe7\xf6\xc4\xd5\xa1\xb0\x82\x93\x6b\x7a\x48\x59\x2d\x3c\x0e\x1f\xf7\xe6\xd4\xc5\xb1\xa0\x92\x83\x7b\x6a\x58\x49\x3d\x2c\x1e\x0f"
;
uchar *CrcTabH =
"\x00\x89\x12\x9b\x24\xad\x36\xbf\x48\xc1\x5a\xd3\x6c\xe5\x7e\xf7\x81\x08\x93\x1a\xa5\x2c\xb7\x3e\xc9\x40\xdb\x52\xed\x64\xff\x76"
"\x02\x8b\x10\x99\x26\xaf\x34\xbd\x4a\xc3\x58\xd1\x6e\xe7\x7c\xf5\x83\x0a\x91\x18\xa7\x2e\xb5\x3c\xcb\x42\xd9\x50\xef\x66\xfd\x74"
"\x04\x8d\x16\x9f\x20\xa9\x32\xbb\x4c\xc5\x5e\xd7\x68\xe1\x7a\xf3\x85\x0c\x97\x1e\xa1\x28\xb3\x3a\xcd\x44\xdf\x56\xe9\x60\xfb\x72"
"\x06\x8f\x14\x9d\x22\xab\x30\xb9\x4e\xc7\x5c\xd5\x6a\xe3\x78\xf1\x87\x0e\x95\x1c\xa3\x2a\xb1\x38\xcf\x46\xdd\x54\xeb\x62\xf9\x70"
"\x08\x81\x1a\x93\x2c\xa5\x3e\xb7\x40\xc9\x52\xdb\x64\xed\x76\xff\x89\x00\x9b\x12\xad\x24\xbf\x36\xc1\x48\xd3\x5a\xe5\x6c\xf7\x7e"
"\x0a\x83\x18\x91\x2e\xa7\x3c\xb5\x42\xcb\x50\xd9\x66\xef\x74\xfd\x8b\x02\x99\x10\xaf\x26\xbd\x34\xc3\x4a\xd1\x58\xe7\x6e\xf5\x7c"
"\x0c\x85\x1e\x97\x28\xa1\x3a\xb3\x44\xcd\x56\xdf\x60\xe9\x72\xfb\x8d\x04\x9f\x16\xa9\x20\xbb\x32\xc5\x4c\xd7\x5e\xe1\x68\xf3\x7a"
"\x0e\x87\x1c\x95\x2a\xa3\x38\xb1\x46\xcf\x54\xdd\x62\xeb\x70\xf9\x8f\x06\x9d\x14\xab\x22\xb9\x30\xc7\x4e\xd5\x5c\xe3\x6a\xf1\x78"
;
#define COMMAND_LEN 5
typedef struct
{
uchar Command[COMMAND_LEN];
uchar LengthIn;
uchar *DataIn;
uchar LengthExpected;
} APDU_COMM;
typedef struct
{
ulong LengthOut;
uchar *DataOut;
uint Status;
} APDU_RESP;
typedef struct
{
uchar year;
uchar month;
uchar day;
uchar hour;
uchar minute;
uchar second;
uchar hsecond;
uchar weekday;
} stClock;
extern void MyApplication();
extern void EXT_AREA();
extern void AppRun();
extern void SysReset();
extern uchar _GetCBYTE(uint Addr);
extern uint MAGREAD(uchar *buff);
extern void _Pixel2(uchar QM, uchar WM, uchar *pxBuff1,uchar * pxBuff2);
extern uchar Read_at24( uint offset, uint count, uchar *buff);
extern uchar Write_at24(uint offset, uint count, uchar *buff);
extern uchar Read_mem( uint offset, uint count, uchar *buff);
extern uchar Write_mem(uint offset, uint count, uchar *buff);
void _OutHighAddr(uchar HA);
void _ChipSelect(uchar cs);
void _SelAddrRam(void);
void _SelAddrMain(void);
void _SelAddrModem(void);
void _SelAddr040(void);
void _Delay(uint mSecond);
void _Buzzer(void);
void _Reset(void);
uchar _Random(void);
void _SetLED(uchar Level);
uchar _ReverseData(uchar SouData);
void _SysInit(void);
void BCDtoChar(uchar *pBCD, uint BCDLen, uchar *pChar);
void ChartoBCD(uchar *pChar, uint CharLen, uchar *pBCD);
extern uchar Ide_AREA(uchar page,uchar form);//lxj
void Ide_ARE(void);//lxj
uchar Read_at24c( uint offset, uint count, uchar *buff);
uchar Write_at24c(uint offset, uint count, uchar *buff);
uchar _SysDataRead( uint offset, uint count, uchar *buff);
uchar _SysDataWrite(uint offset, uint count, uchar *buff);
uchar _DataBackup( uchar Block, Sector, uchar *dataBuf);
uchar _DataRestore(uchar Block, Sector, uchar *dataBuf);
void _InitXMEM(void);
void _XMemToMem(uint DataLen,uchar* MemBuff, uchar XMemPage,uint XMemOffset);
void _MemToXMem(uint DataLen,uchar XMemPage,uint XMemOffset,uchar* MemBuff);
uchar _XMemPage(void);
uchar _Read_mcard(uint offset, uint count, uchar *buff);
uchar _Write_mcard(uint offset, uint count, uchar *buff);
uchar _KeyBoardUnite(uchar kVal);
uchar _KeyBoardGet(void);
uchar _KeyBoardTest(void);
void _SetBkLight(uchar Level);
void _SetContrast(uchar Level);
void _InitLCD(void);
void _SetRevDisp(uchar Level);
void _SetEntDisp(uchar Level);
uchar _DispXY01( uchar LINE, uchar COLUM, uchar Level, uchar *DispStr);
void _ClearScreen(void);
uchar _DispXY( uchar LINE, uchar COLUM, uchar Level, uchar *DispStr);
void _Display(uchar ucNoLine, uchar* pzText);
uchar _DispTXT(uchar LINE, uchar COLUM, uchar *DispStr);
uchar _CopyImage(uchar SCREEN_X, SCREEN_Y, BUFLEN_X, BUFLEN_Y, uchar *DataBuff);
void _ClockSet(stClock* ptDateTime);
void _ClockRead(stClock* ptDateTime);
uchar _ClockByteInc(uchar DB);
void _InitTimer(void);
ulong _GetTickCount(void);
void _ClearTickCount(void);
void _AsyncOpen(uint Baud, uchar Parity);
void _AsyncClose(void);
uchar _AsyncPutTest(void);
void _AsyncPut(uchar ucValue);
uchar _AsyncGetTest(void);
uchar _AsyncGet(void);
void _AsyncSetReceive(uchar Level);
void _EXP_Open(uint Baud, uchar Parity);
void _EXP_Close(void);
uchar _EXP_PutTest(void);
void _EXP_Put(uchar ucValue);
uchar _EXP_GetTest(void);
uchar _EXP_Get(void);
void _Dial_Tone(uchar tone_on);
void _CardSetPower(uchar Level);
void _CardSetCard(uchar ICSAM);
void _CardSetReset(uchar Leval);
void _MemCardEn(uchar Level);
void _CardSetPGM(uchar Level);
void _CardSetFUS(uchar Level);
void _CardSetClock(uchar Leval);
void _CardSetCLK4(uchar Level);
void _CardPutByte(uchar IOData);
void _CardPutBit(uchar IOBit);
uchar _CardReadByte(void);
uchar _CardReadBit(void);
uchar _CardTestDoor(void);
void _CardSetRecLimit(uint RecLimit);
uchar _CardReadIOLimit(uchar *recdata,uchar Reverse);
uchar _CardSmartReset(uchar *ResetData);
uchar _CardSmartOpen(void);
void _CardSmartClose(void);
uchar _CardSmartApdu(APDU_COMM *apducom, APDU_RESP *apduresp);
void _CardSmartApduSend(uchar *SendBuff,uchar SendLen,uchar FlagReverse);
void _DisableICRec(void);
void _EnableICRec(void);
uchar _TestLock(void);
uchar _TestFront(void);
uchar _SetLock(uchar Level);
void _Mag2Accept(uchar *track2Data);
void _Mag3Accept(uchar *track3Data);
uchar _MagAlterData(uchar *SouBuff, uchar DP, uchar CP,
uchar *DesBuff, uint SouLen);
uchar _MagTest(void);
void _MagWrite(uchar* Mag2Buff,uchar Mag2Len,uchar* Mag3Buff, uchar Mag3Len);
extern uchar _Printer(uchar Level,uchar *Text);
uchar _Print(uchar Level,uchar *Text);
extern uchar _PrintGraph(uchar Level,uchar *Dot);
extern void _PrintStep(uint StepAmount);
uchar _GetSysScreenRow(void);
uchar _GetSysScreenCol(void);
uchar _GetSysKeycapCount(void);
uchar _GetSysClockCount(void);
uchar _GetSysTimerCount(void);
uchar _GetSysPrinterRow(void);
uchar _GetSysPrinterCol(void);
uchar _GetSysModemCount(void);
uchar _GetSysMagRdCount(void);
uchar _GetSysMagWtCount(void);
uchar _GetSysICCardCount(void);
uchar _GetSysCommCount(void);
uchar _GetSysRamBlock(void);
uchar _GetSysFlashBlock(void);
uchar _GetSysFirstPrgBlk(void);
uchar _GetSysBackupBlock(void);
uchar _GetSysFirstBckBlk(void);
uint CrcData(uint CrcBuff, uchar dd);
uchar _ModemReset(void);
void _ModemHangUp(void);
uchar _ModemDl(uchar *pTelNo);
uchar _ModemHeadTail(uchar ht);
void _ModemGetErrStr(uchar ErrCode, uchar *ErrString);
void _ModemDispErr(uchar ErrCode, DispLine);
void _ModemSetStatus(uchar Val);
uchar _ModemRc(uchar *RecBuff, uint *RecLen);
uchar _ModemSd(uchar *SendBuff, uint SendLen);
uchar _ModemDial(uchar *pTelNo);
uchar _ModemReceive(uchar *RecBuff, uint *RecLen, uint OverSecond);
uchar _ModemSend(uchar *SendBuff, uint SendLen);
uchar PUB_TelNo[20];
uchar PUB_AddrNo, PUB_AddrNo2;
uchar PUB_NR, PUB_NS;
uchar PUB_SendCtrlData;
bit PUB_ModemStatus;
bit PUB_SendData;
uchar PixelBuff[768];
uchar PUB_HIGH_Card;
uchar PUB_HIGH_Date;
uchar data PUB_HIGH_AddrICNo;
uchar data PUB_HIGH_Addr;
uchar PUB_XMEM_Page[32];
uchar PUB_Key;
uchar PUB_Free;
uchar *PUB_Mag2Pt;
uchar *PUB_Mag3Pt;
uchar PUB_CommBuffR[DEF_COMMBUFF_LEN+2];
uchar PUB_CommBuffT[DEF_COMMBUFF_LEN+2];
uint PUB_CountRH, PUB_CountRT;
uint PUB_CountTH, PUB_CountTT;
uchar PUB_ByteTT;
uchar PUB_Random;
uchar PUB_CommParity;
uchar PUB_Async_TI;
uchar PUB_Async_RI;
uchar PUB_Async_RecData;
uchar EXP_CommBuffR[EXP_COMMBUFF_LEN];
uchar EXP_CommBuffT[EXP_COMMBUFF_LEN];
uint EXP_CountRH, EXP_CountRT;
uint EXP_CountTH, EXP_CountTT;
uchar EXP_ByteTT;
uchar EXP_CommParity;
uchar EXP_Async_TI;
uchar EXP_Async_RI;
uchar EXP_Async_RecData;
bit R_P1_5,R_P1_6;
uchar PUB_T0Type;
ulong PUB_Hang_Timer;
uchar data PUB_Timer20;
uchar data PUB_Timer21;
uchar data PUB_Timer22;
uchar data PUB_Timer23;
uchar PUB_HIGH_Card_Rest;
uchar PUB_Card_Counter;
uchar PUB_Card_RecData;
uchar PUB_Card_RecBuff;
uint PUB_Card_SendBuff;
uchar PUB_Card_TI;
uchar PUB_Card_RI;
uchar PUB_Card_ICNO;
uchar PUB_Card_ICReverse[8];
uchar PUB_Card_ICPCB[8];
uchar PUB_Card_ICT01[8];
uchar PUB_Card_Asy[8];
uint PUB_Card_GuardTime;
uint PUB_Card_RecLimit;
uchar PUB_PrintStep;
uchar PUB_PrintOutData;
_IntEx0() interrupt DEF_INT_EX0
{
TL0 = TH0;
TR0 = 1;
PUB_T0Type = DEF_T0_ICREC;
PUB_Card_Counter = 0;
ET0 = 1;
EX0 = 0x00;
}
_IntTime0() interrupt DEF_INT_TIME0
{
switch ( PUB_T0Type )
{
case DEF_T0_ICREC:
PUB_Card_Counter++;
if ( PUB_Card_Counter < 9 )
{
PUB_Card_RecBuff = PUB_Card_RecBuff >> 1;
if ( INT0 == 0x01) PUB_Card_RecBuff = PUB_Card_RecBuff | 0x80;
}
else
{
ET0 = 0x00;
TR0 = 0x00;
PUB_Card_RecData = PUB_Card_RecBuff;
PUB_Card_RI = 0x01;
PUB_T0Type = DEF_T0_NONE;
IE0 = 0x00;
EX0 = 0x01;
}
break;
case DEF_T0_ICSEND:
if ( PUB_Card_SendBuff & 0x01 )
INT0 = 0x01;
else
INT0 = 0x00;
PUB_Card_SendBuff = PUB_Card_SendBuff >> 1;
PUB_Card_Counter++;
if ( PUB_Card_Counter >= 12 )
{
ET0 = 0x00;
TR0 = 0x00;
PUB_T0Type = DEF_T0_NONE;
PUB_Card_TI = 0x01;
INT0 = 0x01;
}
}
}
_IntAsync() interrupt DEF_INT_ASYNC
{
if ( RI == 0 )
{
TI = 0;
PUB_Async_TI = 1;
PUB_CountTT++;
if (PUB_CountTT >= DEF_COMMBUFF_LEN-1) PUB_CountTT = 0;
if ( PUB_CountTH != PUB_CountTT )
{
PUB_ByteTT = PUB_CommBuffT[PUB_CountTT];
ACC = PUB_ByteTT;
TB8 = P;
if ( PUB_CommParity == DEF_PARITY_ODD )
TB8 = TB8 ^ 0x01;
SBUF = PUB_ByteTT;
}
}
else
{
RI = 0;
PUB_Async_RecData = SBUF;
switch ( PUB_CommParity )
{
case DEF_PARITY_ODD:
ACC = PUB_Async_RecData;
if ( (P^0x01) == RB8 )
PUB_Async_RI = 1;
break;
case DEF_PARITY_EVEN:
ACC = PUB_Async_RecData;
if ( P == RB8 )
PUB_Async_RI = 1;
break;
default:
PUB_Async_RI = 1;
}
if ( PUB_Async_RI )
{
PUB_CommBuffR[PUB_CountRH] = PUB_Async_RecData;
PUB_CountRH++;
if (PUB_CountRH >= DEF_COMMBUFF_LEN-1) PUB_CountRH = 0;
}
}
}
void int_ex1(void) interrupt DEF_INT_EX1
{uchar ISR_st;
P1_5=0;P1_6=1;
do{
while ( XBYTE[EXP_LSR]&0x01)
{
EXP_Async_RecData = XBYTE[EXP_LSR];
EXP_Async_RI = 0;
if ( EXP_CommParity ==0)
EXP_Async_RI = 1;
else if ((EXP_Async_RecData&0x04)==0)
EXP_Async_RI = 1;
EXP_Async_RecData = XBYTE[EXP_RHR];
if ( EXP_Async_RI )
{
EXP_CommBuffR[EXP_CountRH] = EXP_Async_RecData;
EXP_CountRH++;
if (EXP_CountRH >= EXP_COMMBUFF_LEN-1) EXP_CountRH = 0;
}
}
ISR_st=XBYTE[EXP_ISR];
if ( (ISR_st&0x0f)==0x02)
{
EXP_Async_TI = 1;
EXP_CountTT++;
if (EXP_CountTT >= EXP_COMMBUFF_LEN-1) EXP_CountTT = 0;
if ( EXP_CountTH != EXP_CountTT )
{
EXP_ByteTT = EXP_CommBuffT[EXP_CountTT];
XBYTE[EXP_THR] = EXP_ByteTT;
}
}
}
while(P3_3==0);
P1_5 = R_P1_5; P1_6 = R_P1_6;
}
/*
{uchar ISR_st;
P1_5=0;P1_6=1;
ISR_st=XBYTE[EXP_ISR];
if ( ((ISR_st&0x0f)==0x02)||( (ISR_st&0x0f)==0x01))
{
EXP_Async_TI = 1;
EXP_CountTT++;
if (EXP_CountTT >= EXP_COMMBUFF_LEN-1) EXP_CountTT = 0;
if ( EXP_CountTH != EXP_CountTT )
{
EXP_ByteTT = EXP_CommBuffT[EXP_CountTT];
XBYTE[EXP_THR] = EXP_ByteTT;
}
}
while ( XBYTE[EXP_LSR]&0x01)
{
EXP_Async_RecData = XBYTE[EXP_LSR];
EXP_Async_RI = 0;
if ( EXP_CommParity ==0)
EXP_Async_RI = 1;
else if ((EXP_Async_RecData&0x04)==0)
EXP_Async_RI = 1;
EXP_Async_RecData = XBYTE[EXP_RHR];
if ( EXP_Async_RI )
{
EXP_CommBuffR[EXP_CountRH] = EXP_Async_RecData;
EXP_CountRH++;
if (EXP_CountRH >= EXP_COMMBUFF_LEN-1) EXP_CountRH = 0;
}
}
if(P3_3==0)
{P1_7=P1_7^1;
while ( XBYTE[EXP_LSR]&0x01)
{
EXP_Async_RecData = XBYTE[EXP_LSR];
EXP_Async_RI = 0;
if ( EXP_CommParity ==0)
EXP_Async_RI = 1;
else if ((EXP_Async_RecData&0x04)==0)
EXP_Async_RI = 1;
EXP_Async_RecData = XBYTE[EXP_RHR];
if ( EXP_Async_RI )
{
EXP_CommBuffR[EXP_CountRH] = EXP_Async_RecData;
EXP_CountRH++;
if (EXP_CountRH >= EXP_COMMBUFF_LEN-1) EXP_CountRH = 0;
}
}
ISR_st=XBYTE[EXP_ISR];
if ( ((ISR_st&0x0f)==0x02)||( (ISR_st&0x0f)==0x01))
{
EXP_Async_TI = 1;
EXP_CountTT++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -