这段程序用于读写PIC内部EEPROM,但我测试后,发现读出来的总是最后写入的数据,而不是根据地址读出的数据。
比如,写地址8,数据8;写地址9,数据9。但现在读地址8时,显示的仍然为9,请教一下到底是什么原因??
已经困扰我一个月时间了,一直找不到原因,谢谢各位指教,不盛感激。
#include <p18cxxx.h>/*18F系列单片机头文件*/
#include "toppic.h"/*TOPPIC开发板头文件*/
#include "delay.h"/*爱晶电子提供的延时头文件*/
/*0-F共阴字形码表*/
const rom uchar sz[17]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 ,
0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71 , 0x00};
//EEPROM写数据函数
int WriteEE(int addr,int data)
{
do{}
while(EECON1bits.WR == 1);//等待写完成
EEADR=addr;//写入地址信息
EEDATA=data;//写入数据信息
EECON1bits.EEPGD = 0;//操作EEPROM
EECON1bits.WREN = 1; //写EEPROM允许
EECON2 = 0x55;//写入特定时序
EECON2 = 0xaa;
EECON1bits.WR=1; //执行写操作
do{}
while(EECON1bits.WR == 1);//等待写完成
EECON1bits.WREN = 0;//禁止写入EEPROM
}
//EEPROM读数据函数
int ReadEE(int address)
{
int num;
do{}
while(EECON1bits.RD == 1);//等待读完成
EEADR=address;//写入要读的址址
EECON1bits.EEPGD = 0;//操作EEPROM
EECON1bits.RD = 1;//执行读操作
do{}
while(EECON1bits.RD==1);//等待读完成
return (EEDATA); //返回读取的数据
}
void main(void) //主函数
{
int k,shu;
toppic_init(); /*TOPPIC开发板初始化*/
COL1=1;/*选中4位数码管的最右边一位*/
WriteEE(8,8); //循环调用EEPROM写函数,向地址为0~7的写入1~8
WriteEE(8,8); //循环调用EEPROM写函数,向地址为0~7的写入1~8
while(1)
{
shu=ReadEE(8);
PORTD=sz[shu];/*送出欲显示数的字形码*/
}
} |