读写PIC16F877內部EEPROM的实例

发布者:电子创新者最新更新时间:2016-11-17 来源: eefocus关键字:PIC16F877  內部EEPROM 手机看文章 扫描二维码
随时随地手机看文章
//**********************************************写入1字节到eerom********************************//////
void write_eprom(unsigned char date,unsigned char addr)
{
while(wr==1);//等待写周期完成
eeadr=addr;//准备要写入的地址
eedata=date;//准备要写入的数据
eepgd=0;//to data memory
wren=1;//允许写
gie=0;
eecon2=0x55;
eecon2=0xaa;
wr=1;//启动写周期
while(wr==1);//等待写周期完成
gie=1;
wren=0;
}
//****************************************************读取设定值**********************************************
unsigned char read_eprom(unsigned char addr)
{
eeadr=addr;
eepgd=0;
rd=1;
return eedata;
}



 

LIST  P=16f877
    #i nclude    
;
;- RAM LOCATIONS------
;
; Reserve RAM location 0x70 for ICD
;
Data_EE_Addr    equ    0X71
Data_EE_Data    equ    0X72

;--------VECTORS------------

          org    0x0 
  nop
          goto   START

;-------PROGRAM--------------
   
          org   0X20
START
         call    INIT
;
;----   Test the WRITE EEPROM Routine ----
;
  movlw 0x0
  movwf Data_EE_Addr
  movlw '0'    ; Load a ASCII code "0" to W
  movwf Data_EE_Data
EE_Write
  call WRITE_EEPROM
  incf Data_EE_Data,F ; 0x30+ N
  incf Data_EE_Addr,F  ; Point to next EEPROM Address
  btfss Data_EE_Addr,5 ; Write 32 bytes ?
  goto EE_Write
;
;----   Test the READ EEPROM Routine ----
;
  movlw 0x20  ; Get back EEPROM data to RAM with start addr at 0x20
  movwf FSR
;  
  movlw 0x0  ; Point to EEPROM start address at 0x00
  movwf Data_EE_Addr
EE_Read
  call READ_EEPROM ; Read EEPROM data with curent address to W registre
  movwf INDF  ; move W --> RAM 
;
  incf FSR,F
  incf Data_EE_Addr,F  ; Point to next EEPROM Address
  btfss Data_EE_Addr,6 ; Read 32 bytes ?
  goto EE_Read
;    
         GOTO    $   
;
;------ INTERNAL EEPROM READ ------
;
READ_EEPROM
  banksel EEADR
  movf Data_EE_Addr,W  ; Load EEPROM Address into Pointer
  movwf EEADR
;
;       bcf     INTCON,GIE  
  banksel EECON1
  bcf EECON1,EEPGD
  bsf EECON1,RD
;
  banksel EEDATA
  movf EEDATA,W
;        bsf     INTCON,GIE  
;
  banksel PORTA
  return

;----INTERNAL EEPROM WRITE-----
;
WRITE_EEPROM
  banksel EEADR  
  movf Data_EE_Addr,W  ; Load EEPROM Address & Data into Register
  movwf EEADR
  movf Data_EE_Data,W
  movwf EEDATA
;  
  banksel EECON1
  bcf EECON1,EEPGD  ; Selected Data EEPROM for Writing
  bsf EECON1,WREN  ; Enable write function

;  bcf INTCON,GIE  ; Disable Interrupt

  movlw 0x55   ; Write Sequence control 
  movwf EECON2 
  movlw 0xAA
  movwf EECON2 
   
  bsf EECON1,WR  ; Start EEPROM write operation
;
;  bsf INTCON,GIE  ; Enable Interrupt (If used interrupt )
  bcf EECON1,WREN  ; Disable write EEPROM  
;
  btfsc EECON1,WR  ; Waiting for writing completed (4mS)
  goto $-1   ; During write period, must hold both EEADR & EEDATA until complete
;
  banksel PORTA
  return  
;
;---------INITIAL----------------
INIT      
         BCF     PIR2,EEIF
  banksel PIE2
           BCF     PIE2,EEIE
          RETURN
;--------------------------------
             END  


关键字:PIC16F877  內部EEPROM 引用地址:读写PIC16F877內部EEPROM的实例

上一篇:PIC的配置位
下一篇:用PIC16F877A单片机驱动按键控制8个数码管的显示的C程序

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved