关键词:监控系统,单片机,双端口存贮器,WDT
制作微机监控系统时,若受监控对象本身也是一个微机系统,且又没有电路图、程序等资料时,如何采集对象的内部数据(如CPU状态等),如何修改对象的程序方不至令原系统运行不稳定和崩溃,如何充分利用监控对象的资源,是一个带有普遍性的问题。
笔者研制的“数字实验监控系统”,其主要功能是采集30台学生实验机状态和过程信息,送往中心主机显示。监控对象是一台型号为DLES的数字电路实验机,这是某公司的产品,除简单的用法说明书外别无其它资料。该机的核心是单片机8031,带6位键盘和数码管显示、并行口8155等,可选择CPU工作方式产生各种实验信号。
1用双端口RAM采集数据
监控系统的首要任务是获取受控对象的各种状态信息。用IO线取得的只是其外部信息,且当高频时容易遗漏。要取得重要的内部信息,必须设法使监控对象的CPU自动送出信息,即采用双CPU通讯。无论用并行通讯还是串行通讯,都要大幅修改原机程序,且要占用原机CPU很多等待、检测通讯口的时间,很容易破坏原机的固有时序。较好的方法是采用共享存贮器方式,只要在原机程序的适当位置插入一段程序,令其定时将自身的重要信息(例如片内RAM的256字节内容)送到共享存贮器就可以了。
本系统采用双端口存贮器IDT7132来实现两CPU的通讯。双口存贮器有2套独立的IO电路,可供2个CPU在不同时刻读写各个存贮单元。但同时访问同一存贮单元会产生冲突。IDT7132有一套冲突仲裁电路,使先到一方获得优先权实现读写 *** 作,而向另一方发出一个冲突信号BUSY。
冲突发生时,访问存贮器失败的一方要将刚失败的一句指令再执行一次,本系统是将BUSY线接到单片机的中断线INT0,电路见图1。但单片机的程序指针PC不能直接被读写,而中断的发生又是随机的,无法掌握其出现的时刻,要重复执行中断前的一句指令殊不容易。为实现这功能,用了一点技巧:因为,中断服务程序执行前,PC值必自动压入堆栈,可在中断服务程序中将该PC值出栈,作减3处理后再入栈,则中断结束出栈的PC值已退回指向到中断前的一句指令了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)