📄 tcmain.asm
字号:
; 闭环温度控制实验说明
; 实验在联机调试时,需要修改如下一些参数
; 实验时,按照参考参数将各单元中的数据先进行修改,再运行程序
;======================================================================================
; 符号 单元 参考参数 单位 取值范围 名称及作用
; TK 39H 30H 10ms 00H--FFH 采样周期:决定数据采集快慢程度
; SPEC 3AH 28H ℃ 14H--46H 数字给定:要求温控单元达到的温度
; IBAND 3BH 60H 00H--7FH 积分分离值:PID算法中积分分离值
; KPP 40H(高) 1FH 0000H--1FFFH 比例系数:PID中比例项系数值
; 41H(低) 10H (0--2倍)
; KII 42H(高) 00H 10ms 0001H--1FFFH 积分系数:PID中积分项系数值
; 43H(低) 14H (1--8192毫秒)
; KDD 44H(高) 00H 10ms 0000H--1FFFH 微分系数:PID中微分项系数值
; 45H(低) 20H (0--8192毫秒)
;======================================================================================
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP IINT1 ;外部中断1,读AD转换结果
ORG 000BH ;定时器T0,启动AD转换
LJMP TT0
ORG 001BH
LJMP TT1
ORG 0030H
MAIN: MOV SP,#08H
LCALL INIT ;初始化,开中断
CLR 7FH ;AD-MARK=0 7FH中存放采样标志位
WAIT1: JNB 7FH,WAIT1 ;判断采样值形成否
CLR 7FH ;7FH=1表示形成采样
MOV A,38H ;38H中为AD转换值
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;查温度表
MOV 5BH,A ;5BH中为反馈Yk
LCALL PID ;调用PID子程序进行运算得到控制量
CLR C
MOV A,58H ;58H中为CK
SUBB A,#80H
JC IS0 ;产生PWM脉冲,CY为1跳转
MOV 68H,A ;68H中为a原值
LJMP COU ;传送结果显示
IS0: MOV A,#00H
MOV 68H,A ;a原值清零
COU: LCALL COUNTA ;产生PWM脉冲
MOV A,3AH ;3AH中为给定温度
MOV 34H,A ;34H中为显示子程序给定值
MOV A,5BH ;5BH中为反馈Yk
MOV 30H,A ;30H为显示子程序采样值
LJMP WAIT1 ;跳转至判断采样址形成否
COUNTA:
CLR C
MOV A,#07FH
SUBB A,68H ;不带符号位求补码
MOV 5CH,A ;B原值
RET
;*****************
; 初始化子程序
;*****************
INIT: MOV A,#00H
MOV R0,#50H
I1: MOV @R0,A
INC R0
CJNE R0,#80H,I1 ;50H----80H赋初值0
MOV 39H, #30H ;参数初始化
MOV 3AH, #28H
MOV 3BH, #60H
MOV 40H, #1FH ;KP
MOV 41H, #10H
MOV 42H, #00H ;KI
MOV 43H, #14H
MOV 44H, #00H ;KD
MOV 45H, #20H
MOV 30H,#00H
MOV 34H,#00H
MOV 5EH,#01H ;5EH标志位,将CK送入PWM的标志位
MOV 6AH,#7FH ;6AH中存放a原值
MOV 68H,#7FH ;68H中存放B原值
MOV 90H,#00H ;P1.0=0开始加热
CLR 7FH ;7FH 采样标志清零
MOV TMOD,#11H ;TMOD(89H)T1,T0为16位定时器
MOV IP,#02H ;PT0 定时器0为高优先级
SETB IT1 ;IT1(TCON)边沿触发方式INT1为负跳变有效
;所以ADC0809的EOC经过非门与INT1连接
SETB EX1 ;EX1(IE)允许INT1中断
MOV TH0,#0D8H
MOV TL0,#0EFH ;T0 10MS
MOV TH1,#0D8H ;改变定时中断的时间可以改正LED显示时一个灯特别亮的问题
MOV TL1,#0EFH
;MOV TH1,#0E8H
;MOV TL1,#00H
SETB ET0 ;ET0(IE)允许定时器0中
SETB ET1
SETB TR0 ;(TCON.4)TR0=1启动定时器T0
SETB TR1
SETB EA ;EA(IE)开中断
RET
;************************
;外部中断1子程序,读AD转换结果
;************************
IINT1: PUSH ACC
PUSH DPH
PUSH DPL
PUSH 0D0H
MOV DPTR,#0FEFFH ;P2.0接AD片选IN7为选择通道
MOVX A,@DPTR
MOV 38H,A ;38H中为AD转换值
SETB 7FH ;置7FH标志位说明采样结束
POP 0D0H
POP DPL
POP DPH
POP ACC
RETI ;返回
;************************
;定时器T0中断
;************************
TT0: ;定时器T0,启动AD转换
PUSH DPH
PUSH DPL
PUSH ACC
PUSH 0D0H
MOV TH0,#0D8H
MOV TL0,#0EFH ;T0 10MS(12M)
SETB ET0 ;允许T0中断
MOV A,39H ;39H中为采样系数(恒定值)
CJNE A,51H,INCTK ;51H中为TC. 39H不等于51H时跳转
;判断采样周期到否,没有到跳转
AD:
MOV DPTR,#0FEFFH ;
MOVX @DPTR,A ;启动AD转换
MOV 51H,#00H ;清TC
LJMP BACK
INCTK: INC 51H ;51H初值为00H TC=TC+1
LCALL KJ
BACK:
POP 0D0H
POP ACC
POP DPL
POP DPH
RETI
KJ: ;这段程序的作用,产生PWM脉冲
PUSH ACC
MOV A,5EH ;5EH标志位,将CK送入PWM的标
CJNE A,#01H,TEST2
MOV A,6AH ;a变量6AH中
JNZ ANOT0 ;A不等于0跳
MOV A,#02H
MOV 5EH,A ;5EH标志位送入02H
MOV A,5CH ;5CH为B原值
CLR C
RRC A
MOV 59H,A ;59H为B变量
LJMP TEST2
ANOT0: CLR C
MOV A,6AH ;6AH为a变量
SUBB A,#01H
MOV 6AH,A
CLR P1.7 ;脉冲清零加热
TEST2: MOV A,5EH ;5EH标志位,将CK送入PWM的标志
CJNE A,#02H,OUT ;不相等时跳转
MOV A,59H ;59H中为B变量
JNZ BNOT0 ;A不等于0跳转
MOV A,#01H
MOV 5EH,A ;5EH标志位置1
MOV A,68H ;68H中为a原值
CLR C
RRC A
MOV 6AH,A ;6AH中为a变量
LJMP OUT
BNOT0: CLR C
MOV A,59H
SUBB A,#01H
MOV 59H,A
SETB P1.7 ;停止加热
OUT: POP ACC
RET
;*********************
;定时器T1中断发送显示
;*********************
TT1:
MOV TH1,#0D8H
MOV TL1,#0EFH
SETB ET1 ;允许T1中断
LCALL LED_DISPLAY
RETI
TAB1: DB 14H,14H,14H,14H,14H,14H,14H,14H,14H,14H,15H,16H,17H,18H,19H,1AH
DB 1BH,1CH,1DH,1EH,1EH,1FH,20H,21H,23H,24H,25H,26H,27H,28H,29H,2AH
DB 2BH,2CH,2DH,2EH,2FH,31H,32H,32H,33H,34H,35H,36H,37H,38H,39H,3AH
DB 3BH,3CH,3DH,3EH,3FH,40H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH
DB 4CH,4DH,4EH,4FH,50H,4FH,50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
DB 5AH,5BH,5CH,5DH,5EH,5FH,60H,61H,62H,63H,64H,64H,65H,65H,66H,66H
DB 67H,68H,69H,6AH,6BH,6CH,6DH,6EH,6EH,6FH,6FH,70H,71H,72H,73H,74H
DB 75H,76H,77H,78H,79H,7AH,7BH,7CH,7DH,7EH,7FH,80H,81H,82H,83H,84H
DB 84H,85H,86H,87H,88H,89H,8AH,8BH,8CH,8EH,8FH,90H,91H,92H,93H,94H
DB 95H,96H,97H,98H,99H,9AH,9BH,9BH,9CH,9CH,9DH,9DH,9EH,9EH,9FH,9FH
DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H,0A8H,0A9H,0AAH,0ABH,0ACH
DB 0ADH,0AEH,0AFH
DB 0B0H,0B0H,0B1H,0B2H,0B3H,0B4H,0B4H,0B5H,0B6H,0B7H,0B8H,0B9H,0BAH
DB 0BBH,0BDH,0BEH
DB 0BEH,0C1H,0C2H,0C3H,0C4H,0C5H,0C6H,0C8H,0CAH,0CCH,0CEH,0CFH,0D0H
DB 0D1H,0D2H,0D4H
DB 0D5H,0D6H,0D7H,0D8H,0D9H,0DAH,0DBH,0DCH,0DDH,0DEH,0E3H,0E6H,0E9H
DB 0ECH,0F0H,0F2H
DB 0F6H,0FAH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH
$include(PIDCONTRAL.asm)
$include (LED_DISPLAY.ASM)
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -