新闻中心

EEPW首页>嵌入式系统>设计应用> PIC单片机内部EEPROM读写子程序(转贴)

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

作者: 时间:2011-02-18 来源:网络 收藏

;实战《内部EEPROM读写实验》
;本实战的目的是让大家熟悉PIC16F87X内部EEPROM的读写方法
;项目实现的功能:对于地址为00H-3FH的64个EEPROM数据存储单元,
;分别将数据0-63依次烧写进去,然后再循环读出,显示在8只LED发光二极管上
;PIC学习网陈学乾http://www.pic16.com
;程序文件名“MCD-EMP1.ASM”
;程序清单如下:
;************************************
STATUSEQU3H;定义状态寄存器地址
RP0EQU5H;定义页选位RP0的位地址
RP1EQU6H;定义页选位RP1的位地址
ZEQU2H;定义0状态位的位地址
PORTCEQU7H;定义RC口数据寄存器地址
TRISCEQU87H;定义RC口方向控制寄存器地址
EECON1EQU18CH;定义写控制寄存器1的地址
EECON2EQU18DH;定义写控制寄存器2的地址
EEDATAEQU10CH;定义读/写数据寄存器地址
EEADREQU10DH;定义读/写地址寄存器地址
RDEQU0;定义读启动控制位位地址
WREQU1;定义写启动控制位位地址
WRENEQU2;定义写使能控制位位地址
EEPGDEQU7;定义访问目标选择控制位位址
FEQU1;定义目标寄存器为RAM的指示符
WEQU0;定义目标寄存器为W的指示符
ADDREQU70H;定义地址变量
DATA1EQU71H;定义数据变量
;*************************************
ORG0000H;
NOP;放置一条ICD必须的空操作指令
GOTOMAIN;
ORG0008H;
MAIN
BCFSTATUS,RP1;选体1为当前体
BSFSTATUS,RP0;
MOVLW00H;设定RC全部为输出
MOVWFTRISC;
BSFSTATUS,RP1;体3为当前体
CLRFADDR;地址变量清0
CLRFDATA1;数据变量清0
WRITE
BSFSTATUS,RP1;选定体3
BTFSCEECON1,WR;上一次写操作是否完成
GOTO$-1;否!返回继续检测
BCFSTATUS,RP0;选定体2
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
MOVFDATA1,W;取数据
MOVWFEEDATA;送数据寄存器
BSFSTATUS,RP0;选定体3
BCFEECON1,EEPGD;选定EEPROM为访问对向
BSFEECON1,WREN;开放写操作使能控制
MOVLW55H;
MOVWFEECON2;送55H到寄存器EECON2(读写内部EEPROM,这句是固定的)
MOVLW0AAH;
MOVWFEECON2;送AAH到寄存器EECON2(读写内部EEPROM,这句是固定的)
BSFEECON1,WR;启动写操作
BCFEECON1,WREN;禁止写操作发生
INCFDATA1,F;数据递增
INCFADDR,F;地址递增
MOVFADDR,W;
XORLWD’64’;将当前地址与64比较
BTFSSSTATUS,Z;检测=64否
GOTOWRITE;否!继续写后面单元
READ1
DECFADDR,F;地址递减
BCFSTATUS,RP0;选体2为当前体
BSFSTATUS,RP1;
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
BSFSTATUS,RP0;选体3为当前体
BCFEECON1,EEPGD;选定EEPROM为访问对象
BSFEECON1,RD;启动读操作
BCFSTATUS,RP0;体2为当前体
MOVFEEDATA,W;取数据
BCFSTATUS,RP1;体0为当前体
MOVWFPORTC;送显LED
CALLDELAY;调用廷时子程序
MOVFADDR,F;检测当前地址
BTFSSSTATUS,Z;是否为0?是!跳一步
GOTOREAD1;否!返回继续读出和显示
READ2
INCFADDR,F;地址递增
BCFSTATUS,RP0;选体2为当前体
BSFSTATUS,RP1;
MOVFADDR,W;取地址
MOVWFEEADR;送地址寄存器
BSFSTATUS,RP0;选体3为当前体
BCFEECON1,EEPGD;选定EEPROM为访问对象
BSFEECON1,RD;启动读操作
BCFSTATUS,RP0;体2为当前体
MOVFEEDATA,W;取数据
BCFSTATUS,RP1;体0为当前体
MOVWFPORTC;送显LED
CALLDELAY;调用廷时子程序
MOVFADDR,W;检测当前地址与64比较
XORLWD’64’;
BTFSSSTATUS,Z;是否等于64
GOTOREAD2;否!返回继续读出和显示
GOTOREAD1;返回大循环起点
;******************************************
DELAY
MOVLW0;
MOVWF72H;将外层循环参数值256送外层循环寄存器
DELAY1
MOVLW0;将内层循环参数值256送内层循环寄存器
MOVWF73H;
DECFSZ73H,1;递减廷时程序
GOTO$-1;
DECFSZ72H,1;
GOTODELAY1;
RETURN
;********************************************
END
;*****************************************************

51单片机相关文章:51单片机教程


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理




评论


相关推荐

技术专区

关闭