打印

stc单片机真的不稳定?

[复制链接]
6227|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ningling_21|  楼主 | 2013-3-30 13:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC89C52用于无线接收,刚开始几十分钟还能正常工作,大概一个小时后收到几次数据后单片机好像死机了一样。/******************************************************************/
/*                   主程序                               */
/******************************************************************/

        run_cnt++;
                if(run_cnt==25500)
                {
                         run_cnt=0;
                        Send_one_byte(0X01);
                        o4_led=0;
               
                        run_led= ~run_led;                                           //运行灯               
                                       
                        o4_led=1;

                        Send_one_byte(0X02);
                }



/******************************************************************/
/*                   外部中断函数                               */
/******************************************************************/
void Int_ext(void ) interrupt 0
{

        in_led=0;
        sta=SPI_Read(STATUS);
        if(RX_DR==1)
        {
                   SPI_Read_Buf(RX_PLOAD_ADDR,rx_buf,TX_PLOAD_WIDTH);
                reg_status=1;

        }
        if(TX_DS==1)
        {
                
        }
        if(MAX_RT==1)
        {
                  SPI_RW_Reg(FLUSH_TX,0);       
        }
        SPI_RW_Reg(WRITE_REG + STATUS,     sta);        //清除中断       
        in_led=1;

}

通过串口调试助手观察,接收到数据01之后主程序就停止了。只有外部中断还在定时中断(发送方定时发送数据)。

相关帖子

沙发
yhhsky| | 2013-3-30 14:10 | 只看该作者

使用特权

评论回复
板凳
zhikunWang| | 2013-4-1 16:29 | 只看该作者
不是单片机问题,是自己程序太容易跑飞。
将if(run_cnt==25500)
改为if(run_cnt>=25500)

就不容易跑飞!

使用特权

评论回复
地板
ningling_21|  楼主 | 2013-4-1 16:56 | 只看该作者
zhikunWang 发表于 2013-4-1 16:29
不是单片机问题,是自己程序太容易跑飞。
将if(run_cnt==25500)
改为if(run_cnt>=25500)

很感谢提出建议,但有理论依据么

使用特权

评论回复
5
cjseng| | 2013-4-1 22:43 | 只看该作者
你是不是开了串口中断,而没有清零串口中断标志啊?

使用特权

评论回复
6
古董| | 2013-4-2 08:25 | 只看该作者
zhikunWang 发表于 2013-4-1 16:29
不是单片机问题,是自己程序太容易跑飞。
将if(run_cnt==25500)
改为if(run_cnt>=25500)

同意这个说法!

使用特权

评论回复
7
coody| | 2013-4-2 12:48 | 只看该作者
好好检查程序吧,还是那句话,能在市场批量使用的MCU,不会那么脆弱的

使用特权

评论回复
评论
hp34401a 2013-4-3 12:51 回复TA
yes! 可更换MCU排除法。。。 
8
28182900| | 2013-4-2 12:58 | 只看该作者
STC的ic虽然垃圾,但也不至如此,多检查板子吧?

使用特权

评论回复
9
ningling_21|  楼主 | 2013-4-2 13:02 | 只看该作者
cjseng 发表于 2013-4-1 22:43
你是不是开了串口中断,而没有清零串口中断标志啊?

这个肯定清除了...

使用特权

评论回复
10
ningling_21|  楼主 | 2013-4-2 13:08 | 只看该作者
28182900 发表于 2013-4-2 12:58
STC的ic虽然垃圾,但也不至如此,多检查板子吧?

由于MCU驱动了继电器,估计是继电器造成的干扰把MCU搞挂了...

使用特权

评论回复
11
a38128895| | 2013-4-2 13:36 | 只看该作者
不知道你用的什么继电器,我在07年的时候用过好多家的继电器,都没出现这样情况,是不是电路上有不合理的地方?

使用特权

评论回复
12
28182900| | 2013-4-2 13:45 | 只看该作者
ningling_21 发表于 2013-4-2 13:08
由于MCU驱动了继电器,估计是继电器造成的干扰把MCU搞挂了...

为什么不隔离呢?

使用特权

评论回复
13
cjseng| | 2013-4-2 17:33 | 只看该作者
你直接仿真调试一下不就可以看出程序死在哪里了?

使用特权

评论回复
14
pa2792| | 2013-4-2 17:55 | 只看该作者
如果是继电器就搞死,就是你程序或者布板处理有问题。我用STC搞磁保持继电器,切合的时候电压掉落的厉害都厉害。

使用特权

评论回复
15
ningling_21|  楼主 | 2013-4-2 18:29 | 只看该作者
cjseng 发表于 2013-4-2 17:33
你直接仿真调试一下不就可以看出程序死在哪里了?

stc89c52如何仿真告诉我好么...

使用特权

评论回复
16
ningling_21|  楼主 | 2013-4-2 18:30 | 只看该作者
28182900 发表于 2013-4-2 13:45
为什么不隔离呢?

在一块普中科技学习版上面实验的,改不了...

使用特权

评论回复
17
cjseng| | 2013-4-3 01:30 | 只看该作者
ningling_21 发表于 2013-4-2 18:29
stc89c52如何仿真告诉我好么...

在KEIL里直接模拟运行啊,MCU型号选AT89C52即可。

使用特权

评论回复
18
28182900| | 2013-4-3 09:12 | 只看该作者
ningling_21 发表于 2013-4-2 18:30
在一块普中科技学习版上面实验的,改不了...

飞线,找出问题后就好办了

使用特权

评论回复
19
09电气| | 2013-4-3 18:48 | 只看该作者
>=比==好用很多,以前用定时器模拟PWM驱动舵机的时候用==很快就跑飞了,用>=就比较稳定。

使用特权

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

本版积分规则

5013

主题

17713

帖子

51

粉丝