PIC16F877单片机内部EEPROM读写实例
扫描二维码
随时随地手机看文章
;PIC16F877单片机内部EEPROM读写实例****************************************************************************************
; This is a program to test the function of reading&writting for EEPROM.
; YouCANOBServe the value of register(30H--?) buy changing "VALU" and "WRC_".
; Notice that:it must be { ADDR+WRC_<=0ffh } !
; ;****************************************************************************************
include "p16f877.inc"
ADDR EQU 20H ;写入地址寄存器
VALU EQU 21H ;写入值
REC_ EQU 22H ;读计数
WRC_ EQU 24H ;写计数
ORG 0000H ;
NOP ;放置一条ICD必须的空操作指令
GOTO main ;
;ORG 0008H ;
;org 0
;goto main
main nop
bcf STATUS,RP1
bcf STATUS,RP0 ;bank0
movlw 20h
movwf ADDR ;写入EEPROM初始值
;********************************************************************************************
clrf 8
bcf STATUS,2
DS2 nop
call DELAY
incf 8,1
movf 8,0
bcf STATUS,2
XORLW 0bh
btfss STATUS,Z
goto DS1
clrf 8
bcf STATUS,2
DS1 movf 8,0
bcf STATUS,2
call TABLE1
;***********************************************************************************************
;movlw 4fh
movwf VALU ;初始写入值
movlw 30h
movwf FSR ;间址,读出值初始存放地址
movlw 0Bh
movwf WRC_ ;写入次数
movwf REC_
;incf REC_ ;读出次数
wri_ ;写子程序
bsf STATUS,RP1
bsf STATUS,RP0 ;bank3
btfsc EECON1,WR
goto $-1
bcf STATUS,RP0
bcf STATUS,RP1 ;bank0
movf ADDR,W
bsf STATUS,RP1 ;bank2
movwf EEADR
bcf STATUS,RP1 ;bank0
movf VALU,W
bsf STATUS,RP1 ;bank2
movwf EEDATA
bsf STATUS,RP0 ;bank3
bcf EECON1,EEPGD ;to data memory
bsf EECON1,WREN
bcf INTCON,GIE
movlw 55h
movwf EECON2
movlw 0aah
movwf EECON2
bsf EECON1,WR
btfsc EECON1,WR
goto $-1
bsf INTCON,GIE
bcf EECON1,WREN
bcf STATUS,RP0
bcf STATUS,RP1 ;bank0
incf ADDR,1
;incf VALU,1
;decf VALU,1
decfsz WRC_ ;all write,to read_
;goto wri_
goto DS2
read_ ;读子程序
call TABLE1
bcf STATUS,RP1
bcf STATUS,RP0 ;bank0
decf ADDR ;next value
movf ADDR,W
bsf STATUS,RP1 ;bank2
movwf EEADR
bsf STATUS,RP0 ;bank3
bcf EECON1,EEPGD
bsf EECON1,RD
bcf STATUS,RP0 ;bank2
movf EEDATA,W
bcf STATUS,RP1 ;bnak0
movwf INDF ;存读出值
incf FSR
decfsz REC_
goto read_
goto main
;*******************************************************************************
TABLE1 ;取第二行的显示码TEL0755 27528531
ADDWF 2 ;地址偏移量加当前PC值
RETLW 30H ;0
RETLW 32H ;2
RETLW 30H ;0
RETLW 33H ;3
RETLW 33H ;3
RETLW 31H ;1
RETLW 36H ;6
RETLW 30H ;0
RETLW 30H ;0
RETLW 30H ;0
RETLW 33H ;3
;*******************************************************************************
DELAY
MOVLW 0FF
MOVWF 11
DTLAY1 DECFSZ 11
GOTO DTLAY1
RETLW 0
;*******************************************************************************
end
EEw&r.asm程序说明:
1、 本程序是对PIC16F877 单片机 的EEPROM数据区进行读写的演示程序;
2、 wri_为写入数据子程序,该子程序从ADDR寄存器确定的地址开始对EEPROM数据区写入(范例从10H开始),每进行一次写操作将使ADDR值加一;
写入数据的初始值由VALU寄存器给定(范例值为90H),每进行一次写操作将使VALU值减一;写入规定个数(由WRC_寄存器给定,范例值为0FH)的
数值后,结束写入,转至read_。
3、 read_为读出数据子程序,该子程序从ADDR寄存器当前值确定的地址开始对EEPROM数据区读出(当前值=ADDR+WRC_<=0FFH),每进行一次读操
作将使ADDR值减一;读出数据后程序将把该数据存入通用寄存器中,开始存放的地址由FSR的值指定(范例为30H),每进行一次读操作将使FSR的值
加一;读出规定个数(由寄存器REC_给定,范例值为0FH)的数值后,结束读出,回main。