该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
;====================================================
;主程序
;====================================================
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP ITOP
ORG 1000H
MAIN: LCALL AJZCX
LCALL DACJ
LCALL XSZCX
LCALL PIDYS
;====================================================
;按键子程序
;====================================================
AJZCX: MOV DPTR,#BFFF H ;键盘地址BFFFH
MOVX A,@DPTR ;读键盘状态
ANL A,#0FH ;屏蔽高三位
MOV R3,A ;保存键盘状态
LCALL D10ms ;调用10ms子程序消抖
MOVX A,@DPTR ;再读键盘状态
ANL A,#0FH ;屏蔽高三位
CJNE A,R3,PASS ;两次结果不一样说明是抖动,转RETURN
KEY1: CJNE A,#1EH,RETURN ;K1键未按下,转RETURN
LJMP DOKEY1 ;是第1键按下,转键1处理子程序
KEY12: CJNE A,#1CH,KEY13 ;k1 K2键未按下,转KEY1,3处理子程序
LJMP DOKEY12 ;是k1 K2键按下,转k1 K2键处理子程序
KEY13: CJNE A,#1BH,KRETURN 未按下,转RETURN
LJMP PKEY2 ; 是k1 ;K3键按下,转k1 ;K3键处理子程序
KEY4: CJNE A,#07H, ; k1 ;K3键键未按下,转RETURN
RETURN:RET
DOKEY1: INC 00H
MOV R1,OOH
CJNE R1,#01H,CUNCHU
LJMP RETURN
DOKEY12:ADD A,#20H
DA A
DOKEY3:SUB A, #20H
DA A
CUNCHUW:MOV 02H,01H
CUNCHUS:MOV 03H,01H
RET
;====================================================
; 数据采集计算子程序
;====================================================
DRSJ: MOV R1, #06H ;A/D8路循环采样
MOV DPTR, #7FE3H
MOV R7, #08H
LOOP: MOVX @DPTR, A
MOV R6, #0AH
DLAY: NOP
NOP
NOP
DJNZ R6, DLAY
MOVX A, @DPTR
MOVX @R1, A
INC DPTR
INC R1
DJNZ R7, LOOP ;采样结束
ADD 06H, 07H
ADD 06H, 08H
ADD 06H, 09H
MOV R0, #04H
DIV 06H, R0
MOV 04H, 06H
ADD 0AH, 0BH
MOV 0AH, 0CH
MOV 0AH, 0DH
DIV 06H, R0
MOV 04H, 06H
RET
;====================================================
; 显示子程序
;====================================================
XSZCX: SHOW: MOV P2,#0FFH
MOV A,R1 ;R1中存放A/D转换后的数据
MOV B,#100
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,#11111011B
MOV P0,A
CALL DELAY
MOV A,B
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,#11111101B
MOV P0,A
CALL DELAY
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,#11111110B
MOV P0,A
CALL DELAY
MOV P2,#0FFH
SETB P1.4
RET
;====================================================
延时间子程序
;====================================================
DELAY: MOV R3,#30
D1: MOV R4,#50
DJNZ R4,$
DJNZ R3,D1
RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0A7H,0A1H,86H,8EH,0FFH
;====================================================
; PID运算输出控制子程序
;====================================================
GEC1 EQU 00H
GEC2 EQU 00H
MOV R0, #14H
MOV R0, 10%
05H>R0?
MOV GEC1, R0
MOV GEC2, 04H
LCALL A
B: MOV R0, #7FFFH ;D/A把信号转换成矩形波
LP: MOV A, #DATA1
MOVX @R0, A
LCALL DELAY1
MOV A, #DATA2
MOVX @R0, A
LCALL DELAY2
SJMP LP ;D/A信号转换结束
MOV GEC1, R0
MOV GEC2, 05H
LCALL A
LCALL B
RET
A: CONS0 EQU ? ;存放系数a0
CONS1 EQU ? ;存放系数a1
CONS2 EQU ? ;存放系数a2
SUB1 EQU ? ;存放偏差值e(k)
SUB2 EQU ? ;存放偏差值e(k-1)
SUB3 EQU ? ;存放偏差值e(k-2)
MID1 EQU ? ;存放乘积a0e(k)
MID2 EQU ? ;存放乘积a0e(k-1)
OUTP1 EQU ? ;存放U(k-1)
BACK: MOV A, GEC2
SUB A, GEC1 ;计算e(k)
MOV SUB1, A
MOV R1, CONS0 ;取a0
MUL R1, A ;a0e(k)放入R1
MOV MID1, R1 ;a0e(k)放入暂存单元
MOV A, SUB2 ;取e(k-1)
MOV R2, CONS1 ;取a1
MUL R2, A
MOV MID2, R2 ;a1e(k-1)放入暂存单元
MOV A, SUB3
MOV R3, CONS2 ;取a2
MUL R3, A
ADD R3, MID1
SUB R3, MID2
ADD R3, OUTP1
PUSH R3 ;输出量压栈
MOV A, SUB2
MOV SUB3, AL
MOV AL, SUB1
MOV SUB2, AL
JMP BACK
RET
;====================================================
; UC(k)运算子程序
;====================================================
ORG 22D0H
UCKPR: MOV FX, 00ACH
MOV GX, #003CH
MOVX USH,#04H ;设定ET(i)个数
MOV IX,#0004H
MOV TS,#4500H ;数据暂存区清0
MOVX AL,#00H
STB AL,[TS]
STB AL,[TS]
STB AL,[TS]
STB AL,[TS]
LOOP5: ADD FX, IX ;取系数a(i)存放地址
ADD GX, IX ;取ET(i存放地址
MOV BX, GX
LCALL FBMUL ;调用浮点数乘法子程序
MOV UT, #4200H
MOV TS, #4500H
MOV AX, UT
MOV BX, TS
LCALL FBADD ;调用浮点数加法子程序
MOV TS, #4500H
MOV TR, #4000H
MOVX DL, [TR]
STB DL, [TS]
MOVX DL, [TR] ;转移运算结果
STB DL, [TS]
MOVX DL, [TR]
STB DL, [TS]
MOVX DL, [TR]
STB DL, [TS]
DJNZ USH, LOOP5
MOV FX, #00BCH
MOV HX, #0030H
MOVX USH, #03H
MOV IX, #0004H ;设定UC(i)个数
LOOP6: ADD FX, IX ;取系数b(i)存放地址
ADD HX, IX ;取UC(i)存放地址
MOV AX, FX
MOV BX, HX
LCALL FBMUL ;调用浮点数乘法子程序
MOV UT, #4200H
MOV TS, #4500H
MOV AX, UT
MOV BX, TS
LCALL FBSUB ;调用浮点数加法子程序
MOV TS, #4500H
MOV TR, #4100H
MOVX DL, [TR] ;转移运算结果
STB DL, [TS]
MOVX DL, [TR]
STB DL, [TS]
MOVX DL, [TR]
STB DL, [TS]
MOVX DL, [TR]
STB DL, [TS]
DJNZ USH, LOOP6
MOV TS, #4500H
MOVX LL, [TS] ;存UC(i)个数
MOVX LH, [TS]
MOVX ML, [TS]
MOVX MH, [TS]
RET ;返回
;====================================================
; 报警子程序ALARM
;====================================================
ALARM:MOV A , R1
SUBB A , R2
RLC A
JB CY
LCALL FLASHI
LCALL SOUND
NEXT1 MOV A, R1
SUBB A,R5
RLC A
JNB CY,NEXT2
LCALL FLASHI
LCALL SOUND
NEXT2 RET
FLASH SETB P1.0
LCALL DELAY
CLR P1.0
LCALL DELAY
SOUND SETB P1.1
MOV R4 #64H 延时100ms