在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。

1、软件抗干扰方法的研究

在工程实践中,软件抗干扰研究的内容主要是:一、消除模拟输入信号的噪声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。

1.1、指令冗余

CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当乱飞到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码,程序将出错。若“飞”到了三字节指令,出错机率更大。

在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使乱飞程序飞到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。

此外,对系统流向起重要作用的指令如RET、RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。

1.2、拦截技术

所谓拦截,是指将乱飞的程序引向指定位置,再进行出错处理。通常用软件陷阱来拦截乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。

(1)、软件陷阱的设计

当乱飞程序进入非程序区,冗余指令便无法起作用。通过软件陷阱,拦截乱飞程序,将其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的乱飞程序引向复位入口地址0000H的指令。通常在EPROM中非程序区填入以下指令作为软件陷阱:

NOPNOPLJMP0000H其机器码为0000020000。

(2)、陷阱的安排

通常在程序中未使用的EPROM空间填0000020000。最后一条应填入020000,当乱飞程序落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:

NOPNOPRETI返回指令可用“RETI”,也可用“LJMP0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、完善,用“LJMP0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。

考虑到程序存贮器的容量,软件陷阱一般1K空间有2-3个就可以进行有效拦截。

1.3、软件“看门狗”技术

若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。

“看门狗”技术可由硬件实现,也可由软件实现。在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件看门狗可有效地解决这类问题。

笔者在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch、T1Watch,主程序每循环一次,MWatch加1,同样T0、T1中断服务程序执行一次,T0Watch、T1Watch加1。在T0中断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。当然,对主程序最大循环周期、定时器T0和T1定时周期应予以全盘合理考虑。限于篇幅不赘述。

2、系统故障处理、自恢复程序的设计

单片机系统因干扰复位或掉电后复位均属非正常复位,应进行故障诊断并能自动恢复非正常复位前的状态。

2.1、非正常复位的识别

程序的执行总是从0000H开始,导致程序从0000H开始执行有四种可能:一、系统开机上电复位;二、软件故障复位;三、看门狗超时未喂狗硬件复位;四、任务正在执行中掉电后来电复位。四种情况中除第一种情况外均属非正常复位,需加以识别。

(1)、硬件复位与软件复位的识别

此处硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H,SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为1。那么系统复位时只需检测PSW.5标志位或SP值便可判此是否硬件复位。

由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态,因此可选取片内某一个或两个单元作为上电标志。设40H用来做上电标志,上电标志字为78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。

(2)、开机复位与看门狗故障复位的识别

开机复位与看门狗故障复位因同属硬件复位,所以要想予以正确识别,一般要借助非易失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为AAH),而在主程中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。

(3)、正常开机复位与非正常开机复位的识别

识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标准的测控系统,完成一次测控任务需1小时。在已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。

2.2、非正常复位后系统自恢复运行的程序设计

对顺序要求严格的一些过程控制系统,系统非正常复位否,一般都要求从失控的那一个模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态、系统的进程值、当前输入、输出的值,当前时钟值、观测单元值等,这些数据既要定时备份,同时若有修改也应立即予以备份。

当在已判别出系统非正常复位的情况下,先要恢复一些必要的系统数据,如显示模块的初始化、片外扩展芯片的初始化等。其次再对测控系统的系统状态、运行参数等予以恢复,包括显示界面等的恢复。之后再把复位前的任务、参数、运行时间等恢复,再进入系统运行状态。

应当说明的是,真实地恢复系统的运行状态需要极为细致地对系统的重要数据予以备份,并加以数据可靠性检查,以保证恢复的数据的可靠性。

其次,对多任务、多进程测控系统,数据的恢复需考虑恢复的次序问题。

系统基本初始化是指对芯片、显示、输入输出方式等进行初始化,要注意输入输出的初始化不应造成误动作。而复位前任务的初始化是指任务的执行状态、运行时间等。

对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充完善,才能取得较好的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片机系统是完全可行的。

【分享】如果您觉得本文有用,请点击右上角“…”扩散到朋友圈!

关注电子工程专辑请搜微信号:“eet-china”或点击本文标题下方“电子工程专辑”字样,进入官方微信“关注”。

