打印

12F519 flash 数据区读写异常请教

[复制链接]
4564|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eheart|  楼主 | 2008-4-8 02:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用12F519读写内部flash 数据区时,按照规格书给的例程,发现结果异常,现象如下:

规格书上给的例程:
读数据:
    bsf    FSR,5
    movlw    0        ;LOAD ADDRESS TO READ
    bsf     EECON,RD         ;INITITATE THE READ INSTRUCTION
    nop             ;INSTRUCTION IGNORED
    movf     EEDATA,W         ;GET NEW DATA

这个例程看起来不对,没有用到EEADR, 执行起来也无法读到正确结果
我把它改写成:
    bsf    FSR,5
    movlw    0        ;LOAD ADDRESS TO READ
         movwf    EEADR
    bsf     EECON,RD         ;INITITATE THE READ INSTRUCTION
    nop                 ;INSTRUCTION IGNORED
    movf     EEDATA,W         ;GET NEW DATA

可是执行起来还是不对,尽管已经把FSR,5置位了,movwf EEADR 指令执行的结果是把PORTB口清零了。EEADR 和PORTB是在RAM bank0 和1相对应的两个寄存器,难道是 bsf FSR,5 指令没有发挥作用?

我以上的这个例程在MPLAB里仿真是正常的,烧在芯片里运行的结果不正常,百思不得其解,不知哪位兄弟能给解释一下?谢谢了!

沙发
xieyuanbin| | 2008-4-8 09:13 | 只看该作者

不明白你BSF FSR,5干吗?

FSR是间接寻址时的地址所在,你如果要切换BANK,应该去操作STATUS,RP0或RP1

使用特权

评论回复
板凳
eheart|  楼主 | 2008-4-8 09:43 | 只看该作者

谢谢指点.

不过12F519切换BANK, 确实是用FSR,5来切换的, STATUS里没有RP0,RP1,只有PA0,是切换程序页面的。以上例程是Microchip提供的。

使用特权

评论回复
地板
skygrow| | 2008-4-8 11:10 | 只看该作者

奇怪

换个地址呢?   
如果给EEADR赋值0x01, RB0是不是也会置1?
还有EEADR=0, 读出来的该是PC=0x400单元的低8位

使用特权

评论回复
5
eheart|  楼主 | 2008-4-8 16:02 | 只看该作者

真是奇怪

在不同的EEADR地址上操作结果是一样的,对EEADR的赋值都变成是对PORTB的操作,尽管前面有FSR,5
最奇怪的是,在软件仿真(MPLAB 8.00)上都正常,烧到芯片里就不正常了

使用特权

评论回复
6
xieyuanbin| | 2008-4-8 21:54 | 只看该作者

的确,12F519的BANK操作通过FSR,5切换.

手头没有这块芯片,因此不能实际测试,你试试下面的程序,有时很多数据手册例程似乎没有经过实际验证.
    movlw EEADR
    movwf FSR
    bsf    FSR,5
    movlw    0        ;LOAD ADDRESS TO READ
    movwf    INDF     ;*利用间接寻址操作EEADR*
    bsf     EECON,RD         ;INITITATE THE READ INSTRUCTION
    nop                 ;INSTRUCTION IGNORED
    movf     EEDATA,W         ;GET NEW DATA

使用特权

评论回复
7
xieyuanbin| | 2008-4-8 22:25 | 只看该作者

奇怪,难道16F526和12F519是一个娘胎里出来的?

我下载519的数据手册,其中中文的标明12F519/16F526在一起,结果打开又只是519的,完全没有526的内容,忽悠我?

使用特权

评论回复
8
eheart|  楼主 | 2008-4-9 11:19 | 只看该作者

做了一下试验,症状比较明显了

在芯片上烧了几次调试代码,症状算是基本可以肯定了

我用以下代码
         movfw     OSCCAL
    call    Send_Asyncbyte    ;检查OSCCAL内容
 
    movfw    PORTB
    call    Send_Asyncbyte     ;检查PORTB内容

         bsf        FSR,5
        movfw    EEDATA
        bcf    FSR,5    
    call    Send_Asyncbyte      ;检查EEDATA内容

        bsf        FSR,5
        movfw    EEADR
        bcf    FSR,5    
    call    Send_Asyncbyte       ;检查EEADR内容
    goto    $    
Send_asynbyte 是把W的内容从一个端口送出来。测试结果是,读取EEADR,实际读到的是PORTB, 读取EEDATA 实际读到的是OSCCAL, 也就是说FSR,5没有起到作用,BANK没有切换
使用xieyuanbin版主建议的间接寻址方式,结果也是一样。为什么会发生BANK切换不了呢?
另外,说明一下,我是用ICD2来烧写12F519的,Firmware是 MPLAB8.00带来的。        

使用特权

评论回复
9
eheart|  楼主 | 2008-4-9 11:30 | 只看该作者

投诉一下Microchip的技术支持

800电话打过去很久才有人接,然后说没有芯片不能验证,提供不出任何有价值的信息

使用特权

评论回复
10
McuPlayer| | 2008-4-9 12:02 | 只看该作者

800你也去打啊,呵呵

假如你是FAE的老大,你会让你的主力小弟去做800的接线员吗?
最有效的方式是透过代理商找FAE

使用特权

评论回复
11
xieyuanbin| | 2008-4-9 14:17 | 只看该作者

应该正在解决中

这里MCP的FAE主力小弟经常在这里转的.问题应该已经在查了.
但还是不太相信519出问题,在产品出来前,MCP会做很长时间的测试,并且会交到重要客户手中测试,出这样的问题的几率极小.

使用特权

评论回复
12
兰天白云| | 2008-4-11 20:15 | 只看该作者

本人有些时间不相信数据手册

使用特权

评论回复
13
eheart|  楼主 | 2008-4-14 11:37 | 只看该作者

问题找到了,气死人了,乌龙事件

芯片是DFN封装的,我申请的样片是12F519,实际来的看这现象应该是12F509,芯片表面的标识识别不出型号。
谢谢大家的帮助,特别是Xieyuanbin的热情,不好意思耽误了各位的时间 

使用特权

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

本版积分规则

1

主题

12

帖子

0

粉丝