打印

PIC16F877A读EEPROM问题

[复制链接]
3969|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bestwish13|  楼主 | 2007-8-16 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//===========================================================
  void  read()              //EEPROM读
{
  y=0;while(y<17){EEADR=y;EEPGD=0;RD=1;xx[y]=EEDATA;y++;}
}

  在网上我也看到了别人有同样的问题,但是都有没有解决定,达人们说调用pic.h里的读写函数就可以了,我也试了,

PIC16F877A这个片子是有点怪,可以正确的写入,但读不出来.其它芯片不会,像675,819都没有这样的问题,同样的

程式.有高见的达人们请帮帮忙,谢谢!
沙发
bestwish13|  楼主 | 2007-8-17 07:44 | 只看该作者

求助

就没有人知道为啥??怪了.

使用特权

评论回复
板凳
bestwish13|  楼主 | 2007-8-17 10:07 | 只看该作者

求人不求已

问题解决了,安逸!看来所谓的达人们呀,高人们呀,,,只能对别人显而易见的问题出来提点一下,当遇到真正的问题时,却只能浏览一下而已,失望!

使用特权

评论回复
地板
yewuyi| | 2007-8-17 10:42 | 只看该作者

这是什么复杂问题吗?

自己对着DATASHEET写就OK了,这还能发点牢骚?

你还真高勒……

使用特权

评论回复
5
bestwish13|  楼主 | 2007-8-17 11:02 | 只看该作者

达人果然是达人!!

说话也牛点!

使用特权

评论回复
6
yewuyi| | 2007-8-17 13:38 | 只看该作者

小兄弟啊,这确实是很简单的问题啊

俺早看到了,但确实不想回,对着DATASHEET写就是了,PIC的中文资料很多,都写得很全面。

你可以参考一下PIC16F91X的中文手册

使用特权

评论回复
7
bestwish13|  楼主 | 2007-8-18 08:10 | 只看该作者

你好像是误解了某一些东西

http://mcubbs.com/bbs/thread-5508-1-1.html请进去看看,同样的提问,但别人不认为问题是简单还复杂的,人家愿意回答,这个就是在论坛的本质,,,,,,按你所说,你好像只是回答难的.再说我不是不会写,,PIC.H里也现在的调用子程序.

使用特权

评论回复
8
yewuyi| | 2007-8-18 08:38 | 只看该作者

在16F913调试通过的读程序,你参考一下

俺不用16F877A,这型号性价比比较差,但PIC的EE都差不多。
void    ReadEE(void){
          fcase=0x00;
          EEADRH=EEADRL=0x00;
          while(fcase<13){
                                   EECON1=0x01;
                         f[fcase]=EEDATL;
                         EEADRL++;
                         fcase++;
                    }
          }

PS:俺确实不怎么回答很简单的问题,这类的问题请自己翻书去,不要总想着等、靠、要,这种思想要不得,既然PIC.H文件里面已经给出了函数调用,你参考着写就是了,这样还弄不出来,除非你钻进什么牛角尖里了,你总不能让大家去猜你钻到什么里面去了把?

16F877A不会有什么问题的,虽然俺不用,但用的人可是大把大把,而且这颗料已经很多年了,有问题也早就改进了,嘿嘿,俺就郁闷了,就这东东,还还弄出一堆牢骚出来?

你不是一般的高勒……

使用特权

评论回复
9
bestwish13|  楼主 | 2007-8-18 08:51 | 只看该作者

好晕哦!

 bestwish13 发表于 2007-8-17 10:07 PIC 单片机 ←返回版面    

3楼: 求人不求已 

问题解决了,安逸!看来所谓的达人们呀,高人们呀,,,只能对别人显而易见的问题出来提点一下,当遇到真正的问题时,却只能浏览一下而已,失望!
 
 
   17号10点钟前问题以解决,,你还没有看明白??
通常说自己的高人的人,不一定是高人,,,,,高人看贴子
也是不看字的!现在才明白过来哦!

使用特权

评论回复
10
yewuyi| | 2007-8-18 08:53 | 只看该作者

