ORG 0000H
LJMP MAIN
ORG 0013H
LJMP MNLCJ
ORG 001BH
LJMP KGLCJ
ORG 0100H
LJMP MCLCJ
MAIN: NOP
CLR 00H
SETB IT1
SETB EX1
SETB EA
MAIN0:JB KGLCJ
SJMP MAINO
图9系统主程序流程图
4.2 模拟量采集程序
AD574A单片机通过P1口控制模拟开关DG508的输入通道的选通端A、B、C,按顺序选通8个输入通道,以下是模拟量采集的子程序以及如图10所示的流程图。
MNLCJ: SAMPLE: MOV RO,#38H MOV B,#0H
MOV DPTR,#FF2FH
MOVX @DPTR,A
WBZD1: PUSH ACC
CLR EA
WBZD2: MOV DPTR,#FF3FH
MOVX A,@DPRT
MOV @R0,A
MOV DPTR,#FF7FH
INC R0
MOVX A,DPTR
MOX @R0,A
INC B
INC R0
CJNE B,#7,WBZD2
JX : NOP
FH: POP ACC
SETB EA SETB 00H RETI
图10 模拟量采集流程图 4.3 开关量采集程序
开关量通过光电耦合器隔离,减小干扰后进入74LS241,然后直接接入AT89C51进行处理,它的处理程序如下所示。
KGLCJ: NOP
CLR EA
MOV DPTR, #7DFFH
MOVX A, @DPTR
CPL A
CJNE A, #80H, KP1
LJMP KBS1
KP1: CJNE A, #40H, KP2
LJMP KBS2
KP2: CJNE A, #20H, KP3
LJMP KBS3
KP3: CJNE A, #10H, KP4
LJMP KBS4
KP4: CJNE A, #08H, KP5
LJMP KBS5
KP5: CJNE A, #04H, KP6
LJMP KBS6
KP6: CJNE A, #02H, KP7
LJMP KBS7
KP7: CJNE A, #01H ESC
LJMP KBS8
ESC: CLR OOH
SETB EA
LJMP MAIN0
4.4 脉冲量采集程序
由于脉冲量可以直接被单片机识别,所以不需要任何转换环节,仅需要进简单的隔离处理即可进入单片机。其处理程序如下:
PAUSEE0:JNB P3.2, PAUSE0 ; 若INT0=0,往下执行;
PAUSE1:JB P3.2,PAUSE ; 若INT0=1,不往下执行;
RET ; 返回主程序执行下一条指令;