⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wendukongzhixitong.txt

📁 用汇编语言做温度控制系统程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        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 + -