1 、导言
该数据收集体系选用硬中止办法,经过对KH-9300板卡上的8254守时器和8259中止操控器编程守时触发中止并对外部脉冲计数,规划中每隔1 s收集1次数据,数据收集卡第0和1号通道选用串行办法并运用板卡上的内部时钟进行计时,第2、3、4、5号通道输人外部计数脉冲计数。一切通道选用内部门控信号。当串行的第0~1通道计数满时,就向板卡上的8259中止操控器的IN1引脚宣布中止指令。经过8259中止操控器向核算机内的8259A的中止引脚(这儿规划为第5号中止引脚)宣布中止指令。CPU呼应中止请求,履行中止程序,对板卡上第2、3、4、5号通道进行数据收集,并把收集后的数据写入文件。
2、 板卡及8254守时、计数常数的设置
时钟跳线的设置:0号通道选内部时钟,0和1两通道级联,2~5号通道接外部脉冲,选外部时钟。门控跳线设置为一切通道都选内部门控;基地址设置为280H;中止号设置为INT5(中止向量号为13);内部时钟频率设置为2 MHz。
(1)守时常数的核算 守时系数=要求守时的时刻/时钟脉冲的周期。若守时的时刻为1 s,内部时钟频率为2 MHz。则时钟脉冲的周期为1 s/2 MHz=0.5μs,守时系数为1s/0.5 μs=2×106=2 000 000。因为8254守时计数器6个通道为16位减计数器,每个通道计数值最大为216-1=65 535《2 000 000。所以有必要选用2个通道计时,规划中将第0通道和第1通道串联。由2×106=1 000×2×103,则守时系数:第0通道为2 000,第1通道为1 000。
(2)计数通道的初始化 计数通道常数设置为最大值:FFFFH。最大计数频率为65 535 Hz/s。
(3)计数累计脉冲量核算 计数累计脉冲量=FFFFH-计数器本次读数。
3 、用Turbo C编写中止服务程序的办法
C言语中止服务程序可由3部分完结。即编写中止服务程序、装置中止服务程序、激活中止服务程序。
(1)编写中止服务程序因为发生中止时,有必要保存被中止程序中止时的一些现场数据,即保存断点,这些值都在寄存器中,以便康复中止时使这些值康复。以持续履行本来被中止的程序。 Turbo C为此供给一种新的函数类型:inter-rupt,它将保存由该类型函数所指寄存器的值,而在退出该函数时,再康复这些寄存器的值,因而用户的中止服务程序有必要界说成该类型的函数,如中止服务程序名为myp,则可将这个函数阐明为:
Void interrupt myp(unsigned bp,unsigned di,unsigned si,unsigned ds,unsigned es,unsigned dx,unsigned cx,unsignedbx,unsigned ax,unsiged ip,unsigned cs,unsigned flags)
小形式下程序只要1段,在中止服务程序中用户可像用无符号整数变量相同运用这些寄存器。若中止服务程序中不运用上述寄存器,则可不写这些寄存器参数,而写为:
关于硬件中止,则在中止服务程序完毕前要将中止完毕指令字送至体系的中止操控寄存器,其端口地址为0x20,中止完毕指令字也为0x20,即outportb(0x20,0x20)。
在中止服务程序中,若不答应其他优先级较高的中止打断它,则要制止中止,可用函数disable()来封闭中止。若答应中止,则可用开中止函数enable()来敞开中止。
(2)装置中止服务程序界说中止服务程序后,还需将这个函数的人口地址填人中止向量表中,以便发生中止时程序能转入中止服务程序去履行。为防止正在改写中止向量表时,又发生其他中止而导致程序紊乱,可先封闭中止,待改写完结后,再敞开中止。
其间faddr是中止服务程序的进口地址,其函数名代表进口地址,而inum表明中止类类型,setvect()函数设置中止向量,上述界说的install()函数将完结把中止服务程序进口地址填入中止向量inum中。
(3)中止服务程序的激活关于硬件中止,在相应的中止请求线(IRQi,i=0,1,2,…,7)发生一个由低到高的中止请求电平,这个进程必需由接口电路来完结,这个电平可用程序操控完结,如发指令outportb(端口地址,指令)。然后程序等候中止,当中止发生时,便去履行中止。
(4)康复被修正的中止向量为在主程序完毕后,康康复来的中止向量以指向原中止服务程序,在主程序开始时,存下原中止向量的内容,用getvect()完结,如j=(char*)getvect(0x1c),这样指针变量中将是0xlc中止程序的进口地址,当主程序完毕时,可康康复来的中止服务进口地址,可用setvect(0x1c,i),也可用install()函数再次装置。
4 、程序规划
4.1 程序阐明
程序首要分为主程序和中止处理子程序2部分。其间首要程序是选用 I/O接口的输入输出函数进行初始化。包含设置KH-9300守时计数器8254和中止操控器8259的工作办法、初值、开中止、触发办法,对核算机的 8259开中止等。在主程序的最终把收集的通道数据写入文件。而中止处理子程序是由CPU在每次接到IRQ5中止请求信号后当即履行,首要作用是把KH- 9300卡的第2、3、4、5号通道的计数值收集到程序的变量中。主程序和中止处理子的程序流程别离如图1、图2所示。
4.2 编程注意事项
(1)不要用任何DOS功用调用,防止DOS重入。尽量防止运用与屏幕相关、查看状况、读键盘及任何磁盘I/O子程序:防止运用浮点(实数)运算。中止服务程序中所调用函数尽量是BIOS级库函数;(2)中止程序履行的时刻应尽或许的短。若 ISR中耗费时刻过长,在完结一次运转前有或许被再次调用,导致体系被挂起。(3)操控变量可所以全局变量,也可经过寄存器变量传递给interrupt 函数;(4)若实时操控体系对中止呼应速度要求较高,可选用嵌入汇编技能。
4.3 程序调试成果
图3为调试成果。图3中每1行后4个数据为每1 s所收集的4通道数据,第1列是第几次收集,即第几秒收集,后4列是第2、3、4、5通道所收集的数据。因而收集的数据具有较高稳定性。
5、 完毕语
从程序调试数据可看出,收集到的数据具有很高的稳定性。该体系可便利组成接连监测体系或其他需求记载脉冲的体系。一起使用Turbo C可便利的操控其端口和硬件中止。
责任编辑:gt