真是浪费口舌……

你自己玩……

不奉陪……

使用特权

评论回复
11
bestwish13|  楼主 | 2007-8-18 10:09 | 只看该作者

你好像看明了哦!

  版主,,辛苦了!!!

使用特权

评论回复
12
yewuyi| | 2007-8-18 10:24 | 只看该作者

做人难,做斑竹更难……

俺算是看明白了……

使用特权

评论回复
13
bestwish13|  楼主 | 2007-8-18 12:44 | 只看该作者

生活也有美好的一面的!

使用特权

评论回复
14
xwj| | 2007-8-18 13:02 | 只看该作者

MD,什么人啊???

使用特权

评论回复
15
iaiwork21| | 2007-10-13 00:38 | 只看该作者

这个到底是什么原因阿???

晕,我碰到跟楼主一样的问题,直接用PIC.H里面的读写程序

IDE7.5 + PICC8.05 + ICD2

void main(void)
{
    Initialize();
    GIE=1;
    PEIE=1;

    EEPROM_WRITE(0x10,0x12);
    EEPROM_WRITE(0x11,0x34);
    EEPROM_WRITE(0x11,0x56);
    TXBUFFER[0]=EEPROM_READ(0x10);
    TXBUFFER[1]=EEPROM_READ(0x11);
    TXBUFFER[1]=EEPROM_READ(0x12);

    while(1) {
        .......
    }
}

结果TXBUFFER[0]=TXBUFFER[1]=TXBUFFER[2]=0x56

使用特权

评论回复
16
iaiwork21| | 2007-10-13 01:23 | 只看该作者

晕,只当我没顶过

心思放在读上面,其实关键的一句在写上面 while(WR)continue;
延时即可解决问题

只当我没顶过,睡去了呵呵

使用特权

评论回复
17
兰天白云| | 2007-10-15 08:21 | 只看该作者

没写完就读,太性急了

那就用铁电存储器吧,写几乎没延时

使用特权

评论回复
18
hotpower| | 2007-10-29 22:32 | 只看该作者

汇编宏

;-------读取EEPROM函数READEEPROM()-------------
;读取eeprom函数Readeeprom()-------------
#define ReadeepromByte(ADDR,DATA) Procedure_ReadeepromByte ADDR,DATA
Procedure_ReadeepromByte MACRO ADDR,DATA
        local   start
  MainCbanksel = 0
        ifndef  Function_Readeeprom
          #define Function_Readeeprom Function_Readeeprom_Call_Address
          GOTO    start
Function_Readeeprom_Call_Address
          CBANKSEL EECON1 
          BCF      EECON1,EEPGD;选中EEPROM
          BSF      EECON1,RD;读EEPROM
          return
        endif
start
  MainCbanksel = 0
        ByteVal(EEADR,ADDR);
        ACALL    Function_Readeeprom
        ByteVar(DATA,EEDATA);
  MainCbanksel = 0
        ENDM

#define ReadeepromWord(ADDR,DATA) Procedure_ReadeepromWord ADDR,DATA
Procedure_ReadeepromWord MACRO ADDR,DATA
        local   start
  MainCbanksel = 0
        ifndef  Function_Readeeprom
          #define Function_Readeeprom Function_Readeeprom_Call_Address
          GOTO    start
Function_Readeeprom_Call_Address
          CBANKSEL EECON1 
          BCF      EECON1,EEPGD;选中EEPROM
          BSF      EECON1,RD;读EEPROM
          return
        endif
start
  MainCbanksel = 0
        ByteVal(EEADR,ADDR);
        ACALL    Function_Readeeprom
        ByteVar(DATA,EEDATA);
        IncByte(EEADR);
        ACALL    Function_Readeeprom
        ByteVar(DATA+1,EEDATA);
  MainCbanksel = 0
        ENDM
;-------写入EEPROM函数WriteEEPROM()-------------
#define WriteeepromByte(ADDR,DATA) Procedure_WriteeepromByte ADDR,DATA
Procedure_WriteeepromByte MACRO ADDR,DATA
        local start
  MainCbanksel = 0
        IFNDEF  Function_Writeeeprom
          #define Function_Writeeeprom Function_Writeeeprom_Call_Addr
          GOTO    start
