📄 mask_c_f.a51
字号:
;$INCLUDE(REG52.INC)
PUBLIC INIT_UART
PUBLIC delay_us
PUBLIC delay_us2
program_dd segment code
PUBLIC _program_data ; must add _
;ly
PUBLIC READ_DATA
PUBLIC ERS_BLOCK1
PUBLIC delay
PUBLIC delay_3sec
PGM_MTP EQU 0FFF0H
cseg at 08ff0h ; complete
complete:
MOV P1, #55h
jmp complete
cseg at 09000h ;data_start_addr
;CALL INIT_UART
;go:
mov DPTR,#MSG_toogle
Lcall SHOW2PC
;Lcall --> can be used within 64k, Acall --> only within 2k
; must use "Lcall" here,(because I want to copy this region to 0x1000)
; if use "call", after disassembly --> become Acll, not Lcall, therefore it will not run properly.
MOV P1, #00h ;1
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
MOV P1, #0ffh
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
MOV P1, #000h ;2
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
MOV P1, #0ffh
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
Lcall delay
mov DPTR,#MSG_OK
Lcall SHOW2PC
;jmp go ;data_end_addr
cseg at 0A000h
MSG_toogle:
DB 0DH, 0AH, ' You will see P1 toogle 2 times','#'
MSG_OK:
DB 0DH, 0AH, ' OK ','#'
INIT_UART:
MOV TMOD,#020H ; T1 MODE2 auto_reload
; MOV TCON,#000H
MOV TCON,#005H
; MOV TH1, #0F3H ;(243) B.R.=2400 AT CLK=12MHz
; MOV TH1, #253 ;(253) B.R.=19200 AT CLK=22.1184MHz
MOV TH1, #245 ;(245) B.R.=4800 AT CLK=20MHz or 10M 2400
;MOV TL1, #000H;;
SETB TR1 ; ENABLE TIME1
MOV SCON,#052H ; UART MODE1 **********8
RET
SHOW2PC:
CLR A
MOVC A,@A+DPTR
CJNE A,#23H,SHOW2PC_NEXT
RET
SHOW2PC_NEXT:
LCALL TRANS
INC DPTR
JMP SHOW2PC
TRANS:
CLR EA
CLR TI
MOV SBUF,#56;ly A
JNB TI,$
CLR TI
RET
delay_us:
mov r7,#250 ;(r7*2)+1 us
djnz r7,$
ret
delay_us2:
mov r7,#50 ;(r7*2)+1 us
djnz r7,$
ret
delay:
mov r5,#1
del0:
mov r6,#40 ;R5*20ms
del:
mov r7,#246
djnz r7,$
djnz r6,del
djnz r5,del0
ret
delay_3sec:
mov r5,#150
del00:
mov r6,#40 ;R5*20ms
del2:
mov r7,#246
djnz r7,$
djnz r6,del2
djnz r5,del00
ret
RSEG program_dd
_program_data: ;must add _
;ly
LCALL TRANS
mov DPH,20H;R6
mov DPL,21H;R7
MOV 0F8H,#5AH ;ENTER IAP COMMAND KEY
ORL 0A2H,#20H ; enable mask ROM
MOV R1, #02H ;PROGRAM
MOV A,22H;R5 ;PROGRAM HI_now_sector_number TO flash
CALL PGM_MTP
CJNE A, #00H, PGM_ERR1
;INC DPTR
;MOV R1, #02H ;PROGRAM
;MOV A, R3 ;PROGRAM LO_now_sector_number TO flash
;CALL PGM_MTP
;CJNE A, #00H, PGM_ERR2
;MOV 0A2H,#00H ; disable mask ROM
;MOV 0F8H,#00H
ANL 0A2H,#0DFH ; disable mask ROM
ANL 0F8H,#00H
;INC DPTR
jmp end_p
PGM_ERR1:
;PGM_ERR2:
mov DPTR,#PRG_FAIL
call SHOW2PC
end_p:
ret;;;;;;;;;
PRG_FAIL:
DB 0DH, 0AH, ' PRG_FAIL ','#'
ERS_BLOCK1:
;ly
LCALL TRANS
MOV 0F8H,#5AH ;ENTER IAP COMMAND KEY
ORL 0A2H,#20H ; enable mask ROM
MOV R1, #01H
MOV DPTR,#04000H ;ERASE block 1
CALL PGM_MTP
CJNE A, #00H, ERS_ERR
ANL 0A2H,#0DFH ; disable mask ROM
ANL 0F8H,#00H
jmp end_ers
ERS_ERR:
mov DPTR,#ERS_FAIL
call SHOW2PC
end_ers:
ret
ERS_FAIL:
DB 0DH, 0AH, ' ERS_BLOCK1_FAIL ','#'
;ly
READ_DATA:
LCALL TRANS
MOV DPH,20H
MOV DPL,21H
MOV 0F8H,#5AH
ORL 0A2H,#20H
MOV R1,#03H
CALL PGM_MTP
MOV 22H,A
ANL 0A2H,#0DFH
ANL 0F8H,#00H
jmp end_read
end_read:
ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -