📄 wendukongzhixitong.txt
字号:
MOV R4,32H
MOV R3,2AH ;Y(k)送R3R2
MOV R2,#00H
LCALL CPL1 ;取Y(k)的补码
LCALL DSUM ;计算E(k)
MOV 39H,R7 ;E(k)送39H和3AH
MOV 3AH,R6
MOV R5,35H ;Ki送R5R4
MOV R4,36H
MOV R0,#4AH ;积始地址4AH送R0
LCALL MULT1 ;Pi=Ki*E(k)
MOV R5,39H ;E(k)送R5R4
MOV R4,3AH
MOV R3,3BH ;E(k-1)送R3R2
MOV R2,3CH
LCALL CPL1 ;对E(k-1)求补
LCALL DSUM ;求[E(k)-E(k-1)]
MOV R5,33H ;Kp送R5R4
MOV R4,34H
MOV R0,#46H ;积始地址46H送R0
LCALL MULT1 ;求Pp
MOV R5,49H ;Pp的高16位送R5R4
MOV R4,48H
MOV R3,4DH ;Pi的高16位送R3R2
MOV R2,4CH
LCALL DSUM ;求Pp+Pi
MOV 4AH,R7 ;和存于4AH和4BH
MOV 4BH,R6
MOV R5,39H ;E(k)送R5R4
MOV R4,3AH
MOV R3,3DH ;E(k-2)送R3R2
MOV R2,3EH
LCALL DSUM ;计算E(k)+E(k-2)
MOV A,R7 ;和存于R5R4
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3,3BH ;E(k-1)送R3R2
MOV R2,3CH
LCALL CPL1 ;对E(k-1)求补
LCALL DSUM ;计算[E(k)+E(k-2)-E(k-1)]
MOV A,R7 ;和存于R5R4
MOV R5,A
MOV A,R6
MOV R4,A
MOV R3,3BH ;E(k-1)送R3R2
MOV R2,3CH
LCALL CPL1 ;对E(k-1)求补
LCALL DSUM ;求[E(k)-2E(k-1)+E(k-2)]
MOV R5,37H ;Kd送R5R4
MOV R4,38H
MOV R0,#46H ;积始地址46H送R0
LCALL MULT1 ;求Pd
MOV R5,49H ;Pd高16位送R5R4
MOV R4,48H
MOV R3,4AH ;Pp+Pi送R3R2
MOV R2,4BH
LCALL DSUM ;求Pp+Pi+Pd
MOV A,R7 ;和送R3R2
MOV R3,A
MOV A,R6
MOV R2,A
MOV R5,2FH ;P(k-1)送R5R4
MOV R4,30H
LCALL DSUM ;求出P(k)
MOV A,R7 ;判断P(k)的值是正数还是负数
RLC A
JC L5
L6: CJNE R7,#00H,L8 ;若为正数,且超出范围的话转至L8
L9: MOV 2FH,R7 ;P(k)存于2FH和30H
MOV 30H,R6
AJMP L7
L5: MOV R7,#00H ;若为负数则值赋00H?
MOV R6,#00H
AJMP L6
L8: MOV R7,#00H ;高字节赋00H,低字节赋0FFH
MOV R6,#0FFH
AJMP L9
L7: MOV 3DH,3BH ;E(k-1)送E(k-2)
MOV 3EH,3CH
MOV 3BH,39H ;E(k)送E(k-1)
MOV 3CH,3AH
RET
;======================双字节加法子程序 ==============================
DSUM: MOV A,R4 ;双字节加法程序 r5r4+r3r2=r7r6
ADD A,R2
MOV R6,A
MOV A,R5
ADDC A,R3
MOV R7,A
RET
;====================双字节求补子程序================================
CPL1: MOV A,R2 ;双字节求补程序
CPL A
ADD A,#01H
MOV R2,A
MOV A,R3
CPL A
ADDC A,#00H
MOV R3,A
RET
;===================双字节带符号乘法子程序================================
MULT1: MOV A,R7 ;双字节带符号乘法子程序 r7r6*r5r4=r5r4(高位双字节)
RLC A
MOV SIGN1,C
JNC POS1
MOV A,R6
CPL A
ADD A,#01H
MOV R6,A
MOV A,R7
CPL A
ADDC A,#00H
MOV R7,A
POS1: MOV A,R5
RLC A
MOV SIGN2,C
JNC POS2
MOV A,R4
CPL A
ADD A,#01H
MOV R4,A
MOV A,R5
CPL A
ADDC A,#00H
MOV R5,A
POS2: ACALL MULT
MOV C,SIGN1
ANL C,SIGN2
JC TPL
MOV C,SIGN1
ORL C,SIGN2
JNC TPL
DEC R0
MOV A,@R0
CPL A
ADD A,#01H
MOV @R0,A
INC R0
MOV A,@R0
CPL A
ADDC A,#00H
MOV @R0,A
TPL: RET
;========================双字节无符号数乘法子程序==========================
MULT: MOV A,R4 ;双字节无符号数乘法子程序
MOV B,R6
MUL AB
MOV R3,B
MOV A,R4
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
CLR A
ADDC A,B
MOV R4,A
MOV A,R5
MOV B,R6
MUL AB
ADD A,R3
MOV R3,A
MOV A,R4
ADDC A,B
MOV R4,A
MOV F0,C
MOV A,R5
MOV B,R7
MUL AB
ADD A,R4
MOV R4,A
CLR A
ADDC A,B
MOV C,F0
ADDC A,#0
MOV R5,A
INC R0
INC R0
MOV A,R4
MOV @R0,A
INC R0
MOV A,R5
MOV @R0,A
RET
;========================= 8279键盘处理子程序 =================
KEYGL: PUSH ACC ;键处理子程序
PUSH PSW
PUSH DPH
PUSH DPL
MOV DPTR,#PORT8279+1 ;读FIFO/传感器 RAM命令
MOV A,#40H
MOVX @DPTR,A
MOV DPTR,#PORT8279 ;读键值
MOVX A,@DPTR
KEY0:CJNE A,#0C0H,addt ; 0键 顺序显示菜单0 ~ 3 参数: SP;KP;KI;KD
SETB SIGN3 ; SIGN3=1?显示修改值
SETB SIGN4 ; SIGN4=1, 能修改
dec 3FH
mov r7,3fh
cJNE r7,#00H,temp1
mov 3fh,#04h
mov r7,3fh
temp1:cJNE r7,#04H,temp2
SETB SIGN3 ; SIGN3=1,显示修改值
SETB SIGN4 ; SIGN4=1, 能修改
MOV 60H,#00H
MOV 40H,31H ; 31H 温度设定值
lcall ZHBCD
mov 50h,#15h
mov 51h,#16h
mov 52h,#10h
mov 53h,#00h
LCALL DISP
AJMP ENDI1
addt: ljmp add1
temp2: cjne r7,#03H,temp3
SETB SIGN3 ; SIGN3=1; 显示修改值
SETB SIGN4 ; SIGN4=1, 能修改
MOV 60H,#01H
MOV 40H,33H ; 33H KP设定值
lcall ZHBCD
mov 50h,#14h
mov 51h,#10h
mov 52h,#10h
mov 53h,#01h
LCALL DISP
AJMP ENDI1
temp3: cjne r7,#02H,temp4
SETB SIGN3 ; SIGN3=1; 显示修改值
SETB SIGN4 ; SIGN4=1, 能修改
MOV 60H,#02H
MOV 40H,35H ; 35H KI设定值
lcall ZHBCD
mov 50h,#14h
mov 51h,#10h
mov 52h,#10h
mov 53h,#02h
LCALL DISP
AJMP ENDI1
temp4: cjne r7,#01H,add1
SETB SIGN3 ; SIGN3=1; 显示修改值
SETB SIGN4 ; SIGN4=1, 能修改
MOV 60H,#03H
MOV 40H,37H ; 37H KD设定值
lcall ZHBCD
mov 50h,#14h
mov 51h,#10h
mov 52h,#10h
mov 53h,#03h
LCALL DISP
AJMP ENDI1
add1:cjne a,#0c1h,dec1
Jnb SIGN4,ENDI1
SETB SIGN3 ; SIGN3=1,显示修改值
mov a,55h
inc a
mov 55h,a
cjne a,#0ah,z1
mov 55h,#00h
mov a,54h
inc a
mov 54h,a
cjne a,#0ah,z1
mov 54h,#00h
mov 55h,#00h
z1: LCALL DISP
AJMP ENDI1
dec1: cjne a,#0c2h,keym ; -1
Jnb SIGN4,ENDI1 ; SIGN4=0, 退出
SETB SIGN3 ; SIGN4=1, 能修改; SIGN3=1, 显示修改值
mov r1,#55h
cjne @r1,#00h,dec11
dec r1
cjne @r1,#00h,dec2
mov 55h,#00h
mov 54h,#00h
jmp dec0
dec2: mov 55h,#09h
dec11: dec @r1
dec0: lcall disp
AJMP ENDI1
KEYM: cjne a,#0c6h,ENDI1 ; 确认
SETB SIGN5
CLR SIGN3 ; SIGN3=0 ,显示温度值
CLR SIGN4 ; SIGN4=0, 不能修改
ENDI: Jnb SIGN5,ENDI1 ; 是否确认
MOV A,54H ; 确认 SIGN5=1
SWAP A
MOV R0,55H
ORL A,R0
MOV 41H,A
CLR SIGN4
LCALL BCDZH
MOV A,60H
CJNE A,#00H,IN1
MOV 31H,41H ; #00H: IN 31H R(K)
lcall disp
IN1: CJNE A,#01H,IN2
MOV 33H,41H ; #00H: IN 33H PK(K)
lcall disp
IN2: CJNE A,#02H,IN3
MOV 35H,41H ; #00H: IN 35H KI(K)
lcall disp
IN3: CJNE A,#03H,ENDI1
MOV 37H,41H ; #00H: IN 31H R(K)
ENDI1: lcall disp
POP DPL
POP DPH
POP PSW
POP ACC
ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -