⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.h

📁 51单片机读写飞利浦RC500的源码,还是KEIL工程.
💻 H
字号:
/****************************************************************************
*                                                                           *
* File:         MAIN.H                                                   *
*                                                                           *
* Version:                                             			    *
*                                                                           *
* Created:      30.08.2001                                                  *
* Last Change:  30.08.2001                                                  *
*                                                                           *
* Author:       Chua Joo Ming                                               *
*                                                                           *
* Compiler:     KEIL C51 V4.10                                              *
*                                                                           *
* Description:  89C52RD2-Firmware for MFRC500 Demo Serial Reader            *
*                                                                           *
****************************************************************************/


#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 ON			1
#define OFF			0

// Configuration for the reader timeout counter 
// Timer 2 (modify OSC_FREQ if another crystal frequency is used)
#define OSC_FREQ                22118400L
				// *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 bit             Idle;
EXTERN volatile bit             CmdReceived;

EXTERN volatile bit             DataDleReceived;
EXTERN volatile bit             CmdValid;
EXTERN volatile bit             LLfReady;
EXTERN volatile bit             SendReady;
EXTERN volatile bit             Quit;
EXTERN volatile bit             EnableRS422;
EXTERN volatile bit             EnableTransferCmd;
EXTERN volatile bit             Enable_LEDs;
EXTERN volatile bit          	AutoBaud;

#ifdef AUTODELAY
 EXTERN volatile bit           	DelayRateLocked;
 EXTERN volatile uchar  	DelayRate;
 EXTERN volatile uchar   	CmdCnt;

 #define MAXDELAYRATE			100
 #define AUTODELAY_FALLBACK		200
#endif

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   idata   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);

#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);


#undef EXTERN


/***************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -