51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > PIC单片机 > 详细内容
pic单片机内部EEPROM读写实验
发布时间:2009/7/17  阅读次数:935  字体大小: 【】 【】【
;**************************************************
   __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;************************************
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     D64               ;将当前地址与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     D64                   ;
       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
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号