新闻  |   论坛  |   博客  |   在线研讨会
PIC读写EEPROM实例及说明
zhchxgh | 2009-07-04 00:40:46    阅读:1010   发布文章

PIC读写EEPROM实例及说明
  
  ;****************************************************************************************
;  This is a program to test the function of reading&writting for EEPROM. 
; You can observe the value of register(30H--?) buy changing "VALU" and "WRC_". 
;      Notice that:it must be { ADDR+WRC_<=0ffh } !
;              Written by Yamato.:)
;****************************************************************************************
 include  "p16f877.inc"
ADDR EQU 20H ;写入地址寄存器
VALU EQU 21H ;写入值
REC_ EQU 22H ;读计数
WRC_ EQU 24H ;写计数
 org 0
 goto main
main    
 bcf STATUS,RP1
 bcf STATUS,RP0 ;bank0
 movlw 10h
 movwf ADDR  ;写入EEPROM初始值
 movlw 90h
 movwf VALU  ;初始写入值
 movlw 30h
 movwf FSR  ;间址,读出值初始存放地址
 movlw 0Fh
 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
 decf VALU,1
 decfsz WRC_   ;all write,to read_
 goto wri_
read_     ;读子程序
 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
 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。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客