单片机
返回首页

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
;*****************************************************

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章