论坛风格切换切换到宽版
  • 7241阅读
  • 20回复

PIC16F877A读写EEPROM的问题 [复制链接]

上一主题 下一主题
离线bg5baw
 
发帖
673
只看楼主 倒序阅读 0楼 发表于: 2006-06-05
近日根据pic16f877a的芯片手册实验了定时器,计数器,ad转换,等等功能,还算顺利,但对与eeprom的读写不成功.我把一小段程序发到这里,欢迎各地做过的高手前来指点.先谢谢各位了.
测试程序用c语言编写,用汇编语言没试.
red(char b10 ,char b11 ,char b12,char b13)//读两个字节eeprom程序
{

eeadrh=b11;
eeadr=b10;//选中地址的高低位
eepgd=0;//选中eeprrom
rd=1;
delay(5,5);//少量廷时
b13=eedath;
b12=eedata;//读取高低数据分别存在eedath,eedata中.b10.b11中}

}
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
write(char a12,char a13,char a14,char a15)//写两个字节到eeprom程序
{
a13=eeadrh;//高位地址
a12=eeadr;//选中地址的高低位
a15=eedath;//要写入的高位数据
a14=eedata;//要写入的低位数据
eepgd=0;//选中eeprpom
wren=1;//开始写入
gie=0;//先关中断
eecon2=0x55;
eecon2=0xaa;
wr=1;//写入
delay(5,5);//
gie=1;//开回中断
wren=0;//清0,为准备下次写入
}
//////////////////////////////////////////////////////
离线xiongjunfeng
发帖
1220
只看该作者 1楼 发表于: 2006-06-05
搞这么复杂?用的那种c编译器啊?picc中有eeprom的读写函数,直接用就行了。
离线bg5baw
发帖
673
只看该作者 2楼 发表于: 2006-06-05
'
搞这么复杂?用的那种c编译器啊?picc中有eeprom的读写函数,直接用就行了。
'


我可是老老实实边看芯片手册边编写功能函数,一步一步走过来呀!写了大量的功能函数,其它的功能都达到预想效果,可就是eeprom读写不成功,编译能通过,工作时数据写不进eeprom,时序我看了很多遍,自己感觉没错,困惑中就上传这里了。

编译器用的是picc8.05,有现成读写函数吗?读写函数在哪里?还有哪些函数?请回贴!谢谢!
离线elecele
发帖
894
只看该作者 3楼 发表于: 2006-06-05
//***********************************************************************************
unsigned char readee(unsigned char adr)
{
eeadr=adr;
rd=1;
return(eedata);
}
//***********************************************************************************
void writeee(unsigned char data,unsigned char adr)
{
eeadr=adr;
eedata=data;
wren=1;
eecon2=0x55;
eecon2=0xaa;
wr=1;
}
////***********************************************************************************

这是我写的函数供参考,可以用在12f675上没有问题。
离线elecele
发帖
894
只看该作者 4楼 发表于: 2006-06-05
写入时是否应当先关中断在开始。



wren=1;//开始写入
gie=0;//先关中断


是不是上两行顺序反了。
离线elecele
发帖
894
只看该作者 5楼 发表于: 2006-06-05
'
我可是老老实实边看芯片手册边编写功能函数,一步一步走过来呀!写了大量的功能函数,其它的功能都达到预想效果,可就是eeprom读写不成功,编译能通过,工作时数据写不进eeprom,时序我看了很多遍,自己感觉没错,困惑中就上传这里了。
编译器用的是picc8.05,有现成读写函数吗?读写函数在哪里?还有哪些函数?请回贴!谢谢!
'


在pic.h里。
离线bg5baw
发帖
673
只看该作者 6楼 发表于: 2006-06-05
'
写入时是否应当先关中断在开始。
wren=1;//开始写入
gie=0;//先关中断
是不是上两行顺序反了。
'


bg7igq:你好!
      谢谢你!热心的朋友!根据芯片资料应该是wren=1在前面,刚才我换了顺序试了,还是写不了eeprom;在想不到解决办法前,还是打算改成汇编试试,因为c语言出了有些问题无法解释.
