pic单片机c语言读eeprom,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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值