单片机c语言 软件抗干扰,单片机软件抗干扰的几种常见方法相关推荐

  1. 单片机c语言编程下载,单片机C语言编程.doc

    单片机C语言编程.doc 单片机C语言编程指令格式 功能简述 字节数 周期 一.数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,Ri ...

  2. arduino和单片机c语言,Arduino和单片机的区别-与非网

    Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬件(各种型号的Arduino板)和软件(ArduinoIDE).由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Ban ...

  3. stm08S单片机C语言编,STM8S单片机入门1(开发环境搭建)

    STM8S单片机开发环境由三大部分组成,包括PC机上的开发软件(集成开发软件.驱动程序等).调试&编程器ST-LINK.目标单片机电路板.如下图所示: 1.PC机上开发软件 PC机上的软件包括 ...

  4. 单片机C语言节日彩灯,单片机c语言节日彩灯控制器设计.docx

    单片机c语言节日彩灯控制器设计 湖南涉外经济学院课程设计报告课程名称:单片机原理及应用报告题目:节日彩灯控制器的设计学生姓名:所在学院:信息科学与工程学院专业班级:电子信息工程1102班学生学号:指导 ...

  5. 单片机c语言 王东锋,单片机实训总结报告.docx

    单片机实训总结报告.docx 超声波测距实训总结报告专业 电子信息工程 班级 信息091 姓名 郑干恒(15) 何清华(43) 指导教师 邬志锋 日期 2012.6. 19 广东交通职业技术学院交通信 ...

  6. 面试要求精通单片机c语言,献给广大单片机爱好者,单片机初学者一定要看,...

    社会的角落里,有一群正在为单片机很难入门而苦恼的人. 你身边如果有单片机入门者,动手能力比较强,请他帮忙,搭个简单的单片机最小电路,哪怕是控制一个 LED 闪烁的电路.只要在你眼皮底下经过电路设计.程 ...

  7. 万年历设计单片机c语言,基于51单片机的电子万年历的设计

    基于51单片机的电子万年历的设计(论文9400字) 功能要求 1. 万年历能用数码管显示阳历年.月.日.星期.[小]时.分.秒并设置指定时间的闹铃. 2. 数字式温度计要求测温范围-50~100°C, ...

  8. 单片机C语言 8,PIC单片机C语言程序设计_8_

    PICC编译器的安装<PIC单片机C语言程序(7)>一文介绍MPLABIDE7.40的安装时,我们已将光盘中的PICC编译器的压缩软件PICC8.05.rar(见该文图12)粘贴到我的电脑 ...

  9. 单片机c语言学习心得,单片机实习心得3篇

    单片机实习心得3篇 单片机实习心得篇1 最近自己对单片机特别的感兴趣,因为看到它能控制电机的转动,自己觉得很神奇.就想弄清楚它到底是怎么做到的? 我看到书上讲:单片机可以用两种语言编写,一种是c语言, ...

  10. 单片机c语言孔雀开屏,单片机C语言案例步骤教学指南.doc

    单片机C语言案例教程教学指南 一 本书的特色和教学目标 本书是中职学校电子专业的单片机基础教材.特色在于全书以"案例+项目"的形式展开,由26个案例和5个项目组成.案例为项目的前导 ...

最新文章

  1. 【安全漏洞】CVE-2021-32682 elFinder RCE 简单分析
  2. php 判断类存在,PHP怎么判断类是否存在
  3. 博弈论 斯坦福game theory stanford week 1.1
  4. 本地连接虚拟机 Oracle数据库 报ORA-12541:TNS:no listener
  5. 盘点最经典的外包案例
  6. Android之Launcher分析和修改3——Launcher启动和初始化
  7. java中序列化与反序列化_Java中的序列化
  8. IndexError:boolean index did not match indexed array along dimension 0
  9. linux文件服务器迁移方案,服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?...
  10. net执行oracle的存储过程
  11. ZipEntry的使用
  12. 极点五笔烦人的几个快捷键.
  13. 在ArcCatalog中建立空间数据库以及数据的编辑
  14. linux无线网卡模拟ap,TP-Link无线网卡怎么设置虚拟AP
  15. 二阶魔方万能还原公式_二阶魔方复原玩法
  16. C#一个解决方案创建多个项目
  17. c语言srand函数作用,C语言之rand()和srand()函数
  18. 线性动态规划-文件排版
  19. SRM 635 DIV2
  20. 【微机原理】数字电路器件—门 与门 或门 非门电路及实例

热门文章

  1. 国标GB28181协议视频智能分析平台EasyCVR,构建智慧企业AR云景解决方案
  2. Android studio开发.<大学访客车辆预约管理系统>
  3. qqc什么梗_qqc是什么
  4. python爬虫-网易云音乐的歌曲热评
  5. 红队作业 | 信息收集工具汇总
  6. 【结绳4.0】添加权限
  7. Linux图形化磁盘管理工具gparted
  8. 5 6c语言上机作业答案,C语言第五次上机作业参考答案
  9. Unix网络编程学习笔记之第11章 名字与地址转换
  10. 谈谈工作 - 神州数码篇