离线BG4XDO
发帖
1124
只看该作者 7楼 发表于: 2006-06-05
是不是延时不够长,我用24C时遇过,编译正常,软件运行没问题,就是真正运行不行.
离线xiongjunfeng
发帖
1220
只看该作者 8楼 发表于: 2006-06-05
'
bg7igq:你好!
      谢谢你!热心的朋友!根据芯片资料应该是wren=1在前面,刚才我换了顺序试了,还是写不了eeprom;在想不到解决办法前,还是打算改成汇编试试,因为c语言出了有些问题无法解释.
'
在picc中的说明文档中有,下面两个函数
eeprom_read(adress)读一个字节
eeprom_write(adress,data)写一个字节
我一直这样用,好象很好啊
离线elecele
发帖
894
只看该作者 9楼 发表于: 2006-06-05
__config的配置是否eeprom保护。
离线elecele
发帖
894
只看该作者 10楼 发表于: 2006-06-05
'
在picc中的说明文档中有,下面两个函数
eeprom_read(adress)读一个字节
eeprom_write(adress,data)写一个字节
我一直这样用,好象很好啊
'

楼主好象不是读写eeprom,而是在读写程序区。
离线bg5baw
发帖
673
只看该作者 11楼 发表于: 2006-06-05
'
__config的配置是否eeprom保护。
'

已经把wrt设为1了,把地址设为0000h---00ffh,应该不会有问题,在自己的编程器的界面上就有这一项选择,只要选上这一项,就不要持意写-config了。我把延时时间调一下,(说明上是三个时钟周期),再看一下结果。
离线bg5baw
发帖
673
只看该作者 12楼 发表于: 2006-06-05
'
在pic.h里。
'


谢谢!我移过来试一下
离线elecele
发帖
894
只看该作者 13楼 发表于: 2006-06-05
//写flash rom 实验通过。程序运行过后0x180,就有0x166写入。

#include      <pic.h>;

__config ( 0x3f39);

//***********************************************************************************

main()                                    //主程序
{
int adr,data;
adr=0x180;
data=0x166;
flash_write(adr,data);


     while(1){                        //主循环
           }//end while(1)
}//end main()

//****************************************************************
离线bg5baw
发帖
673
只看该作者 14楼 发表于: 2006-06-06
夜渐渐的深了,现在是凌晨1点多了,噪杂的城市变得静悄悄,经过连续几个小时的反复实验问题终于得到解决,总算可以睡个安心觉了,谢谢朋友们回帖支持!原因就是延时的问题,不要加延时就正常。加了很少的延时就无法工作。
离线BG4XDO
发帖
1124
只看该作者 15楼 发表于: 2006-06-06
恭喜!我当时因为延时也搞了好几个小时
离线elecele
发帖
894
只看该作者 16楼 发表于: 2006-06-06
'
夜渐渐的深了,现在是凌晨1点多了,噪杂的城市变得静悄悄,经过连续几个小时的反复实验问题终于得到解决,总算可以睡个安心觉了,谢谢朋友们回帖支持!原因就是延时的问题,不要加延时就正常。加了很少的延时就无法工作。
'
这好象无法解释得通。
离线bg5baw
发帖
673
只看该作者 17楼 发表于: 2006-06-06
'
这好象无法解释得通。
'
得出正确的结论应该是:除eepgd在读写不同rom有不同设置外,读写falsh rom要加廷时(三个时钟周期),读写eeprom 不要加廷时。
离线bellstudio
发帖
2820
只看该作者 18楼 发表于: 2006-06-07
写入一个字节的eeprom大概需要4ms。。。。你的延时太短吧,查标志位不错

flash读写比eeprom快多了
离线bg5baw
发帖
673
只看该作者 19楼 发表于: 2006-06-07
'
写入一个字节的eeprom大概需要4ms。。。。你的延时太短吧,查标志位不错
flash读写比eeprom快多了
'


你好!
    是太长了,读写eeprom不能加延时