📄 pwm-hao.asm
字号:
KP EQU 40H
KI EQU 41H
KD EQU 42H
EI EQU 43H
EI1 EQU 44H
EI2 EQU 45H
EK EQU 46H
EK1 EQU 4BH
EK2 EQU 4CH
GWEN EQU 47H
SWEN EQU 48H
TH EQU 49H
TL EQU 4AH
DFLAG EQU 10H
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP PWM
MAIN:
CLR DFLAG
; MOV SCON,#90H ;设置为方式2
MOV TMOD,#01H
SETB EA
SETB ET0
SETB TR0
MOV TH0,#00H
MOV TL0,#00H
CLR P1.2 ;关输出
CLR RS1
CLR RS0
MOV GWEN,#21 ;设置温度给定值Tg=48度
MOV KP,#14 ;设置KP
MOV KI,#12 ;设置Ki
MOV KD,#1 ;设置KD
MOV EI,#0
MOV EI1,#0
MOV EI2,#0
MOV EK,#0
MOV EK1,#0
MOV EK2,#0
MOV 71H,#0
MOV 72H,#0
MOV 73H,#0
MOV 74H,#0
MOV 75H,#0
MOV 76H,#0
MOV 77H,#0
MOV 78H,#0
MOV 79H,#0
MOV 7AH,#0
mov 7dh,#0
mov 7eh,#0
MOV TL,#00H ;初始定时时间
MOV TH,#00H
MOV SWEN,#1 ;采集温度Tc=SWEN
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LOOP1:;mov 7dh,#0
; mov 7eh,#0
LCALL PID
MOV R5,#10 ;每2秒采集温度一次
LOOP2: LCALL YANSHI
DJNZ R5,LOOP2
SJMP LOOP1
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;PID子程序
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PID: MOV A,GWEN ;计算Ei,先取温度给定值
CLR C
SUBB A,SWEN ;Ei
JNC PID1 ;判Ei正负,如为正,跳至PID1
CLR P1.2
RET
PID1: MOV EI,A ;Ei值存EI
MOV R1,EI ;计算Ei-(Ei-1),先将Ei送R1
MOV R2,EI1 ;将(Ei-1)值送R2
LCALL DJF
MOV EK,R3 ;将差值Ei-(Ei-1)送6EH
MOV C,22H ;将差值Ei-(Ei-1)的符号位送33H
MOV 33H,C ;*******33H为Ei-(Ei-1)的符号
MOV R1,EI1 ; 计算(Ei-1)-(Ei-2),先将(Ei-1)值送R1
MOV R2,EI2 ; 将(Ei-2)值送R2
LCALL DJF
MOV EK1,R3 ; 将差值(Ei-1)-(Ei-2)送6FH
MOV C,22H ; 将差值(Ei-1)-(Ei-2)的符号位送34H
MOV 34H,C ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -