提高单片机应用系统的可靠性要从软硬件入手,提高系统的自身防御行为,以下所提到几种提高可靠性的方法,都不是单独使用的,只有根据实际情况将这些方法有效地结合起来,才能达到最佳抗干扰效果,使我们的单片机系统稳定可靠地工作。当然,单片机系统运行的可靠性也会受其他不确定因素的干扰。

1、指令冗余

CPU取指令过程是先取操作码,再取操作数。在程序的关键地方人为的插入一些单字节指令,或将有效单字节指令重写称为指令冗余,通常是在双字节指令和三字节指令后插入两个字节以上的NOP指令。这样即使跑飞程序飞到双字节指令和三字节指令操作数上。由于窄操作指令NOP的存在,避免了后面的指令被错误地执行,为程序纳入正轨做好准备。此外,对系统流向起重要作用的指令,如RET、RETI、LCALI.、LJMP,JC等,可以在这些指令之后插入两条NOP指令,可将跑飞程序纳入正轨,以确保这些重要指令的执行。指令冗余只能使CPU不再将操作数当作操作码错误地执行,却不能主动地将程序的错误执行方向扭转过来,要想纠止程序的错误执行方向,就需要下面的技术。

2、设计软件“陷阱”

通常在程序存储器中未使用的EPROM空间填入窄操作指令NOP,最后再填入一条跳转指令,跳转到跑飞处理程序,或者直接填入指令LJMP 0000H,当跑飞程序落到此区域。即可在执行一段空操作后转入正轨。如果未使用的EPROM空间比较大,可以均匀地填入几条空操作指令和跳转指令,这种几条空操作指令加一条跳转指令的结构我们称之为“软件陷阱”.

软件陷阱的一般结构为:

NOP

NOP

LJMP FLY

FLY为跑飞处理子程序,如果程序正常执行,软件陷阱部分是永远也执行不到的,只有在程序跑飞到陷阱里,软件陷阱会立刻将程序跳转到正常轨道。即使程序没有跑飞到陷阱里,也可以在程序执行一段错误操作后遇到一个软件陷阱,从而转入正轨。除了程序存储器的空白区域,程序的数据表结尾也应该设置软件陷阱,如果数据表比较大,应该在数据表的中间也设置软件陷阱,以保证程序跑飞到数据区能及时转入正轨。另外,如果程序存储器的空间足够大的话,可以在每两个子程序中间设 置一个软件陷阱。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。软件陷阱的数量要根据实际受到干扰的情况和程序存储器的容量来确定,如果太少不能进行有效的跑飞拦截,如果太多又会占用大量的程序存储器空间。

3、软件“看门狗”技术

跑飞的程序在执行一些错误操作之后,经常会进入“死循环”,也就足常说的“死机”.通常采用“软件看门狗”技术使程序脱离“死循环”,软件“看门狗”技术的原理是通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需要进行出错处理。在实际应用中,通常用定时中断服务程序定时地检查主程序的运行情况。例如,在RAM区选择一个字节作为软件看门狗寄存器,主程序每循环一次将该寄存器加l,定时器TO的中断服务程序每中断一次将该寄存器减l并检查一次,如果程序执行正常。看门狗寄存器不会改变或改变不大,如果看门狗寄存器发生了改变或改变很大,则说明系统陷入“死循环”.需要进行出错处理。在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断,造成看门狗失效,这时可以采用环形中断监视系统。用定时器TO监视定时器Tl,用定时器Tl监视丰程序,主程序监视定时器T0.

采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用Tl定时器进行串口通讯的测控系统,则定时器Tl不能进行中断,可改由串口中断进行监控。当然,对主程序最大循环周期、定时器T0和Tl定时周期应于全盘合理考虑。软件“看门狗”技术需要使用定时器,而在大多数的控制程序中,定时器都是紧俏的资源。这就使“软件看门狗”技术的实际应用受到了限制,我们可以采取一些技巧性的处理,将软件“看门狗”程序与其它定时程序复用同一个定时器,这样既完成定时功能又完成软件“看门狗”的功能。

4、检查RAM区标志数据及时发现严重干扰

这种方法是在RAM区中选择几个固定单元,在初始化程序中将其设置成固定的数据,只要程序正常运行,这些单元的内容是不会改变的。如果因为程序“跑飞”或其它干扰导致这些RAM单元中的任何单元的数据发生了变化,说明单片机系统已经受到了严重的干扰,不能可靠地运行下去了。我们可以在程序执行的过程中适时地检查这些RAM单元的内容,一旦发现有数据改变,立刻执行LJMP 0000 H语句,强制单片机复位。

5、刷新输出端口

排除严重干扰,当单片机系统受到严重干扰时,输出端口的状态也可能因干扰而改变,在程序的执行过程中适时地根据相关程序模块的运算结果刷新输出端口,可以排除干扰对输出端口状态的影响,使错误的输出状态及时得到纠正。

6、进行多次输入采样

避免严重干扰,强烈的干扰会影响单片机的输入信号,造成输入信号瞬间采样的误差或误读,要避免干扰的影响,通常采取重复采样,加权平均的方法。

c语言如何实现软件抗干扰,单片机软件系统抗干扰设计相关推荐

  1. c语言 计步算法,基于51单片机的计步器设计

    基于51单片机的计步器设计(任务书,开题报告,外文翻译,论文15000字) 摘  要 随着科技发展和国民健康意识的提高,许多检测健康状态的电子产品开始普及.电子计步器作为一种越来越流行的平民锻炼检测装 ...

  2. os系统好用的学术笔记软件_可靠软件系统的设计方法:学术文章摘要

    os系统好用的学术笔记软件 by Shubheksha 通过Shubheksha 可靠软件系统的设计方法:学术文章摘要 (A Design Methodology For Reliable Softw ...

  3. 51单片机c语言延时计算软件,51单片机精确延时程序大集合+初值计算工具

    在论坛上看到不少不错的延时程序,整理如下共同分享: 精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层循环+5 ;延时5秒左右 DELAY5S:PUSH   04H;2个 ...

  4. 手机软件测试系统,软件测试之手机软件系统测试用例设计方法.doc

    软件零碎测试用例计划举例 目次 TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc117478167"一.等价类剖析法PAGEREF_Toc117 ...

  5. c语言做土壤湿度传感器程序,单片机土壤湿度传感器设计 程序编译错误

    捕获.PNG (74.97 KB, 下载次数: 1) 没有声明,这里怎么解决 2019-12-19 16:18 上传 #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 ...

  6. 基于51单片机的温度报警器设计

    目 录 前言.............................................................................................. ...

  7. C语言软件分层的方法,单片机程序分层设计思想

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 如今C语言已经成为单片机程序设计公认的语言.我用C语言进行单片机程序设计也有两年多的时间了,C语言程序的特点使我对单片机开发更加感兴趣.让我从一个了解单片 ...

  8. keil用c语言怎么编辑器,用keil软件编写单片机程序的步骤

    猜你感兴趣: 新手教程:单片机的学习实践步骤 运用单片机便是了解单片机硬件结构,以及内部资源的运用,在汇编或C语言中学会各种功用的初始化设置,以及完成各种功用的程序编制. 运用按钮输入信号,发光二极管 ...

  9. c语言开发数控软件编程电源,基于单片机数控电源设计.doc

    基于单片机数控电源设计 1 绪论 在现在的生活中,我们常常会用到各种电源,电源技术服务于各行各业.直流稳压电源是电子技术中常用设备,广泛应用于实验.教学.科研等领域.数控电源一般采用单片机系统来构成. ...

最新文章

  1. she's the one
  2. 分析B站10万条弹幕后,发现了歪嘴战神的终极奥义!
  3. OpenCV Shi-Tomasi角点检测
  4. PostgreSQL csvlog 源码分析
  5. 小程序获取StorageSync时候的坑
  6. srs代码学习(4)-怎么转发流
  7. 点关机后主机不能自动关机的原因
  8. Des与3Des加密解密
  9. svn , github工作流
  10. N---Exponentiation
  11. android中常用的宏,iOS-开发中常用的宏有哪些?
  12. Python获取微信好友地址以及性别并生成可视化图表
  13. 操作系统原理与Linux实践教程申丰山版习题2的2-3答案
  14. 什么是IAST(交互式应用安全测试)?
  15. 谋定而后动,理想不相信热血
  16. 有IPV6无法登录IPV6网站*
  17. APK编辑器v2.4.3强行修改app背景图、去广告、重新架构等
  18. 电视机与计算机共享,win7与智能电视怎么共享
  19. Word题注带一级标题,由图一.1变为图1.1
  20. 小米自带360怎么卸载_每日话题:小米下架360产品 卸载内置软件功能好吗?

热门文章

  1. 显而易看app的订阅内容-草莓
  2. VUE入门笔记,第一节
  3. 收集用户开车时的音乐需求 Spotify启动了公测计划
  4. 我的四轴专用PID参数整定方法及原理---超长文慎入(转)
  5. IGBT是什么东西 中国IGBT前五大品牌排名
  6. cesium加载离线tms切片
  7. Iterable的常见方法以及含义
  8. nvm 无法下载_Windowsnvm的安装使用(及排坑)
  9. 教你如何“绑架”用户,说说“换用成本”
  10. MySQL数据库同步数据到Oracle