资源描述:
《PIC16F877 EEPROM读写实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、PIC16F877EEPROM每一个单元的读/写所用时间典型值为:4ms,最大值为8ms。在烧写每个EEPROM单元过程中,需要CPU插入等待时间,既可利用中断功能,也可利用软件查询方式来解决。在此我们利用了软件查询方式,循环检测WR烧写控制位兼烧写完成标志位。程序如下:;实战《16F877内部EEPROM读/写实验》;本实战的目的是让大家熟悉PIC16F87X内部EEPROM的读/写方法;项目实现的功能:对于地址为00H-3FH的64个EEPROM数据存储单元,分;别将数据0-63依次烧写进去,然后再循环读出,显示在LED数码管上;程序清单如下:;********************
2、****************INCLUDE"P16F877.INC"STATUSEQU3H;定义状态寄存器地址RP0EQU5H;定义页选位RP0的位地址RP1EQU6H;定义页选位RP1的位地址ZEQU2H;定义0状态位的位地址PORTCEQU7H;定义RC口数据寄存器地址PORTDEQU8HTRISCEQU87H;定义RC口方向控制寄存器地址TRISDEQU88HEECON1EQU18CH;定义写控制寄存器1的地址EECON2EQU18DH;定义写控制寄存器2的地址EEDATAEQU10CH;定义读/写数据寄存器地址EEADREQU10DH;定义读/写地址寄存器地址RDEQU0;定义
3、读启动控制位位地址WREQU1;定义写启动控制位位地址WRENEQU2;定义写使能控制位位地址EEPGDEQU7;定义访问目标选择控制位位址FEQU1;定义目标寄存器为RAM的指示符WEQU0;定义目标寄存器为W的指示符ADDREQU70H;定义地址变量DATA1EQU71H;定义数据变量;*************************************ORG0000H;NOP;放置一条ICD必须的空操作指令GOTOMAIN;ORG0008H;MAINBCFSTATUS,RP1;选体1为当前体BSFSTATUS,RP0;MOVLW00H;设定RC全部为输出MOVWFTRISC;B
4、SFSTATUS,RP1;体3为当前体CLRFADDR;地址变量清0CLRFDATA1;数据变量清0WRITEBSFSTATUS,RP1;选定体3BTFSCEECON1,WR;上一次写操作是否完成GOTO$-1;否!返回继续检测BCFSTATUS,RP0;选定体2MOVFADDR,W;取地址MOVWFEEADR;送地址寄存器MOVFDATA1,W;取数据MOVWFEEDATA;送数据寄存器BSFSTATUS,RP0;选定体3BCFEECON1,EEPGD;选定EEPROM为访问对向BSFEECON1,WREN;开放写操作使能控制MOVLW55H;MOVWFEECON2;送55H到寄存器EE
5、CON2(读写内部EEPROM,这句是固定的)MOVLW0AAH;MOVWFEECON2;送AAH到寄存器EECON2(读写内部EEPROM,这句是固定的)BSFEECON1,WR;启动写操作BCFEECON1,WREN;禁止写操作发生INCFDATA1,F;数据递增INCFADDR,F;地址递增MOVFADDR,W;XORLWD'64';将当前地址与64比较BTFSSSTATUS,Z;检测=64否GOTOWRITE;否!继续写后面单元READ1DECFADDR,F;地址递减BCFSTATUS,RP0;选体2为当前体BSFSTATUS,RP1;MOVFADDR,W;取地址MOVWFEEAD
6、R;送地址寄存器BSFSTATUS,RP0;选体3为当前体BCFEECON1,EEPGD;选定EEPROM为访问对象BSFEECON1,RD;启动读操作BCFSTATUS,RP0;体2为当前体MOVFEEDATA,W;取数据BCFSTATUS,RP1;体0为当前体MOVWFPORTC;送显LEDCALLDELAY;调用廷时子程序MOVFADDR,F;检测当前地址BTFSSSTATUS,Z;是否为0?是!跳一步GOTOREAD1;否!返回继续读出和显示READ2INCFADDR,F;地址递增BCFSTATUS,RP0;选体2为当前体BSFSTATUS,RP1;MOVFADDR,W;取地址MO
7、VWFEEADR;送地址寄存器BSFSTATUS,RP0;选体3为当前体BCFEECON1,EEPGD;选定EEPROM为访问对象BSFEECON1,RD;启动读操作BCFSTATUS,RP0;体2为当前体MOVFEEDATA,W;取数据BCFSTATUS,RP1;体0为当前体CALLLED_SHOW;送数码管显示CALLDELAY;调用廷时子程序MOVFADDR,W;检测当前地址与64比较XORLWD'64';BTFS