打印

PIC单片机关于EEPROM的问题请教

[复制链接]
3821|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linbei1988|  楼主 | 2010-5-4 09:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚解除PIC单片机不久,最近做个程序需要写EEPROM,起初都很正常,能写能读...一旦将OPTION_REG的TMR0预分频之后,在检测EEIF的时候,要较长的时间才被置1,导致看门狗动作了!于是我在检测的时候喂了下狗就好了...但是怕这样程序会出问题,可能导致死在这里,而且看了很多资料没有提到OPTION_REG会影响EEPROM中断
另外有个比较弱的问题问下...PIC单片机的TMR0和TMR1计数器是在什么时候开始计数的?IF清零后,还是IE开启后?

相关帖子

沙发
zhaoyu2005| | 2010-5-4 10:07 | 只看该作者
关于第一个问题,可能是预分频给了看门狗,导致看门狗的溢出时间缩短了,而EEPROM的写时间不变,从而认为是EEIF的时间长了
第二个问题,好像TMR0复位后就开始计数,并且关不掉(我只了解一部分型号,不代表所有的),TMR1在使能计数后开始计数,与IF和IE的状态无关,本末倒置了,定时器溢出了能置位IF,IE是中断允许位

使用特权

评论回复
板凳
yewuyi| | 2010-5-4 10:08 | 只看该作者
1、TMR0和EEPROM没什么关系。
2、EEIF是否尽量快的发生中断响应,需要看你的其他中断处理的程序是否正确。
3、读EEPROM没有时间延迟,写EEPROM一般需要5~10MS延迟,请正确理解这个时间参数。
4、TMR0是不可关断的定时器,也就是说,只要上电,它就一直在计数中。
TMR1印象中有一个启动停止控制位,也就是说,可以根据代码决定TMR1什么时候开始计数和停止计数。
不管是哪个定时器,计数值的清除动作和IF没有直接关系,IF只代表发生了计数溢出。

具体的功能请详细阅读对应的DATASHEET,呵呵,俺也不可能天天把DATASHEET背熟的,如果用到时查查手册核实一下为好,如果我所描述的和手册有出入,请以手册为准。

使用特权

评论回复
地板
yewuyi| | 2010-5-4 10:13 | 只看该作者
关于第一个问题,可能是预分频给了看门狗,导致看门狗的溢出时间缩短了,而EEPROM的写时间不变,从而认为是EEIF的时间长了
第二个问题,好像TMR0复位后就开始计数,并且关不掉(我只了解一部分型号,不代表所有的) ...
zhaoyu2005 发表于 2010-5-4 10:07


如果是预分频给了看门狗,应该是溢出时间拉长了。
PIC的看门狗定时器在没有分频的情况下,一般溢出时间在9~30MS,典型值在18MS左右,这个时间足够EEPROM写操作的延迟时间了,所以LZ的问题99.99%是他自己的代码结构不合理的问题。

使用特权

评论回复
5
linbei1988|  楼主 | 2010-5-4 10:25 | 只看该作者
楼上的大哥说的有理,可能是我代码有问题...我现在用的16F630是汇编的,而且没有仿真器比较难找到问题所在!
我是在开启了TMR0中断之后,再EEPROM写入时已经关闭总中断,好像在判断写入是否完成时,总要先喂一下狗,不然要么写入数据出错,一直重写,要么EEIF没有置1....有什么可能导致这些情况?

使用特权

评论回复
6
linbei1988|  楼主 | 2010-5-4 11:02 | 只看该作者
晕..真想扇自己两巴掌!!这个问题纠缠了我2天了....果然是代码中一个变量没有初始化,导致写入EEPROM写了太多次,才引发看门狗复位@_@果然经验不足....不过想半天没想明白,为什么OPTION_REG赋值时才会导致这种问题...太深奥了:dizzy:

使用特权

评论回复
7
897293874| | 2010-5-4 17:54 | 只看该作者
呵呵,慢慢来

使用特权

评论回复
8
wsjhy1| | 2010-5-4 18:15 | 只看该作者
嗯 学 了 不熟练

使用特权

评论回复
9
chen477293| | 2010-5-9 18:03 | 只看该作者
ye前辈很牛

使用特权

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

本版积分规则

个人签名:总结前半辈子,计划后半辈子。。

73

主题

751

帖子

2

粉丝