📄 msr.h
字号:
#define AUTODELAY
//#define NOP_DELAY
#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_TXT 11
#define INFO_CNT 18
// Ports
sbit WDOG = P1^7;
#define TOGGLE_WD(); WDOG = ~WDOG;
sbit MCM_CS = P1^5;
sbit IN_OUT_0 = P2^6;
sbit IN_OUT_1 = P2^5;
sbit IN_OUT_2 = P1^6;
sbit IN_OUT_3 = P2^2;
sbit OUT_4 = P2^4;
#define GRUEN OUT_4
#define GELB IN_OUT_0
#define ON 1
#define OFF 0
#define TEST_LED(x,y); (x) = (y);
#define LED(x,y); if (Enable_LEDs) { (x) = (y); }
#define OSC_FREQ 11059200L
#define BAUD_CNT 7
#define BAUD_115200 65533
#define BAUD_57600 65530
#define BAUD_38400 65527
#define BAUD_28800 65524
#define BAUD_19200 65518
#define BAUD_14400 65512
#define BAUD_9600 65500
#ifdef __SRC
uint 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] = {
0x3c,
0x4a,
0x94,
0xde,
0x129,
0x1bd,
0x251,
0x37a
};
#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 enable //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 TKEY 5
#define AUTHADD 5
#define AUTHMODE 7
#define ADRCHKWR 8
#define HLAUTHMODE 8
#define DATACHKWR 9
#define HLSECNR 9
#define NKEY6 11
#define NKEY8 13
// Timer 0
#define T_533_ms 7///change from 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
#endif
sfr16 RCAP2LH = 0xCA;
sfr16 T2LH = 0xCC;
#ifdef NOP_DELAY
#define DELAY_us(x) delay_50us_NOP()
#else
#define DELAY_us(x) uchar i; for (i = 0; i < (uchar)(((x)*9)/40); i++) ///add /2=/40
// 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 data DelayRate;
EXTERN volatile uchar data CmdCnt;
#define MAXDELAYRATE 100
#define AUTODELAY_FALLBACK 200
#endif
EXTERN volatile uchar data RecvState;
EXTERN volatile uchar data SendState;
EXTERN volatile uchar data Index;
EXTERN volatile uchar data RepCnt;
EXTERN volatile uchar data Timer0Cnt;
EXTERN volatile uchar data SeqNr;
EXTERN volatile uchar data QuitStatus;
EXTERN volatile uchar data CheckByteCnt;
EXTERN volatile char data BaudRate;
EXTERN volatile uchar data Capt_L;
EXTERN volatile uchar data Capt_H;
EXTERN volatile uint data 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 + -