打印

PIC16F877A写E2PROM时间长短的问题

[复制链接]
2029|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qianlong30|  楼主 | 2010-6-22 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的程序有一工作,长按A键,CPU则将一组常数(56个数)保存到PIC16F877A的E2PROM

中.再从E2PROM中将这56个数调入内存中的静态数组.

现在存在问题: 重复按A键时,上述工作执行的时间不同(从显示LED上能看出执行的时

间),有时按下A键后约2秒上述工作就完成,有时按下A键后却要等12秒才能完成上述工作.

能排除不是CPU执行中断程序.

是什么原因?
沙发
XIEYUANBIN| | 2010-6-23 08:37 | 只看该作者
5mS一次,你自己算了。

使用特权

评论回复
板凳
Beatachen| | 2010-6-23 12:30 | 只看该作者
一般EEPROM 写入一个字节大概需要5mS时间,56个字节需要280mS时间.再加上程序其它时间.

使用特权

评论回复
地板
qianlong30|  楼主 | 2010-6-24 00:01 | 只看该作者
我知道大约5MS一个字节,我不明白的是,CPU运行相同的程序两,执行写E2PROM,然后执行读E2PROM,怎么有时是2秒,有时却要用12秒,差6倍的时间,CPU干什么去了(中断仅扫描键盘和LED)?

void e2prom_r()     //由main1.c主程序调用,初始化参数表
{
    unsigned char i;
    EEPGD=0;
    for(i=0;i<59;i++)   
        ram_canshu[i]=ReadFromEeprom(i);   
}

void e2prom_w1()           //将默认参数写入E2PROM,长击参数键时调用
{
    unsigned char i;
    EEPGD=0;
    for(i=0;i<59;i++)    WriteToEeprom(i,rom_canshu[i]);
}

void e2prom_w2()            //将内存中的参数写入E2PROM,无击时调用
{
    unsigned char i;
    EEPGD=0;
    for(i=0;i<59;i++) WriteToEeprom(i,ram_canshu[i]);
}

void WriteToEeprom(Addr,WriteData)
unsigned char Addr,WriteData;
{
    EEADR=Addr;
    EEDATA=WriteData;
    asm("nop");
    asm("nop");
    WREN=1;
    GIE=0;
    EECON2=0x55;
    EECON2=0xaa;
    WR=1;
    GIE=1;
    WREN=0;
    asm("clrwdt");
    while(WR==1);
  }

unsigned char ReadFromEeprom(Addr)
unsigned char Addr;
{
    EEADR=Addr;
    RD=1;
    return (EEDATA);
}

使用特权

评论回复
5
yewuyi| | 2010-6-24 08:43 | 只看该作者
本帖最后由 yewuyi 于 2010-6-24 08:51 编辑

直接调用PICC支持EEPROM读写的两个库函数:EEPROM_READ(),EEPROM_WRITE(),

再试试。

56*5=280MS,你现在不管是2秒还是12秒都是不对的,这就说明你代码中肯定有其它造成时间延迟的程序结构,所以,还是自己仔细分析自己的代码结构把。

使用特权

评论回复
6
peigang| | 2010-6-28 16:05 | 只看该作者
楼上不错
如果是初学建议自己编驱动程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

149

主题

349

帖子

2

粉丝