📄 iaptest1.inc
字号:
; File:IAPTEST1.ASM
; 功能:调用IAP服务程序实现Flash ROM的读/写操作。
; 说明:向Flash ROM地址1000H处写入10个数据,然后读出进行校验,
; 若校验正确,则蜂鸣器响一声。
; 将跳线器J27短接到OCA端,J28短接到BEEP端。
; 将跳线器J13、J15、J16分别短接到MOSI、SS、SPICLK。
; 将跳线器J8、J9短接到HXTAL1、HXTAL2端。
$NOMOD51
$INCLUDE (REG932.INC)
FMADRH DATA 0xE7
FMADRL DATA 0xE6
FMCON DATA 0xE4
FMDATA DATA 0xE5
PGM_MTP EQU 0FF03H ; IAP子程序入口地址
OPADR EQU 1000H ; 待写入数据的Flash ROM地址
DATA_BUF EQU 30H ; 数据缓冲区30H-3FH
; 74HC595驱动口定义
HC595_CS BIT P2.4
HC595_CLK BIT P2.5
HC595_DAT BIT P2.2
LEDCON BIT P2.6 ; 定义LED控制端口
BEEP BIT P2.7
OP_ERR BIT 10H ; 操作失败标志,为1时表示操作失败
ORG 0000H
JMP MAIN
ORG 0100H
MAIN: MOV SP,#60H
MOV P2M1,#0C0H
MOV P2M2,#0C0H
READ_VER: MOV A,#01H ; 读取IAP代码版本ID号
CALL PGM_MTP
MOV A,R7
CPL A
CALL HC595_SENDDAT ; 将读出的值输出显示
CPL LEDCON
; 写操作前先进行擦除操作
ERASE_SECTOR: CLR OP_ERR
CALL IAPKEY_SET ; 允许IAP擦除/编程操作
MOV A,#04H ; 擦除扇区/页命令
MOV R7,#01H ; 擦除扇区为01H,页为00H
MOV R4,#HIGH(OPADR) ; 取出OPADR的高8位
MOV R5,#LOW(OPADR) ; 取出OPADR的低8位
CALL PGM_MTP ; 若操作出错,则F0会置位
JNB F0,ERASE_SREND
SETB OP_ERR
ERASE_SREND: NOP
CPL LEDCON
MOV R6,#10
MOV R0,#DATA_BUF
MOV A,#5AH
LOAD_DATA: MOV @R0,A
INC R0
DJNZ R6,LOAD_DATA
WRITE_DATA: CALL IAPKEY_SET
MOV A,#00H
MOV R3,#10
MOV R4,#HIGH(OPADR) ; 设置编程地址高8位
MOV R5,#LOW(OPADR) ; 设置编程地址低8位
MOV R7,#DATA_BUF ; 数据缓冲区
CALL PGM_MTP ; 写数据
JNB F0,WRITE_DAEND
SETB OP_ERR
WRITE_DAEND: NOP
CPL LEDCON
MOV R6,#10
MOV DPTR,#OPADR
READ_DATA: MOV A,#07H
MOV R4,DPH
MOV R5,DPL
CALL PGM_MTP
MOV A,R7
INC DPTR
CJNE A,#5AH,DATA_ERR
DJNZ R6,READ_DATA
SJMP READ_END
DATA_ERR: SETB OP_ERR
DJNZ R6,READ_DATA
READ_END: NOP
JB OP_ERR,MAIN_L4 ; 若有操作出错,蜂鸣器不响
CLR BEEP
MAIN_L1: MOV R7,#5
MAIN_L2: MOV R6,#0
MAIN_L3: MOV R5,#0
DJNZ R5,$
DJNZ R6,MAIN_L3
DJNZ R7,MAIN_L2
SETB BEEP
MAIN_L4: SJMP $
; 名称:IAPKEY_SET
; 功能:IAP特许字设置
; 入口参数:无
; 占用资源:ACC、R0
IAPKEY_SET:
MOV R0,#0FFH
MOV @R0,#96H
RET
; 名称:HC595_SENDDAT
; 功能:向74HC595发送数据
; 入口参数:ACC 待发送的数据
; 占用资源:R7、CY
HC595_SENDDAT:
CLR HC595_CS
MOV R7,#8
HC595_SDL1: CLR HC595_CLK
RLC A ; 将要发送的数据最高位移入CY
MOV HC595_DAT,C ; 设置数据线
NOP
HC595_SDL2: SETB HC595_CLK
NOP
DJNZ R7,HC595_SDL1 ; 若数据未发送完毕,再次发送
SETB HC595_CS ; 输出显示数据
CLR HC595_CS ; 关闭74HC595
RET
END
; 注,程序中的JMP在汇编时被SJMP、AJMP或LJMP代替;CALL也会被ACALL、LCALL代替。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -