C8051F系列单片机ADC用定时器2中断后程序跑飞

[复制链接]
 楼主| gluebi 发表于 2013-7-22 10:29 | 显示全部楼层 |阅读模式
单片机是C8051F410
我之前ADC0用定时器2中断,中断服务程序只采集ADC寄存器高低八位,不多做处理的时候程序没有问题
后来,在中断服务程序中加入浮点运算后,程序第一次烧写进去之后运行没有问题,但是只要单片机一掉电,重新启动以后,程序就无**常运行了,看门狗在初始化中是默认关闭的
之后,我调整了ADC0的采样方式,改成了写ADC0BUSY位的方法之后就没有了这个问题,程序掉电上电后仍然正常运行

由此得出结论,在看门狗关闭情况下,ADC0用定时器2中断的方式下,中断中加入浮点运算会导致单片机跑飞

我想请教下各位大牛,单片机中浮点运算是否会因为占用资源,增加单片机跑飞的可能性
dirtwillfly 发表于 2013-7-22 11:08 | 显示全部楼层
浮点运算会占用大量的资源和时间,还是放在中断服务程序外面比较好。中断服务程序尽量简短一些
ayb_ice 发表于 2013-7-22 11:21 | 显示全部楼层
千万不要草率下结论
没有必然联系的两个外设,
这种东西想都不用想,自己问题
airwill 发表于 2013-7-22 11:51 | 显示全部楼层
程序第一次烧写进去之后运行没有问题,   那就可以说明程序还是没有问题的.
但是只要单片机一掉电,重新启动以后,程序就不能正常运行了,        你应该着重检查上电逻辑, 工作状态的初始化问题. 或许定时中断来后, 你还没有完成初始化. 或者上电复位电路, 或相关软件有缺陷.
 楼主| gluebi 发表于 2013-7-22 14:56 | 显示全部楼层
ayb_ice 发表于 2013-7-22 11:21
千万不要草率下结论
没有必然联系的两个外设,
这种东西想都不用想,自己问题 ...

没有必然联系的两个部分是指浮点运算和ADC嘛??
但是我之前的程序,没有ADC中断里面没有浮点运算部分,用定时器2作采样就一直没问题。。。
ayb_ice 发表于 2013-7-23 08:05 | 显示全部楼层
有问题就一定是别人的问题吗
gbchang 发表于 2013-8-10 19:38 | 显示全部楼层
第一次烧写进去之后运行,你这是指仿真状态吧?仿真时,逻辑会按照实际的来,但中断时机就没那么准确了。即使全速运行。

你这个问题,一是堆栈设置大一些试试。
再一个,假设上次采样计算未完成,新的定时中断到来,程序逻辑有没问题。
如果定时中断里占用时间比中断时间还长,那结果就是,主程序很久才执行一条指令(中断出来要至少执行一条指令才会再进中断的),这个可能性很大;
这时你的程序不叫跑飞,因为逻辑上还是按照设计在运行。也不算问题,定时中断设置太短了,改长点就是了,没什么的。

题外话,程序跑飞这个词,不知为什么被很多人定义为硬件原因,比如什么干扰导致 PC 指针错乱之类的,我非常非常的奇怪,也许那是8031时代,ROM,RAM什么的都在外面,那线路的干扰,的确会出问题。
现在单片机基本都真正“单片”了,如果还有跑飞,那只能一种原因,就是堆栈溢出。
ningling_21 发表于 2013-8-10 20:10 | 显示全部楼层
把中断中的浮点运算去掉试试...
zd420325 发表于 2013-8-11 00:39 | 显示全部楼层
中断频率高不高?把浮点数运算放中断外,定时器时间调长一点,看是否有这种情况发生。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

39

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

11

主题

39

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部