控制算法以及控制值输出及时钟累进等环节,均以调用子程序实现,以使次序脉冲清晰。
中断服务程序的框图如图4-3所示。
保护现场重置定时器/计数器初值采样数据处理是投入报警否?报警报警灯全灭否控制算法及控制值输出时钟累进判到24h否?否是时钟复零恢复现场返回
图4-3 中断服务程序框图
48
每10ms执行一次。由于A累加器以及DPTR寄存器在主程序和中断服务程序中反复用到,故在进入中断服务程序后,首先要保护现场,即将A、DPTR寄存器的内容保护到堆栈中去。用SETB PSW.3指令,更换工作寄存器组,即在子程序中使用工作寄存器组1,避免数据丢失,在中断服务程序结束要恢复,即恢复A、DPTR寄存器的内容。
中断服务程序包括以下几个主要的子程序,分析如下: 1.采样子程序SAMP
根据设计的要求,为了使系统具有抗干扰能力,要求每10ms采样一组数据,依次采样电动机转速、转子工作电压、工作电流、电网电压4个参数,采样满5次后,进行中值滤波。据内存分配表可知,5次采样的结果分别存放在50H~63H共20个单元,为了便于下面进行数据处理。
采样值得存放结构如下所示:
X O X X X X O X X X X O X X X X O X X X 50H 55H 5AH 5FH
第1组采样值应分别存放在50H(转速)、55H(工作电压)、5AH(工作电流)、5FH(电网电压)中,第2组采样值分别放在51H、56H、5BH以及60H中,其他的以此类推。当经过50ms,进行5组数据采样后,20个单元均采集满。此时,50H~54H单元中位电动机转速的5次采样值,55H~59H单元中存放的是工作电压的5次采样值。即个数据的采样值在内存单元中相对集中地放在一起,为以后的数据处理创造了条件。
49
采样子程序(SAMP)的设计思想:以7CH作为每组采样数据中第一个采样值存放单元的首地址,R0作为间址寄存器,再设R1为10H,R2为循环计数器,初值为4。在硬件设计中,ADC0809连接在8155芯片上,其选通信号将由8155的B口提供,当将10H从8155口输出时,起到两个作用,一是使ADC0809的ADDC、ADDB、ADDA为000,即选通IN0通道。二是通过PB4引脚,给START引脚提供一个高电平,后再通过执行ANLA,#0EFH以及MOVX @DPTR,A两条指令,又给START引脚提供一个低电平,从而启动A/D转换,通过延时100us后,由8155的A口读取A/D转换结果,并存放在R0所指的地址单元。修改R0的内容,使R0指向存放的第二个采样值单元,接着又将R1的内容加1,指向下一个采样通道,如此循环4次,即完成一组数据的采样。
但是采样到此并没有结束,还要为下一组数据的采样做好准备。将采样值首地址记忆单元7CH的内容加1,使之指向下一组采样数据的首地址。如此5次进中断后即可完成20个数据的采集,为数据处理做好准备。但是此时必须注意,采样满5次之后,必须重新使7CH指向50H,为此在程序中及CJNZ A,#55H,SA2指令判断是否已经满5次,若已经满5次,首先使7CH置50H,同时又使软件标志F0置1,为下面数据处理程序提供信息。
程序如下:
SAMP: MOV R1, #50H MOV DPTR ,#7FF8H MOV R0, #04H ANL A ,#0EFH
50
LOOP: MOVX @DPTR ,A MOV R6, #0AH MOV R7, #05 DELAY: NOP NOP NOP
DJNZ R6, DELAY MOVX A, @DPTR MOV @R,1 A DEC R7 INC R1
DJNZ R7, DELAY INC DPTR DJNZ R0 ,LOOP LJMP RANG
2.数据处理子程序(PROC)
数据处理子程序是整个程序汇总最复杂的一个子程序。它包括中值滤波、中值传送、数据变换A、数据变换B、4个子程序。每次进入数据处理子程序均先判断处理子程序F0是否为1,若为0,不必执行;为1,则先吧F0清零,再执行数据处理子程序[15]。下面分别对子程序做简单介绍:
51