PIC单片机内部EEPROM读写子程序(转贴)

发布者:幸福时光最新更新时间:2011-02-18 手机看文章 扫描二维码
随时随地手机看文章

;实战《内部EEPROM读写实验》
;本实战的目的是让大家熟悉PIC16F87X内部EEPROM的读写方法
;项目实现的功能:对于地址为00H-3FH的64个EEPROM数据存储单元,
;分别将数据0-63依次烧写进去,然后再循环读出,显示在8只LED发光二极管上
;PIC单片机学习网  陈学乾  http://www.pic16.com  
;程序文件名“MCD-EMP1.ASM”
;程序清单如下:
;************************************
STATUS   EQU 3H       ;定义状态寄存器地址
RP0      EQU 5H       ;定义页选位RP0的位地址
RP1      EQU 6H       ;定义页选位RP1的位地址
Z        EQU 2H       ;定义0状态位的位地址
PORTC    EQU 7H       ;定义RC口数据寄存器地址
TRISC    EQU 87H      ;定义RC口方向控制寄存器地址
EECON1   EQU 18CH     ;定义写控制寄存器1的地址
EECON2   EQU 18DH     ;定义写控制寄存器2的地址
EEDATA   EQU 10CH     ;定义读/写数据寄存器地址
EEADR    EQU 10DH     ;定义读/写地址寄存器地址
RD       EQU  0       ;定义读启动控制位位地址
WR       EQU  1       ;定义写启动控制位位地址
WREN     EQU  2       ;定义写使能控制位位地址
EEPGD    EQU  7       ;定义访问目标选择控制位位址
F        EQU  1       ;定义目标寄存器为RAM的指示符
W        EQU  0       ;定义目标寄存器为W的指示符
ADDR     EQU  70H     ;定义地址变量
DATA1    EQU  71H     ;定义数据变量
;*************************************
    ORG     0000H        ;
    NOP                  ;放置一条ICD必须的空操作指令
    GOTO    MAIN         ;
    ORG     0008H        ;
MAIN
    BCF     STATUS,RP1   ;选体1为当前体
    BSF     STATUS,RP0   ;
    MOVLW   00H          ;设定RC全部为输出
    MOVWF   TRISC        ;
    BSF     STATUS,RP1   ;体3为当前体
    CLRF    ADDR         ;地址变量清0
    CLRF    DATA1        ;数据变量清0
WRITE
    BSF     STATUS,RP1   ;选定体3
    BTFSC   EECON1,WR    ;上一次写操作是否完成
    GOTO    $-1          ;否!返回继续检测
    BCF     STATUS,RP0   ;选定体2
    MOVF    ADDR,W       ;取地址
    MOVWF   EEADR        ;送地址寄存器
    MOVF    DATA1,W      ;取数据
    MOVWF   EEDATA       ;送数据寄存器
    BSF     STATUS,RP0   ;选定体3
    BCF     EECON1,EEPGD ;选定EEPROM为访问对向
    BSF     EECON1,WREN  ;开放写操作使能控制
    MOVLW   55H         ;
    MOVWF   EECON2       ;送55H到寄存器EECON2(读写内部EEPROM,这句是固定的)
    MOVLW   0AAH         ;
    MOVWF   EECON2       ;送AAH到寄存器EECON2(读写内部EEPROM,这句是固定的)
    BSF     EECON1,WR    ;启动写操作
    BCF     EECON1,WREN  ;禁止写操作发生
    INCF    DATA1,F      ;数据递增
    INCF    ADDR,F       ;地址递增
    MOVF    ADDR,W       ;
    XORLW   D’64’        ;将当前地址与64比较
    BTFSS   STATUS,Z     ;检测=64否
    GOTO    WRITE        ;否!继续写后面单元
READ1
    DECF    ADDR,F       ;地址递减
    BCF     STATUS,RP0   ;选体2为当前体
    BSF     STATUS,RP1   ;
    MOVF    ADDR,W       ;取地址
    MOVWF   EEADR        ;送地址寄存器
    BSF     STATUS,RP0   ;选体3为当前体
    BCF     EECON1,EEPGD  ;选定EEPROM为访问对象
    BSF     EECON1,RD     ;启动读操作
    BCF     STATUS,RP0    ;体2为当前体
    MOVF    EEDATA,W      ;取数据
    BCF     STATUS,RP1    ;体0为当前体
    MOVWF   PORTC         ;送显LED
    CALL    DELAY         ;调用廷时子程序
    MOVF    ADDR,F        ;检测当前地址
    BTFSS   STATUS,Z      ;是否为0?是!跳一步
    GOTO    READ1         ;否!返回继续读出和显示
READ2 
    INCF    ADDR,F        ;地址递增
    BCF     STATUS,RP0    ;选体2为当前体
    BSF     STATUS,RP1    ;
    MOVF    ADDR,W        ;取地址
    MOVWF   EEADR         ;送地址寄存器
    BSF     STATUS,RP0     ;选体3为当前体
    BCF     EECON1,EEPGD   ;选定EEPROM为访问对象
    BSF     EECON1,RD      ;启动读操作
    BCF     STATUS,RP0     ;体2为当前体
    MOVF    EEDATA,W       ;取数据
    BCF     STATUS,RP1     ;体0为当前体
    MOVWF   PORTC          ;送显LED
    CALL    DELAY          ;调用廷时子程序
    MOVF    ADDR,W         ;检测当前地址与64比较
    XORLW   D’64’          ;
    BTFSS   STATUS,Z       ;是否等于64
    GOTO    READ2          ;否!返回继续读出和显示
    GOTO    READ1          ;返回大循环起点
;******************************************
DELAY
    MOVLW    0             ;
    MOVWF    72H           ;将外层循环参数值256送外层循环寄存器
DELAY1
    MOVLW     0            ;将内层循环参数值256送内层循环寄存器
    MOVWF    73H           ;
    DECFSZ   73H,1         ;递减廷时程序
    GOTO     $-1           ;
    DECFSZ   72H,1         ;
    GOTO     DELAY1        ;
    RETURN
;********************************************
    END
;*****************************************************

引用地址:PIC单片机内部EEPROM读写子程序(转贴)

上一篇:常用PIC系列8位单片机芯片引脚符号的功能
下一篇:用定制测量表达式简化PSpice对最坏情形的模拟

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

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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