图5臭氧紫外灯驱动控制电路
图6 实时时钟电路
10
图7 电磁阀等驱动电路
图8 质量流量控制电路
11
4 系统软件
4.1 软件模块结构
根据需求分析以及随后的系统分析和可行性分析,我们采用的是基于前后台的控制方式:前台为各种事件的响应代码,以中断服务程序为主;后台是主流程循环以及各种的定时性操作。整个软件结构按功能可以分为下面几个模块。
4.1.1各模块介绍
在整个的多元气体校准仪系统的软件总体设计上,采用的是模块化的设计方法。这样便于协同开发并且在功能扩展和系统以后的升级上都十分方便。
串行通讯控制模块 在整个系统的正常执行流程过程中,只要一有中断事件的发生就会引起相应的事件处理代码的执行即中断服务程序的响应。由于在实际的应用中,用户与本多元气体校准仪的主体硬件架构是分离的,甚至可以远在两地,并且主控于具体执行部分是分离的,所以在两者之间的通讯实现上要考虑上位机发来的ASCII码的速度问题。速度太慢、速度适中和速度很快的情况下都应该能够顺利的完成通讯。在具体实现策略的选择上我们考虑了两种方案:一个是查询(Poling)方式;一种是采用中断的实现方式。 在查询方式下,由主流程在一个主循环里反复的通过检查特定寄存器的特殊位是否置位来判断是否有数据来到,而这部分必须与一些实行性操作控制代码顺序执行(在主循环体的内部),这就导致了较慢的响应甚至明显慢于前后台的平均响应;而且在实际的应用中由于上位机软件可能是先截获用户的键盘输入,再以较快的速度将收到的字符流一起发送给执行硬件模块。在这种方式下,查询方式就很有可能造成数据的丢失。 在中断的实现方式下,在各种中断处理事件没有发生时CPU只进行各种实时性以及主控流程的执行。这样就一方面保证了CPU的效率问题,另一方面也保证了及时的处理收到的数据(省去了实时性代码的执行时间)。 在具体的软件开发中,两种方式我们都实现了。查询方式比较易于调试,可以用来检查软件系统的其他模块的正确性;而中断方式则对应用的支持比较好,我们决定在最后向Flash存储器里面下载该种方式下的系统代码。 下面简述一下中断方式下的串行通讯模块。 此模块我们设计了几个子模块:发送模块和接收模块、实时接收模块(SCI1的中断服务程序)。
12
串口有数据?是分两条汇编指令清零中断标志从SCI1数据寄存器区数据并且存到点命令缓冲区否是回车键?是是否到了点命令缓冲区尾?SCI流程入口处理该点命令否清零点命令缓冲区是初始化点命令指针否返回
图9-串行通讯流程图
下面是串行通讯接收模块的代码。分为两个部分:接收初始化代码和接收执行代码。发送模块类同。初始化代码主要是通过给DG128A的与SCI1相关的寄存器使其工作在接收模式下。
;这是通过SCI接收ASCII 字符流的初始化代码 INITRECE: TPA ;Transfer CCR to A accumulator ORAA #$10 ; ORed A with #$10 to Set I bit TAP ; Transfer A to CCR
13
MOVB #$34,SC1BDL ;Set BAUD =9600, in SCI1 Baud Rate Reg. MOVB #$00,SC1CR1 ; Initialize for 8-bit Data format,
;Loop Mode and parity disabled,(SC1CR1) MOVB #$0C,SC1CR2 ; Set for No Ints, and Transmitter and Receiver
enabled(SC1CR2)
;清零RDRE标志这个动作可以分为2步。
LDAA SC1SR1 ; 1st step to clear TDRE flag: Read SC1SR1
LDD SC1DRH ; 2nd step to clear TDRE flag: Read SC1DR
register
RTS ;Return from subroutine
;这是通过SCI接收ASCII 字符流的执行代码
;接口如下:接收到的数据存放到B寄存器,只接收一个字符. ;返回值:B寄存器:为正-接受了一个字符;FF-没有收到字符 TRANSRECE:
BRCLR SC1SR1,#$20, TRANSRECE1 ; Wait for RDRE flag LDAB SC1DRL PSHB
LDAA SC1SR1 ; 1st step to clear RDRE flag: Read SC1SR1
LDD SC1DRH ; 2nd step to clear RDRE flag: Write SC1DR register PULB
RTS TRANSRECE1: ; else Transmission complete, Return from Subroutine
ldab #$FF ;indicate there is not char
RTS
;这是通过SCI发送ASCII 字符流的初始化代码
;接口如下:X寄存器所指向的字符串是要通过串口发出的 INITSEND:
TPA ; Transfer CCR to A accumulator ORAA #$10 ; ORed A with #$10 to Set I bit TAP ; Transfer A to CCR
MOVB #$34,SC1BDL ; Set BAUD =9600, in SCI1 Baud Rate Reg. MOVB #$00,SC1CR1 ; Initialize for 8-bit Data format,
;Loop Mode and parity disabled,(SC1CR1)
MOVB #$08,SC1CR2 ; Set for No Ints, and Transmitter
enabled(SC1CR2)
清零TDRE标志这个动作可以分为2步。
Ldab ' '
LDAA SC1SR1 ; 1st step to clear TDRE flag: Read SC1SR1
STD SC1DRH ; 2nd step to clear TDRE flag: Write SC1DR
register
; LDX #DATA ; Use X as a pointer to DATA.
14
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库多元气体校准仪(3)在线全文阅读。
相关推荐: