打印

一个诡异的问题,也有可能是单片机设计中的bug

[复制链接]
1809|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fxhfxh|  楼主 | 2012-8-15 12:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近用p89lpc931开发一个小东西,出现如下现象,百思不解,怀疑是不是芯片设计时的bug.
void main(void)
{
   IO_init();
   int_init();   
   led_s=0;       //led_s熄灭
   DIVM=0X01;  //不要这一句,现象正常,led_s不会熄灭  
    EX1=1;   //外部中断1允许

   while(1){
   _nop_();      
     }
在while循环中就是一个等待外部中断,如在中断程序中让发光2极管点亮,则退出中断后,略略等一会(时间好像也是不确定的)发光2极管会熄灭,好像执行了led_s=0;按程序是不会执行的,(看门狗没有开);如把led_s=0改为led_s=1,则在中断程序如让发光2极管熄灭,则退出中断后略略等一会发光2极管又会点亮,但如果去掉DIVM=0X01,则程序正常,但如果去掉这一句,产品的应用范围又受到了限制。这个问题是不是飞利浦公司在设计时的一个bug呢。联想到周立功公司已经不再推广这个系列了。
这个问题放在这里可能没有多少朋友愿意了解和回答,作为一个痕迹吧。

相关帖子

沙发
liuyu305| | 2012-8-15 12:26 | 只看该作者
程序复位了吧?

使用特权

评论回复
板凳
fxhfxh|  楼主 | 2012-8-15 13:18 | 只看该作者
程序复位了吧?
liuyu305 发表于 2012-8-15 12:26

没有任何复位的条件和语句,为什么会复位?
去掉DIVM=0X01;这一句,程序就正常。

使用特权

评论回复
地板
ayb_ice| | 2012-8-15 13:24 | 只看该作者
"DIVM=0X01;"

这句什么意思嘛

使用特权

评论回复
5
fxhfxh|  楼主 | 2012-8-15 13:54 | 只看该作者
"DIVM=0X01;"

这句什么意思嘛
ayb_ice 发表于 2012-8-15 13:24

喔,是cpu时钟调整寄存器。
CPU时钟(CCLK)调整:DIVM寄存器。
OSCCLK频率可通过配置分频寄存器DIVM进行510分频来提供CCLK.可通过下式得出CCLK的频率:CCLK频率=fosc/(2N)   此处,fosc为OSCCLK频率。N是DIVM的值。N的取值范围为1-255,因此,CCLK的频率复位为fosc~fosc/510.N=0时,CCLK=fosc.(摘自数据手册)

使用特权

评论回复
6
ayb_ice| | 2012-8-15 14:12 | 只看该作者
我看结果都是正常的,只是与你的想象不一样罢了

可能是变化太快,或者太慢了

使用特权

评论回复
7
ayf1989| | 2012-8-18 11:58 | 只看该作者
单片机开始量产逻辑功能肯定是没问题的,只是性能方面在某些条件下为有所限制

使用特权

评论回复
8
fxhfxh|  楼主 | 2012-8-18 12:42 | 只看该作者
这个问题经过网友的引导已经解决。其实诡异的不是单片机,糊涂的是自己!bug是存在的,但不是在单片机,而是在写程序的自己!其实在初始化中已经开了外部中断1和定时1中断,但在修改程序时将定时中断1程序屏蔽掉了,导致定时中断1找不到入口,而又重新开始运行。只不过在没有用DIVM=0X01时,因为运行速度很快,没有感觉到已经复位了,而用了DIVM=0X01后,速度慢了,才感觉到程序复位了。感谢所有提供帮助的网友,同时也在此提醒一下初学C语言编程的朋友,如果开了中断,一定要有相应的中断程序函数存在,否则将会出现预想不到的千奇百怪的现象。

使用特权

评论回复
9
NE5532| | 2012-8-18 13:08 | 只看该作者
这个问题经过网友的引导已经解决。其实诡异的不是单片机,糊涂的是自己!bug是存在的,但不是在单片机,而是在写程序的自己!其实在初始化中已经开了外部中断1和定时1中断,但在修改程序时将定时中断1程序屏蔽掉了, ...
fxhfxh 发表于 2012-8-18 12:42


所以结论还是——越奇怪的问题,原因越低级。

使用特权

评论回复
10
misra| | 2012-8-18 13:13 | 只看该作者
8# fxhfxh
呵呵  这一点 你会记得很深的 几年前 我也遇到这问题  估计几乎所有都会遇到这问题  并且一般书上还不讲这条。

另外 即便不开中断  也应该弄中断服务程序。稳定性好。
具体可看keil手册 。
当然如果你搞过汇编 就肯定知道这点了

使用特权

评论回复
11
fxhfxh|  楼主 | 2012-8-18 13:55 | 只看该作者
9# NE5532
:handshake

使用特权

评论回复
12
fxhfxh|  楼主 | 2012-8-18 13:55 | 只看该作者
10# misra
:handshake

使用特权

评论回复
13
redcar| | 2012-8-18 14:45 | 只看该作者
我从来不怀疑单片机,1个可以量产,而且生存N年的MCU,没有理由有如此明显的BUG.
有BUG的MCU,早就死了

使用特权

评论回复
14
草根白骨精| | 2012-8-18 16:09 | 只看该作者
1:没有看到你整个程序不好说
2:中断程序没看到,如果开启了而没有程序,那么就会不断的重开始执行
3;编写有警告没有在意而出现不是你想要的结果

使用特权

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

本版积分规则

52

主题

380

帖子

1

粉丝