Function_Writeeeprom_Call_Addr
        CBANKSEL EECON1
        BCF     EECON1,EEPGD;选中EEPROM
        MACRO_ROMWRITE_COMMAND
          RETURN
        ENDIF
start
  MainCbanksel = 0
        ByteVal(EEADR,ADDR);
        ByteVar(EEDATA,DATA);
        ACALL   Function_Writeeeprom
  MainCbanksel = 0
        ENDM 

#define WriteeepromWord(ADDR,DATA) Procedure_WriteeepromWord ADDR,DATA
Procedure_WriteeepromWord MACRO ADDR,DATA
        local start
  MainCbanksel = 0
        IFNDEF  Function_Writeeeprom
          #define Function_Writeeeprom Function_Writeeeprom_Call_Addr
          GOTO    start
Function_Writeeeprom_Call_Addr
        CBANKSEL EECON1
        BCF     EECON1,EEPGD;选中EEPROM
        MACRO_ROMWRITE_COMMAND
           RETURN
        ENDIF
start
  MainCbanksel = 0
        ByteVal(EEADR,ADDR);
        ByteVar(EEDATA,DATA);
        ACALL   Function_Writeeeprom
        IncByte(EEADR);
        ByteVar(EEDATA,DATA+1);
        ACALL   Function_Writeeeprom
  MainCbanksel = 0
        ENDM 

;写入ROM基本硬件操作宏定义
MACRO_ROMWRITE_COMMAND MACRO
        CLRWDT
        CBANKSEL EECON1
        BSF        EECON1,WREN;写使能
;        BCF        INTCON,GIE;关中断
        MOVLW    0X55
        MOVWF    EECON2
        MOVLW    0XAA
        MOVWF    EECON2
        BSF     EECON1,WR;写允许
        NOP
        NOP
        NOP
        BCF        EECON1,WREN;写禁止
;        BSF        INTCON,GIE;开中断
        BTFSC   EECON1,WR
        GOTO    $-1;
 NOP
        ENDM
;-------读取Flash Rom()函数-------------------
;读取Flash Rom()函数
#define ReadFlash(ADDR,DATA) Procedure_ReadFlash ADDR,DATA
#define ReadFlashWord(ADDR,DATA) Procedure_ReadFlash ADDR,DATA
Procedure_ReadFlash Macro ADDR,DATA
        local   start
        ifndef  Function_ReadFlash
          #define Function_ReadFlash Function_ReadFlash_Call_Addr
          GOTO    start
Function_ReadFlash_Call_Addr
          ABANKSEL EECON1
          BSF        EECON1,EEPGD;选中Flash Rom
          BSF        EECON1,RD;读Flash Rom
          return
        endif
start
        GetArrayWordDByte(ADDR,EEADRH,EEADR);
        ACALL    Function_ReadFlash
        SetArrayWordDByte(DATA,EEDATH,EEDATA);
        ENDM
;-------------------
#define WriteFlash(ADDR,DATA) Procedure_WriteFlash ADDR,DATA
Procedure_WriteFlash MACRO ADDR,DATA
        local start
        IFNDEF  Function_WriteFlash
          #define Function_WriteFlash Function_WriteFlash_Call_Addr
          GOTO    start
Function_WriteFlash_Call_Addr
        ABANKSEL EECON1
        BSF        EECON1,EEPGD;选中Flash Rom
        MACRO_ROMWRITE_COMMAND;写入Flash基本硬件操作宏定义
           RETURN
        ENDIF
start
        GetArrayWordDByte(ADDR,EEADRH,EEADR);
        GetArrayWordDByte(DATA,EEDATH,EEDATA);
        ACALL   Function_WriteFlash
        ENDM 

ASM macro
  MainCbanksel = 0
  endm
ENDASM macro
  MainCbanksel = 0
  endm

使用特权

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

本版积分规则

1

主题

8

帖子

0

粉丝