打印
[51单片机]

单片机程序编写方式与抗干扰有关吗?

[复制链接]
1619|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
创隆电子|  楼主 | 2014-8-13 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做的工控设备中偶然发现的问题,很奇怪,也不知道咋回事,我在实际中用汇编语言编写的程序无论多大磁场干扰与静电干扰都能正常工作,相同的功能用C写的程序就不行,容易受到干扰死机,
定时器中只是定时并根据时间控制标志位(主程序再根据标志位执行输出控制与赋值),不容易受干扰。
但把赋值与控制IO口输出放到定时器中就容易受干扰
以上测试的坏境是(3.1kw私服与16KV高压静电)电源是共用一个220V插座,主要测试电源干扰与电磁干扰。

相关帖子

沙发
gx_huang| | 2014-8-13 20:00 | 只看该作者
用C和汇编,和干扰关系不大。
除非你的软件架构完全不一样。

使用特权

评论回复
板凳
受不了了| | 2014-8-13 20:03 | 只看该作者
呵呵,真是个奇葩的结论

使用特权

评论回复
地板
创隆电子|  楼主 | 2014-8-13 22:07 | 只看该作者
软件执行过程坑定不一样的

使用特权

评论回复
5
ayb_ice| | 2014-8-14 08:29 | 只看该作者
本帖最后由 ayb_ice 于 2014-8-14 09:44 编辑

你这应该是临界代码的问题吧
与ASM与C是没有问题的

使用特权

评论回复
6
创隆电子|  楼主 | 2014-8-14 08:40 | 只看该作者
临界代码啥意思呀?还请指教,如何解决呢?注意哪些呢?在今后编程时要注意哪些呢

使用特权

评论回复
7
kerby81| | 2014-8-14 08:42 | 只看该作者
可能定时器中断那里有问题

使用特权

评论回复
8
创隆电子|  楼主 | 2014-8-14 08:44 | 只看该作者
定时器中得变量与IO口操作,其他地方是没有用到的,只是放到定时器中就容易出错,放到外部就没有事,相同功能程序C编写的容易出错,汇编写的就很强,会不会和程序执行的过程有关

使用特权

评论回复
9
a948523778| | 2014-8-14 09:12 | 只看该作者
汇编运行的快些,你用C写是不是响应不过来死机啊.

使用特权

评论回复
10
ayb_ice| | 2014-8-14 09:50 | 只看该作者
有些资源你要用别人也要用,可能你用但没有用完,别人又用了,返回时已经破坏了你的操作,你接用就会出错

最简单的示例

U32 counter = 0;
void main(void)
{
   counter++;

   while(1);
}

某个中断
void __isr_xx(void)
{
    counter++;
}

这个最简单的程序其实有可能不能实现目的,
有些MCU就没有问题,有些MCU就有可能有问题,没有问题的用的不好也可能有问题

使用特权

评论回复
11
创隆电子|  楼主 | 2014-8-14 12:00 | 只看该作者
变量其他地方没有用到,整整执行过程是这样的,用了定时器0与定时器1, ,在定时器0中放置变量,并++,通过变量的次数也就知道定时的时间,到达时间控制led指示灯,定时器1中执行显示定时器0中得变量 ,主程序中检测按键,(例如的,嘿嘿)定时器0计数到达控制LED亮,收到干扰后表先定时器0变量到达,没有输出、主程序按键不起作用,但定时器1照常执行。如果把定时器0中得变量与控制LED放到主程序中就没事,定时器0中只设标志位


使用特权

评论回复
12
创隆电子|  楼主 | 2014-8-14 12:01 | 只看该作者
坑定是程序跑飞了,但是为什么每次跑飞状态都一样

使用特权

评论回复
13
创隆电子|  楼主 | 2014-8-14 12:02 | 只看该作者
都是在定时计数到达

使用特权

评论回复
14
创隆电子|  楼主 | 2014-8-14 12:04 | 只看该作者
为什么放到定时器外部就没事了

使用特权

评论回复
15
逍遥派掌门| | 2014-8-14 16:13 | 只看该作者
上代码看看吧,干说没有意义。

使用特权

评论回复
16
创隆电子|  楼主 | 2014-8-14 19:34 | 只看该作者
代码太多了,不好意思

使用特权

评论回复
17
chenyu988| | 2014-8-15 17:12 | 只看该作者
不用在定时器里改IO口状态。

使用特权

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

本版积分规则

42

主题

338

帖子

1

粉丝