📄 new51pro.h51
字号:
MY_ADR EQU 0B9H
;W78E58 NEW DEFINE ==================================
P4 DATA 0D8H
XICON DATA 0C0H
AUXR DATA 08EH
;====== 工作寄存器区常数 ==============================
AREA0 EQU 00H ;Work Register Area 0
AREA1 EQU 08H ;Work Register Area 1
AREA2 EQU 10H ;Work Register Area 2
AREA3 EQU 18H ;Work Register Area 3
;====== MCU TYPE BYTE CONST ==========================
A_x051 EQU 00H
A_C5xx EQU 01H
W_E5xx EQU 02H
;====== COMMAND CONST ===================
U_CODE EQU 00H ;RESET
C_CODE EQU 01H ;CALL
R_CODE EQU 02H ;READ
W_CODE EQU 03H ;WRITE
E_CODE EQU 04H ;ERASE
L_CODE EQU 05H ;LOCK
S_CODE EQU 06H ;SET
T_CODE EQU 07H ;TEST
N_CODE EQU 15H
;====== 串行口收发变量(在二区)==============
RX_PIN DATA 10H ;(R0)接收指针(全局)
TX_PIN DATA 11H ;(R1)发送指针(全局)
RX_CNT DATA 12H ;(R2)接收计数(全局)
TX_CNT DATA 13H ;(R3)发送计数(全局)
;====== 设备工作状态标志 ===================
STATE DATA 20H
;--------------------
IN_RXD BIT 00H
OK_RXD BIT 01H
IN_TXD BIT 02H
OK_TXD BIT 03H
IN_RED BIT 04H
IN_PRG BIT 05H
IN_ERS BIT 06H
TX_WAT BIT 07H
;---------------------------------
STATE1 DATA 21H
DEL_X DATA 22H ;延时种子数
DEL_Y DATA 23H ;延时毫秒数
DEL_Z DATA 24H ;延时秒数
;==============================================
TYPE DATA 25H ;0=x051; 1=C5x; 2=W7xE5x
VPP DATA 26H ;05,12,....
VEP DATA 27H
SADD_L DATA 28H
SADD_H DATA 29H
EADD_L DATA 2AH
EADD_H DATA 2BH
CADD_L DATA 2CH
CADD_H DATA 2DH
;TXD In-RAM DEFINE ======================
TXD_HAD EQU 30H
TXD_BUF EQU 34H
TX_SUMB DATA 2FH ;
TX_CODE DATA 30H ;
TX_LENG DATA 31H ;
TX_PAR1 DATA 32H ;
TX_PAR2 DATA 33H ;
TX_D0 DATA 34H ;
TX_D1 DATA 35H ;
;..... ;
TX_D15 DATA 43H ;
;RXD In-RAM DEFINE ======================
RXD_HAD EQU 7CH
RXD_BUF EQU 80H ;
RX_BUFF DATA 7AH
RX_SUMB DATA 7BH
RX_CODE DATA 7CH ;
RX_LENG DATA 7DH ;
RX_PAR1 DATA 7EH ;
RX_PAR2 DATA 7FH ;
RX_D00 DATA 080H ;
RX_D01 DATA 081H ;
;..... ;
RX_D7F DATA 0FFH ;
;PUBLIC CTRL PINS ===================================
IO_SW0 BIT P4.0 ;Pins: H/L = 20PIN/40PIN
IO_W_A BIT P4.1 ;TYPE: H/L = ATMEL/WINBOND
IO_SW1 BIT P4.2 ;SW1: H H L L
IO_SW2 BIT P4.3 ;SW2: H L H L
;Vpp: 0V 5V 12V 14V
;====================================================
;AT89Cx051 PROGRAMMING IO_PIN DEFINE
;P0 =DATA ;must transpose!
;IO_SW0 =H ;Use 20 Pins
;Ctrl Pin ;Read Writ Eras Sign Lock
;IO_SW1 ;H ;H L L H L
;IO_SW2 ;H ;L H H L H
;RST(Vpp) ;0V ;5V 12V 12V 5V 12V
IO_bsy BIT P1.2 ;RDY/BSY
IO_xt1 BIT P1.4 ;Pulse width >= 0.2uS
IO_prg BIT P1.5 ;H NP NP H NP
IO_p33 BIT P1.6 ;L L H L H/H
IO_p34 BIT P1.7 ;L H L L H/H
IO_p35 BIT P3.6 ;H H L L H/L
IO_p37 BIT P3.7 ;H H L L H/L
;P: Min=1uS,Max=110uS
;========================================================
;AT89C5x PROGRAMMING IO_PIN DEFINE:
;P0 =D7~D0 ;Data Prot
;P3.3~2 =A15~A14;
;P2.5~0 =A13~A8 ;Asserss Prot
;P1 =A7~A0 ;
;IO_SW0 =L ;Use 40Pins
;IO_W_A =L ;IS ATMEL
AT_A14 BIT P3.2 ;
AT_A15 BIT P3.3 ;
;Ctrl_Pin ;Pin ;Read Writ Eras Sign LCK1/2/3
;IO_SW1 ;H ;H L L H L
;IO_SW2 ;H ;L H H L H
;VPP ;0V ;5V 12V 12V 5V 12V
AT_BSY BIT P3.4 ;RDY/BSY
AT_PRG BIT P3.5 ;H NP NP H NP
AT_P26 BIT P2.6 ;L L H L H/H/H
AT_P27 BIT P2.7 ;L H L L H/H/L
AT_P36 BIT P3.6 ;H H L L H/L/H
AT_P37 BIT P3.7 ;H H L L H/L/L
;P: Min=1uS,Max=110uS
;=======================================================
;W77/78E58 PROGRAMMING IO_PIN DEFINE:
;P0 =D7~D0 ;Data Prot
;P2-P1 =A15~A0 ;Asserss Prot
;IO_SW0 =L ;Use 40Pins
;IO_W_A =H ;IS WINBON
;Ctrl_Pins ;Pin ;Read Writ P/V Eras
;IO_SW1 ;H ;H L L L
;IO_SW2 ;H ;L H H L
;VPP ;0V ;5V 12V 12V 14V
WB_P30 BIT P3.2 ;L L L H
WB_P31 BIT P3.3 ;L L L L
;W_P32 LIN GND ;L L L L
WB_P33 BIT P3.4 ;L L PPc L
WB_PRG BIT P3.5 ;L L L L
WB_P36 BIT P3.6 ;L NPw H L
WB_P37 BIT P3.7 ;L H NPo H
;Pw: Min=295uS,Max=305uS
;Pc/Po: Min=4uS(NPo lag PPc 2uS)
;===========================================
;====== 直接位传送宏 ========================
MOVE MACRO BIT1,BIT2
MOV C,BIT2
MOV BIT1,C
ENDM
DEC_n MACRO X,n
LOCAL Loop
MOV DEL_X,#n
Loop: DEC X
DJNZ DEL_X,Loop
ENDM
;=============================================
;W78E58,fosc=22.1184,MC=0.542534722..
;2MC~=1.085uS
;====== 255uS 以内延时宏 ======================
WAIT MACRO uS ;2(uS+1)MC
MOV DEL_X,#uS ;2MC
DJNZ DEL_X,$ ;2MC*uS
ENDM
;====== 255mS 以内延时宏 ======================
DEL_mS MACRO mS
LOCAL LOOP
;time=(1.084+mS*999.84)uS
MOV DEL_Y,#mS ;=1.84uS
LOOP: MOV DEL_X,#27H ;=975uS
LCALL DELAY2 ;/
WAIT 22 ;=24.84uS
DJNZ DEL_Y,LOOP ;/
ENDM
;====== 255S 以内延时宏 =======================
DEL_S MACRO SEC
LOCAL LOOP
;time=Sec*(1.002224)S
MOV DEL_Z,#SEC ;1.08uS
LOOP: MOV DEL_X,#0ADH ;=1.002223S
LCALL DELAY3 ;/
DJNZ DEL_Z,LOOP ;1.08uS
ENDM
;===================================================
;====== 返回应答报文宏 =======================
ANSWER MACRO LN
MOV TX_CODE,A
MOV TX_LENG,#LN
MOV TX_CNT,#00H ;Start answer
MOV TX_PIN,#TXD_HAD
CLR A
MOVE TB8,P
MOV TX_SUMB,A
MOV SBUF,A
JNB OK_TXD,$
CLR OK_TXD
ENDM
;====== (AT89Cx051)加地址增一脉冲宏 ================
INC_x051_ADDR MACRO
SETB IO_xt1 ;\
NOP ;-Address Puls
CLR IO_xt1 ;/
ENDM
;===================================================
;====== (AT89Cx051)施加编程(写入)脉冲宏 =============
SET_x05_PROG MACRO
WAIT 1 ;>1uS
CLR IO_prg ;\
WAIT 110 ;-Wait 111uS
SETB IO_prg ;/
;PROG High to BUSY Low =50nS
WAIT 1 ;>1uS
JNB IO_bsy,$ ;Wait BUSY=H
;BUSY High to XTAL1 High =1uS
WAIT 1 ;>1uS
ENDM
;====== (AT89C5x)施加编程(写入)脉冲宏 ===============
SET_C5x_PROG MACRO
;Data Setup to PROG Low = 4 MC_Cyc
WAIT 2 ;-Wait 4 Cyc!
CLR AT_PRG ;make negative pluse
WAIT 110 ;Wait 111uS
SETB AT_PRG ;
;PROG High to BUSY Low =1uS
WAIT 2 ;-
JNB AT_BSY,$ ;Wait BUSY
ENDM
;====== (AT89C5x)施加编程(写入)脉冲宏 ===============
SET_E5x_PROG MACRO
WAIT 1 ;wait 2uS
CLR WB_P36 ;\make negative pluse
WAIT 158 ;\
WAIT 158 ;-Keep 318uS(>305uS)
SETB WB_P36 ;/
WAIT 1 ;wait 2uS
ENDM
;===================================================
;====== (AT89Cx051)读一个字节数据宏 ==================
READ_x051_DATA MACRO
WAIT 10H ;Wait 10 uS?
CLR IO_p34 ;in Read State
WAIT 2 ;Wait 2uS!
MOV A,P0 ;Read Data
SETB IO_p34
LCALL X051_DATA ;Reversal
ENDM
;====== (AT89Cx051)读一个字节数据宏 ==================
READ_C5xx_DATA MACRO
LCALL AT_ADDR
CLR AT_P27 ;in read state
WAIT 2 ;wait 4MC!
MOV A,P0 ;Read Data
SETB AT_P27
ENDM
;====== (AT89Cx051)读一个字节数据宏 ==================
READ_E5xx_DATA MACRO
MOV P1,DPL
MOV P2,DPH
WAIT 10 ;10uS?
CLR WB_P37
WAIT 1 ;1uS?
MOV A,P0 ;Read Data
SETB WB_P37
ENDM
;===================================================
;====== 设置编程电压宏 ==============================
SEL_VPP MACRO V
LOCAL V_14,V_12,V_05,V_END
MOV A,V
V_14: CJNE A,#14,V_12
VPP_14V
SJMP V_END
V_12: CJNE A,#12,V_05
VPP_12V
SJMP V_END
V_05: CJNE A,#5,V_END
VPP_05V
V_END: NOP
ENDM
;===================================================
VPP_00V MACRO
SETB IO_SW1
SETB IO_SW2
DEL_mS 255
DEL_mS 255
ENDM
VPP_05V MACRO
SETB IO_SW1
CLR IO_SW2
DEL_mS 255
ENDM
VPP_12V MACRO
CLR IO_SW1
SETB IO_SW2
DEL_mS 255
ENDM
VPP_14V MACRO
CLR IO_SW1
CLR IO_SW2
DEL_mS 255
ENDM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -