搜索
bottom↓
回复: 13

PIC单片机EEPROM有时能写进去有时写不进去

[复制链接]

出0入0汤圆

发表于 2013-9-26 09:30:35 | 显示全部楼层 |阅读模式
本帖最后由 lijiwangpu 于 2013-9-26 09:33 编辑

#include <pic.h>         //使用单片机PIC16F628A
//#define uchar unsigned char
unsigned char hour1;
//#define                SOFT_VALUE 250 //(140-1) //0-69
void tmint(void)  //PIC16F628A定时器0初始化函数4ms计一次
{
T0CS=0;
PSA=0;
PS2=0;
PS1=1;   //1:16  4M晶振16us计一次 250次计时4ms
PS0=1;
//PSA=0;
TMR0=6;
T0IF=0;
T0IE=1;
//PEIE=0;
}
void t1mint()  //PIC16F688定时器1初始化函数 总计500ms
{
TMR1H=0x0B;
TMR1L=0xDC;
T1CON=0b00110101;  //(FOSC/4)  8分频
PSA=0;
TMR1IF=0;
TMR1IE=1;
PEIE=1;
}
void interrupt ISR(void)
{
   if(T0IF&&T0IE)  //4M晶振计时4ms
   {
    T0IF=0;
    TMR0=6;
   
   }
   if(TMR1IF&&TMR1IE) //4M晶振计时500ms
   {
    TMR1IF=0;
    TMR1H=0x0B;
    TMR1L=0xDC;
    if(PORTA==0xff)
        PORTA=0x00;
    if(PORTA==0x00)
        PORTA=0xff;
   }
}
void IO_init(void)
{
    CMCON=0x00;
    TRISA=0x00;
    TRISB=0x00;
}
unsigned char eeprom_read(unsigned char EEAddr)
{
unsigned char ReEEPROMread;
EEADR = EEAddr;
//EECON1 |= 0b00000001;
//CFGS = 0;   //PIC18F中要用到
//GIE = 0;
RD = 1;
//NOP();
hour1 = EEDATA;  //EEPROM的读数据
RD = 0;
//GIE = 1;

return ReEEPROMread;
}
void eeprom_write_shuju(unsigned char EEAddr2)
{
EEADR = EEAddr2;   //EEPROM的地址
EEDATA = 1;   //EEPROM的写数据
  
//EEPGD = 0;
//CFGS = 0;    //PIC18F中要用到
GIE = 0;
WREN = 1;

EECON2 = 0x55;            //必须按这样的时序
EECON2 = 0xAA;
WR = 1;
while(WR==1);   //等待写操作完成
GIE = 1;
WREN = 0;
}
void vari()
{
   hour1=0;
}
main()
{

IO_init();
vari();
tmint();
t1mint();
GIE=1;
eeprom_write_shuju(0);
while(1)                                            
{
   
}
}  


简单程序如上
往EEPRoM地址0写入数据1,却有时能写进去有时写不进去,不知是何原因
使用单片机型号PIC16F628A

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-9-26 09:45:19 | 显示全部楼层
  1. 读eeprom函数没有调用,返回的变量搞错了
  2. 排版有点乱
复制代码

出0入0汤圆

 楼主| 发表于 2013-9-26 09:56:30 | 显示全部楼层
tragedy 发表于 2013-9-26 09:45

我是用MPLAB 8.8版本读出芯片代码,导出到一个文件夹,再用上传图片中的这个烧录软件打开这个代码看EEPROM中的数据的,发现不对的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-9-26 09:30:36 | 显示全部楼层
你是不是EEPROM保护打开了
另外5v供电是不是正常

出0入0汤圆

发表于 2013-9-27 10:42:17 | 显示全部楼层
你的程序有問題,在讀的部份。

出0入0汤圆

发表于 2013-9-27 10:46:34 | 显示全部楼层
可参考PICC里自带EEROM.H文件来检查,或者直接使用库函数

出0入0汤圆

 楼主| 发表于 2013-9-27 13:04:51 | 显示全部楼层
恩,程序有问题,还有5V电源也不稳。现在已经好了

出0入0汤圆

发表于 2013-9-27 15:14:51 | 显示全部楼层
试下写时每个指令延时长点.

出0入0汤圆

发表于 2013-9-29 08:46:56 | 显示全部楼层
lijiwangpu 发表于 2013-9-27 13:04
恩,程序有问题,还有5V电源也不稳。现在已经好了

问题找到了,可以说一下么,这样可以为后来的人借鉴.............

出10入10汤圆

发表于 2013-9-29 08:57:57 | 显示全部楼层
用PICC编译器提供的函数:
i = eeprom_read(EEPROM_ADD);
eeprom_write(EEPROM_ADD,i);

出0入0汤圆

 楼主| 发表于 2013-10-8 16:28:33 | 显示全部楼层
RainKing 发表于 2013-9-29 08:46
问题找到了,可以说一下么,这样可以为后来的人借鉴.............

现在正常了。主要是5V电源不稳

出0入0汤圆

 楼主| 发表于 2013-10-8 16:29:16 | 显示全部楼层
谢谢诸位指点

出0入0汤圆

 楼主| 发表于 2013-10-8 16:32:24 | 显示全部楼层
还有就是LVP使能了,致使有些功能不正常,禁掉就各种功能正常了

出0入0汤圆

发表于 2013-10-8 22:16:06 | 显示全部楼层
一般的问题都是出在写eeprom时的间隔时间太短造成
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-26 02:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表