打印

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

[复制链接]
3904|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
程序第一次烧写进去之后运行没有问题,   那就可以说明程序还是没有问题的.
但是只要单片机一掉电,重新启动以后,程序就不能正常运行了,        你应该着重检查上电逻辑, 工作状态的初始化问题. 或许定时中断来后, 你还没有完成初始化. 或者上电复位电路, 或相关软件有缺陷.

使用特权

评论回复
5
gluebi|  楼主 | 2013-7-22 14:56 | 只看该作者
ayb_ice 发表于 2013-7-22 11:21
千万不要草率下结论
没有必然联系的两个外设,
这种东西想都不用想,自己问题 ...

没有必然联系的两个部分是指浮点运算和ADC嘛??
但是我之前的程序,没有ADC中断里面没有浮点运算部分,用定时器2作采样就一直没问题。。。

使用特权

评论回复
6
ayb_ice| | 2013-7-23 08:05 | 只看该作者
有问题就一定是别人的问题吗

使用特权

评论回复
7
gbchang| | 2013-8-10 19:38 | 只看该作者
第一次烧写进去之后运行,你这是指仿真状态吧?仿真时,逻辑会按照实际的来,但中断时机就没那么准确了。即使全速运行。

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

题外话,程序跑飞这个词,不知为什么被很多人定义为硬件原因,比如什么干扰导致 PC 指针错乱之类的,我非常非常的奇怪,也许那是8031时代,ROM,RAM什么的都在外面,那线路的干扰,的确会出问题。
现在单片机基本都真正“单片”了,如果还有跑飞,那只能一种原因,就是堆栈溢出。

使用特权

评论回复
8
ningling_21| | 2013-8-10 20:10 | 只看该作者
把中断中的浮点运算去掉试试...

使用特权

评论回复
9
zd420325| | 2013-8-11 00:39 | 只看该作者
中断频率高不高?把浮点数运算放中断外,定时器时间调长一点,看是否有这种情况发生。

使用特权

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

本版积分规则

11

主题

39

帖子

1

粉丝