📄 main.h
字号:
/****************************************************************************
* *
* File: MAIN.H *
* *
* Version: V3.2 *
* *
* Created: 8.03.2003 *
* Last Change: 2005/06/04 *
* *
* Author: David Qi *
* *
* Compiler: KEIL C51 V6.32 *
* *
* Description:
****************************************************************************/
#define AUTODELAY
#ifdef __SRC
#define EXTERN
#else
#define EXTERN extern
#endif
// Common Defines
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define FALSE 0
#define TRUE 1
#define INFO_CNT 23
// Ports
#define BEEP P1_1
#define LED P1_3
#define RC500_CS P1_6
#define RC500RST P1_2 //P1_7
#define ON 1
#define OFF 0
#define BeepOn 0
#define BeepOff 1
#define clrWDT() WDTKEY = 0x1e; WDTKEY = 0xe1; WDTC |= 0x20; WDTKEY = 0xe1; WDTKEY = 0x1e
// Configuration for the reader timeout counter
// Timer 2 (modify OSC_FREQ if another crystal frequency is used)
//#define OSC_FREQ 22118400L
#define OSC_FREQ 11059200L
// *note: when using the 8051RD2 (in 6 clk instructiion cycle,
// use a crystal that is half the value state in OSC_FREQ.
// Example: for OSC_FREQ=22118400, use 11059000 crystal.
#define BAUD_CNT 7
#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255
#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254
#define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253
#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252
#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250
#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248
#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244
#ifdef __SRC
uchar code BaudRateTable[BAUD_CNT] = {
BAUD_115200,
BAUD_57600,
BAUD_38400,
BAUD_28800,
BAUD_19200,
BAUD_14400,
BAUD_9600
};
#else
extern uchar code BaudRateTable[BAUD_CNT];
#endif
#ifdef __SRC
uint code CmpTable[BAUD_CNT + 1] = {
0x078,
0x095,
0x129,
0x1BD,
0x252,
0x37A,
0x4A3,
0x6F4
};
#else
extern uint code CmpTable[BAUD_CNT + 1];
#endif
// Serial Protocol
#define SOH 0x01 // Start of header
#define STX 0x02 // Start of text
#define ETX 0x03 // End of text
#define ENQ 0x05 // Enquire
#define ACK 0x06 // Acknowledge
#define DLE 0x10 // Data link escape
#define NAK 0x15 // Not acknowledge
#define MAXREPCNT 2
#define CALL_isr_UART() TI = 1
#define SER_BCC 0
#define SER_CRC 1
#define BCC_CHECKBYTECNT 1
// CCITT-CRC16 (x^16 + x^12 + x^5 + 1) => 0x11021
#define CRC_POLYNOM 0x1021
#define CRC_PRESET 0xFFFF
#define CRC_CHECKBYTECNT 2
// Receive States
#define RECV_STX 0
#define RECV_DATA_DLE_ETX 1
#define RECV_ETX 2
#define RECV_DLE 3
#define RECV_DLE_OR_NAK 4
// Values for checking the Data Length of the Commands
#define MINCMDNR 0x40
#define MAXCMDNR 0x57
#define CMDCNT MAXCMDNR - MINCMDNR + 1
#ifdef __SRC
uchar code CmdLenTab[CMDCNT] = {
// CmdNr: 0x40 ...
7, 1, 5, 4, 2, 0, 1, 17, 5, 5, 1, 1, 14, 1, 2, 0,
// CmdNr: 0x50 ... ... 0x57
1, 1, 2, 22, 1, 0, 3, 5};
#else
extern uchar code CmdLenTab[CMDCNT];
#endif
// Serial Buffer
#define HEADER 3
#define MAXDATA 30
#define SERBUFLEN HEADER + MAXDATA + CRC_CHECKBYTECNT + 1
#define SEQNR 0
#define COMMAND 1
#define STATUS 1
#define LENGTH 2
#define MODE 3
#define BCNT 3
#define ADR 3
#define SERNR 3
#define SIZE 3
#define TIME 3
#define TAGTYPE 3
#define INFO 3
#define CTLBYTE 3
#define PORTBYTE 3
#define HLREQMODE 3
#define SECNR 4
#define DATABYTES 4
#define VALUE 4
#define BAUD 4
#define SERNR_in 4
#define HL_SERNR 4
#define KEY_ADDR 4
#define POSITION 4
#define SEL_CNT 4
#define TKEY 5
#define AUTHADD 5
#define DES_KEY 5
#define MKAC 5
#define CARD_ADDR 5
#define NUM 5
#define CIPHER 6
#define AUTHMODE 7
#define ADRCHKWR 8
#define HLAUTHMODE 8
#define DATACHKWR 9
#define HLSECNR 9
#define NKEY6 11
#define NKEY8 13
#define QUIT 30
// Timer 0
#define T_533_ms 14 // (533 ms)
#define START_T0(x) Timer0Cnt = (x); TL0 = 0; TH0 = 0; TR0 = 1
#define STOP_T0() TR0 = 0
#define CALL_isr_T0() TR0 = 0; Timer0Cnt = 0; TF0 = 1
#ifndef NO_TIMER2
// Timer 2
#define RCAP2_50us 65536L - OSC_FREQ/240417L
#define RCAP2_1ms 65536L - OSC_FREQ/12021L
#define RCAP2_10ms 65536L - OSC_FREQ/1200L
sfr16 RCAP2LH = 0xCA;
sfr16 T2LH = 0xCC;
#else
#define SCON S0CON
#define SBUF S0BUF
#define ES ES0
#endif
#ifdef NOP_DELAY
#define DELAY_us(x) delay_50us_NOP()
#else
#define DELAY_us(x) for (i = 0; i < (uchar)(((x)*9)/20); i++)
// 20 <= x <= 567
#endif
// Global Variables
EXTERN volatile uchar PcData[60];
EXTERN volatile uchar SendBuffer[16];
EXTERN volatile uchar DataNum;
EXTERN volatile uchar ChkSum;
EXTERN volatile uchar AuthOk;
EXTERN volatile bit idata AccOk;
EXTERN volatile bit idata FrameHead;
EXTERN volatile bit idata FrameEnd;
EXTERN volatile bit idata FrameOk;
EXTERN volatile bit idata Idle;
EXTERN volatile bit idata CmdReceived;
EXTERN volatile bit idata DataDleReceived;
EXTERN volatile bit idata CmdValid;
EXTERN volatile bit idata LLfReady;
EXTERN volatile bit idata SendReady;
EXTERN volatile bit idata Quit;
//EXTERN volatile bit idata EnableRS422;
EXTERN volatile bit idata EnableTransferCmd;
//EXTERN volatile bit idata Enable_LEDs;
EXTERN volatile bit idata AutoBaud;
#ifdef AUTODELAY
EXTERN volatile bit DelayRateLocked;
EXTERN volatile uchar xdata DelayRate;
EXTERN volatile uchar xdata CmdCnt;
#define MAXDELAYRATE 100
#define AUTODELAY_FALLBACK 200
#endif
EXTERN volatile unsigned int Temp;
EXTERN volatile unsigned char *Pt;
EXTERN volatile uchar DataLen;
EXTERN volatile uchar RecvState;
EXTERN volatile uchar SendState;
EXTERN volatile uchar Index;
EXTERN volatile uchar RepCnt;
EXTERN volatile uchar Timer0Cnt;
EXTERN volatile uchar SeqNr;
EXTERN volatile uchar QuitStatus;
EXTERN volatile uchar CheckByteCnt;
EXTERN volatile char BaudRate;
EXTERN volatile uchar Capt_L;
EXTERN volatile uchar Capt_H;
EXTERN volatile uint Capt;
EXTERN volatile uchar SerBuffer[SERBUFLEN];
//EXTERN volatile uchar xdata SerBuffer[SERBUFLEN];
// Global Prototypes
EXTERN void delay_8us_NOP(void);
EXTERN void delay_50us(uchar _50us);
EXTERN void delay_1ms(uchar _1ms);
//EXTERN void delay_10ms(uint _10ms);
extern void delay_10ms(uint _10ms);
#ifdef NOP_DELAY
EXTERN void delay_50us_NOP(void);
#endif
EXTERN uchar xtoa_h(uchar _byte);
EXTERN uchar xtoa_l(uchar _byte);
EXTERN void auto_baud(void);
EXTERN void RingOn(void);
EXTERN void HexToAsi(unsigned char ch,unsigned char *Ptm);
EXTERN uchar AsiToHex(uchar ch1,uchar ch2) ;
EXTERN void TransAsiHex(unsigned char *PtData1,unsigned char *PtData2,unsigned char cnt);
EXTERN void TransData(uchar *PtData1, uchar *PtData2,uchar cnt);
EXTERN void TransHexAsi(uchar *PtData1, uchar *PtData2,uchar cnt);
EXTERN void SendDataToPc(uchar *Ptm,uchar cnt);
EXTERN void test(void);
extern void test_10ms(uint n_10ms);
void SendSnrToPc(uchar *Ptm,uchar cnt);
void ChangCardSnr(void);
void SendSnrNum(void);
void FlashLED(void);
uchar CheckSnrNum(void);
//extern uchar xdata MKeys[16][12];
/** EXTERN unsigned char code AledKey[16][12]={{ 0xbd,0xde,0x6f,0x37,0x83,0x83,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0x14,0x8a,0xc5,0xe2,0x28,0x28,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0x7d,0x3e,0x9f,0x4f,0x95,0x95,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xad,0xd6,0x6b,0x35,0xc8,0xc8,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xdf,0xef,0x77,0xbb,0xe4,0xe4,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0x9,0x84,0x42,0x21,0xbc,0xbc,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0x5f,0xaf,0xd7,0xeb,0xa5,0xa5,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0x29,0x14,0x8a,0xc5,0x9f,0x9f,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xfa,0xfd,0xfe,0x7f,0xff,0xff,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0x73,0x39,0x9c,0xce,0xbe,0xbe,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xfc,0x7e,0xbf,0xdf,0xbf,0xbf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xcf,0xe7,0x73,0x39,0x51,0x51,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xf7,0xfb,0x7d,0x3e,0x5a,0x5a,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xf2,0x79,0x3c,0x1e,0x8d,0x8d,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xcf,0xe7,0x73,0x39,0x45,0x45,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
{0xb7,0xdb,0x6d,0xb6,0x7d,0x7d,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5},
} ; **/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -