完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
问候语。我可以在这里使用一些建议——我使用MPLABX汇编语言和PICtiT3使用PIC18F420。我基本上直接从数据表中获取了代码,添加了一个我认为必要的小添加,并且获得了一些有趣的结果。我的代码被设置为简单地选择一个任意的EEPROM地址,向该地址写入一个任意字节,然后从该地址读取值以验证它是否工作。我使用MPLAB调试来查看所有内容,在简单代码的末尾设置断点。第一次运行读写:当我运行例程时,从任意EEPROM位置读回的表值看起来很棒——它读回我写的内容,这让我相信它写得很好。到EEPROM!第二次运行,只读:然后,当我停止调试器并删除跳过写代码的注释的GOTO时,我假设它会读回我第一次写的内容。然而,它总是读取“0xFF”,这意味着什么都没有写过——像RAM一样!这怎么可能呢?由于例程确实正确地读取了它后,写之前的实例!另外,在上述两种情况下,我打开了EEPROM的内存窗口,所有的值都是0xFF,尽管在第一种情况下,我已经“正确地”写入和读取了值——我怀疑MPLAB和PICKIT的这个部分有bug,我不相信。这里有一些基本的东西-因为EEPROM一直被使用,没有问题,请给我一些建议,关于我遗漏了什么,这应该是相当基本的。谢谢!
|
|
相关推荐
14个回答
|
|
|
坏电源,例如缺少解耦电容器,在过去确实给我造成了这种情况。但是在你的例子中,我想它也可能是某种程度上欺骗你的调试器。试着写信给某个单元,没有任何中断点:然后使用调试器读取EEprom,看看它是否正常。你也可以用模拟器测试它。
|
|
|
|
|
|
单击调试器,然后设置…在调试期间没有更新程序/EEPROM数据。
|
|
|
|
|
|
亲爱的达里奥,谢谢你的建议。我用一个9V电池从微芯片上使用PicDo2+板。我希望绕过不应该是个问题。我在调试器中接受了您的建议,因此我决定稍微修改代码,以便它把从EEPROM读取的值直接报告给这个板上连接到PORTB的LED。然后,我通过调试设备并在没有任何调试的情况下运行,完全消除了调试器。我在末尾放了一个无限循环来停止程序,因为我没有断点。结果是相同的。我写给EEPROM的第一个实例,然后读回它按预期工作,返回正确的值。第二个实例,我绕过写例程,只读EEPORM,在LED上得到0xFF。所以调试器和直接编程的版本似乎是一致的。还有其他提示吗?谢谢您。
|
|
|
|
|
|
戴维,我不明白你在说什么。我在MPLABx的顶部有一个“调试”菜单,但是它下面没有“设置”菜单,我不确定你指的是哪里。
|
|
|
|
|
|
戴维,我不明白你在说什么。我在MPLABx的顶部有一个“调试”菜单,但是它下面没有“设置”菜单,我不确定你指的是哪里。我使用MPLAB V8.92。在MPLABX中应该有类似的东西。这是PICTIT3的限制,而不是IDE。
|
|
|
|
|
|
这一切看起来都很好(除了可能写入PoTB而不是LATB,但它不会伤害现在)所以…奇怪……那些文字值是“正确的”吗?
|
|
|
|
|
|
把GOTO换成胸罩,看看会发生什么。
|
|
|
|
|
|
当你这样做时,你必须重新编程,它擦除PIC,包括EEPROM。你需要告诉你的程序员在编程时保存EEPROM。
|
|
|
|
|
|
还有一个讨厌的小“gotcha”——EEPROM需要花费大量时间来写入,对于PIC来说通常是4ms(参数D122),并且如果该写入被电源循环或/MCLR中止,则内存位置很可能处于无效状态。它可以读为擦除,它可以读取几乎任何其他!不幸的是,Microchip的预算程序员的编程算法实现倾向于让您的代码在读取设备ID和编程或读取过程的其余部分之间短时间内运行,并且如果您正在编程,它还可以在程序之间简单运行并验证塔奇。如果它到达EEPROM写例程,它会使EEPROM内容混乱。用简单的EEPROM测试代码避免这个问题有三个关键:必须启用External/MCLR,MPLAB必须配置为在编程之后将目标保持在RESET中。在运行EEPROM写例程之前,延迟或改变引脚级别(选择在ICSP期间不活动的引脚)。如果代码包含EEPROM或FLASH写例程以防止在慢速上电、断电或其他期间内存损坏,那么最好使用*ALWAYS*启用BOR您也不能单步执行或在ICSP/ICD接口硬件调试器中的任何一个下通过FLASH或EEPROM编写动画,因为调试NMI在每条指令之后调用调试执行器,而stepping会破坏EECON2启用写入的关键解锁序列。在写完代码后,可以全速运行到光标或代码中的断点。我建议您应该修改代码,以便在启动时轮询这些开关并闪烁LED,以便知道它正在等待用户输入。然后根据哪个开关被按下,跳转到EEPROM写或EEPROM读例程。它还值得在构建时使用0x00或0xFF以外的东西预加载EEPROM,以便您可以检查已知数据的读取例程。例如,在MPASM绝对模式中:或在MPASM /MPLink可重定位模式下:
|
|
|
|
|
|
在第二次执行调试时可能会忽略,在默认设置中,IDE将删除包括EEPROM在内的所有程序内存,并重新对PIC进行编程。这可能是你看到的结果。
|
|
|
|
|
|
伊恩,我采纳了你的建议,并利用PICDEM2+板上的两个开关重新编写了程序:1。启动时,程序从EEPROM位置读取值,并将其放置在连接到PoB.2的LED上。程序等待用户按下两个开关中的一个。3。如果第一个开关被按下,一个值“x”被放置在EEPROM位置。如果第二开关被按下,一个值“y”被放置在EEPROM位置。4。程序又回到了开头。程序运行得完美无瑕,总是根据按下的开关来更新LED。此外,我还开了电源,重新供电。上电后,LED显示EEPROM的最后状态,从而证明写操作正确。此外,我使用MPLABx上的上传按钮,EEPROM内存视图正确地显示由LED的最后状态预测的EEPROM中的值。我很满意写EEPROM的例程一直有效,并且我通过PICKIT3更好地理解了MPLABx和调试器的局限性。我想总结一下我的发现,并且让其他可能搜索这个主题的人也能理解。
|
|
|
|
|
|
现在你需要研究书写耐久性和磨损水平。搞错了,你可以在一天之内杀死EEPROM,如果它的循环写它!
|
|
|
|
|
|
它的良好实践是将用户调整设置触发的写延迟一小段时间,这样如果他们是起泡开关或旋转旋钮,你不必在每次无目的的改变上都写EEPROM。此外,您还必须考虑在写期间由于电源故障导致的EEPROM损坏将如何恢复。这个问题的答案可能是电源故障中断,所以你可以检测你的PSU的上游电源何时中断,留给你足够的时间用Vdd>Vbor写你需要保存的所有状态,但是做错了,这可能是灾难性的。例如,如果你发现每一个电源故障作为电源故障,并写在每一个,在一个电噪声环境,你可以磨损你的EEPROM在不到一年!请参阅HTTP://www. MyCHIP.COM/FUMMS/M78230.ASPX回复到我自己的帖子,因为论坛再次被Bog调用,不会让我编辑它。
|
|
|
|
|
|
确保良好可靠性的另一点。根据我的经验,在低电压条件下,EEPROM读数可以变成写入。启用BOR是对此的最佳防御,但是确保在通电后的最初几毫秒内不尝试读取EEPROM也是有用的。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5794 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 10:49 , Processed in 1.107885 second(s), Total 98, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5116