INCLUDE<P16F877.INC>
#INCLUDE"MAIN.INC"
#INCLUDE"LEDSN.INC"
#INCLUDE"DEL.INC"
#INCLUDE"KEYS.INC"
#INCLUDE"EEPROM.INC"
EADR EQU 31H
COUNT EQU 32H
ORG 00H
NOP
MAIN:
CALL MAINIT
MLP:
CALL DEL
BTFSS 2FH,0
GOTO MLP
CALL KEYS
CALL DISP
BCF 2FH,0
GOTO MLP
DELA
LEDNS
KEYFS
KEYSA
EPFLASH
KEYS:
MOVF KID,0
ADDWF PCL,1
KTAB:GOTO KEYEN
GOTO KEYDEL
GOTO KEYSCAN
GOTO KEYUP
GOTO KEYPROC
CLRF KID
RETLW 0
KEYPROC:
CLRF KID
MOVLW 0AH
SUBWF VAL,0
BTFSS STATUS,C
GOTO KEYNUM
ADDWF PCL,F
GOTO KEYA ;读数据并比较
GOTO KEYB ;清0
GOTO KEYC ;修改地址
GOTO KEYD ;写入新数据
GOTO KEYE ;--
GOTO KEYF ;--
CLRF VAL
RETLW 0
KEYA: ;AFUN
; MOVLW 0AH
; MOVWF DAT1
BTFSC 2FH,3
GOTO KAEXT
MOVLW DAT1
MOVWF FSR
MOVLW 6
MOVWF R0
KAL:CALL EPREAD
MOVF DAT,W
XORWF INDF,W
BNZ KAEXT
INCF ADR,F
DECFSZ R0,F
GOTO KAL
BSF 2EH,0
KAEXT:
RETLW 0
KEYB: ;BFUN
; MOVLW 0BH
; MOVWF DAT1
MOVLW 6
MOVWF R0
MOVLW DAT1
MOVWF FSR
CLRW
KBL:CLRF INDF
;MOVWF INDF,1
INCF FSR,F
DECFSZ R0,1
GOTO KBL
RETLW 0
KEYC: ;CFUN
; MOVLW 0CH
; MOVWF DAT1
BSF 2EH,1
MOVF EADR,0
MOVWF ADR
CALL EPREAD
XORLW .200
BNZ KCEXT
; CLRF EADR
MOVLW 7
ADDWF EADR,F
ADDWF ADR,F
KCEXT:
RETLW 0
KEYD:
; MOVLW 0DH
; MOVWF DAT1
BTFSS 2EH,1
GOTO KCEXT
MOVLW DAT1
MOVWF FSR
MOVLW 6
MOVWF R0
KDL:MOVF INDF,0
MOVWF DAT
CALL EPWRITE
INCF FSR,F
INCF ADR,F
DECFSZ R0,F
GOTO KDL
MOVF EADR,0
MOVWF ADR
MOVF COUNT,W
MOVWF DAT
CALL EPWRITE
INCF COUNT,F
BCF 2EH,1
RETLW 0
KEYE:
RETLW 0
KEYF:
RETLW 0
KEYNUM:
MOVLW DAT1
MOVWF FSR
MOVLW 2
MOVWF R1
MOVF VAL,0
MOVWF R0
KPL:
MOVF INDF,0
MOVWF KTMP
MOVF R0,0
MOVWF INDF
INCF FSR,1
MOVF INDF,0
MOVWF R0
MOVF KTMP,0
MOVWF INDF
INCF FSR,1
DECFSZ R1,1
GOTO KPL
KNEXT:
RETLW 0
MAINIT:
BANK1
MOVLW 0FH
MOVWF TD
CLRF TC
CLRF TB
BANK0
CLRF ADR
CLRF DAT
CLRF COUNT
MOVLW 7
MOVWF EADR
MOVLW 04H
MOVWF DAT1
MOVLW 6H
MOVWF DAT2
CLRF DAT3
CLRF DAT4
MOVLW 0FFH
MOVWF PB
MOVLW 0FFH
MOVWF PC
RETLW 0
END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
;EPROM=2 FLASH 读写操作
;EPROM=3 EEPROM AND FLASH 读写操作
;EECON1:18CH | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0
; EEPDG - - - WRERR WREN WR RD
;EECON2:18DH BANK3
;EEADR: 10DH BANK2
;EEDATA:10CH
#DEFINE EPROM 1
IF EPROM==1
ADR EQU 70H
DAT EQU 71H
ENDIF
IF EPROM==2
ADR EQU 70H
ADRH EQU 71H
DAT EQU 72H
DATH EQU 73H
ENDIF
IF EPROM==1
EPFLASH MACRO
;查询标志位,写入数据
;向EEPROM中写入一个字节
EPWRITE:
BANK3
BTFSC EECON1,WR ;
GOTO $-1
BANK2
MOVF ADR,W
MOVWF EEADR
MOVF DAT,W
MOVWF EEDATA
BANK3
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BSF INTCON,GIE
RETLW 0
;READ DATA EEPROM
;从EEPROM中读取一个字节
;读取数据前检测是否写入
EPREAD:
BANK3
BTFSC EECON1,WR
GOTO $-1
BANK2
CLRF DAT
MOVF ADR,W
MOVWF EEADR
BANK3
BCF EECON1,EEPGD
BSF EECON1,RD
BANK2
MOVF EEDATA,W
MOVWF DAT
RETLW 0
ENDM
ENDIF
;FLASH WRITE READ
IF EPROM==2
EPFLASH MACRO
;向FLASH中写入两个字节
FLWRITE:
BANK3
BTFSC EECON1,WR
GOTO $-1
BANK2
MOVF ADR,W
MOVWF EEADR
MOVF ADRH,W
MOVWF EEADRH
MOVF DAT,W
MOVWF EEDATA
MOVF DATH,W
MOVWF EEDATH
BANK3
BSF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
NOP
NOP
BCF EECON1,WREN
BSF INTCON,GIE
RETLW 0
;READ DATA EEPROM
;从FLASH中读取两个字节
FLREAD:
BANK3
BTFSC EECON1,WR
GOTO $-1
BANK2
CLRF DAT
CLRF DATH
MOVF ADR,W
MOVWF EEADR
MOVF ADRH,W
MOVWF EEADRH
BANK3
BSF EECON1,EEPGD
BSF EECON1,RD
NOP
NOP
BANK2
MOVF EEDATA,W
MOVWF DAT
MOVF EEDATH,W
MOVWF DATH
RETLW 0
ENDM
ENDIF
IF EPROM==3
EPFLASH MACRO
;EEPROM 写入操作
EPWRITE:
BANK3
BTFSC EECON1,WR
GOTO $-1
BANK2
MOVF ADR,W
MOVWF EEADR
MOVF DAT1,W
MOVWF EEDATA
BANK3
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BCF EECON1,WREN
BSF INTCON,GIE
RETLW 0
;READ DATA EEPROM
;从EEPROM中读取一个字节
EPREAD:
BANK2
MOVF ADR,W
MOVWF EEADR
BANK3
BCF EECON1,EEPGD
BSF EECON1,RD
BANK2
MOVF EEDATA,W
MOVWF DAT1
RETLW 0
;向FLASH中写入两个字节
EPWRITE:
BANK3
BTFSC EECON1,WR
GOTO $-1
BANK2
MOVF ADR,W
MOVWF EEADR
MOVF ADRH,W
MOVWF EEADRH
MOVF DAT1,W
MOVWF EEDATA
MOVF DAT2,W
MOVWF EEDATH
BANK3
BSF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
NOP
NOP
BCF EECON1,WREN
BSF INTCON,GIE
RETLW 0
;从FLASH中读取两个字节
EPREAD:
BANK2
MOVF ADR,W
MOVWF EEADR
MOVF ADRH,W
MOVWF EEADRH
BANK3
BCF EECON1,EEPGD
BSF EECON1,RD
NOP
NOP
BANK2
MOVF EEDATA,W
MOVWF DAT1
MOVF EEDATH,W
MOVWF DAT2
RETLW 0
ENDM
ENDIF
一周热门 更多>