📄 mrtof.asm
字号:
;********************MRTOF********************
;本程序实现从内部RAM传送多字节数据到内部FLASH。
;入口参数:原操作数的地址放在SADR中,目标FLASH的地址放在SADRH:DADR中,字节数在W中。
;出口参数:相关数据已写入指定FLASH单元中。
;占用资源:W,STATUS,FSR,020H,021H,022H,023H,一重堆栈。
;说 明:字节数W一定为偶数
IFNDEF MRTOF1
#DEFINE MRTOF1
MRTOF MOVWF CNT
BCF STATUS,C
RRF CNT,F ;一个FLASH单元占用2个字节
MOVF SADR,W
MOVWF FSR ;RAM单元首地址
BANKSEL PIE2
BCF PIE2,EEIE ;关闭EE中断
BANKSEL EECON1
BSF EECON1,EEPGD ;读写FLASH
BCF STATUS,RP0
BCF STATUS,RP1
MOVF DADR,W
BSF STATUS,RP1
MOVWF EEADR
BCF STATUS,RP1
MOVF SADRH,W
BSF STATUS,RP1
MOVWF EEADRH ;将目标地址写入EEADR
LOOP100 MOVF INDF,W
MOVWF EEDATA
INCF FSR,F
MOVF INDF,W
MOVWF EEDATH ;将源数据写入FLASH
BSF STATUS,RP0
BSF EECON1,WREN ;写允许
BCF INTCON,GIE ;关闭中断
MOVLW 55H ;MICROCHIP
MOVWF EECON2 ;规
MOVLW 0XAA ;定
MOVWF EECON2 ;代码
BSF EECON1,WR ;开始写入
NOP
NOP
BSF INTCON,GIE ;开放中断
BCF EECON1,WREN ;写保护
BTFSC EECON1,WR ;写完了吗?
GOTO $-1
INCF FSR,F ;写下一个数据
BCF STATUS,RP0
INCF EEADR,F
BCF STATUS,RP1
DECFSZ CNT,F ;所有的数据写完了吗?
GOTO NEXT64
RETURN
NEXT64 BSF STATUS,RP1
GOTO LOOP100
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -