📄 tcmain.lst
字号:
A51 MACRO ASSEMBLER TCMAIN 01/04/2006 09:01:46 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN TCmain.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE TCmain.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ; 闭环温度控制实验说明
2 ; 实验在联机调试时,需要修改如下一些参数
3 ; 实验时,按照参考参数将各单元中的数据先进行修改,再运行程序
4 ;======================================================================================
5 ; 符号 单元 参考参数 单位 取值范围 名称及作用
6 ; TK 39H 30H 10ms 00H--FFH 采样周期:决定数据采集快慢程度
7 ; SPEC 3AH 28H ℃ 14H--46H 数字给定:要求温控单元达到的温度
8 ; IBAND 3BH 60H 00H--7FH 积分分离值:PID算法中积分分离值
9 ; KPP 40H(高) 1FH 0000H--1FFFH 比例系数:PID中比例项系数值
10 ; 41H(低) 10H (0--2倍)
11 ; KII 42H(高) 00H 10ms 0001H--1FFFH 积分系数:PID中积分项系数值
12 ; 43H(低) 14H (1--8192毫秒)
13 ; KDD 44H(高) 00H 10ms 0000H--1FFFH 微分系数:PID中微分项系数值
14 ; 45H(低) 20H (0--8192毫秒)
15 ;======================================================================================
16
0000 17 ORG 0000H
0000 020030 18 LJMP MAIN
19
0013 20 ORG 0013H
0013 0200C7 21 LJMP IINT1 ;外部中断1,读AD转换结果
22
000B 23 ORG 000BH ;定时器T0,启动AD转换
000B 0200E0 24 LJMP TT0
25
001B 26 ORG 001BH
001B 020150 27 LJMP TT1
28
0030 29 ORG 0030H
0030 758108 30 MAIN: MOV SP,#08H
0033 12006E 31 LCALL INIT ;初始化,开中断
0036 C27F 32 CLR 7FH ;AD-MARK=0 7FH中存放采样标志位
33
0038 307FFD 34 WAIT1: JNB 7FH,WAIT1 ;判断采样值形成否
003B C27F 35 CLR 7FH ;7FH=1表示形成采样
36
003D E538 37 MOV A,38H ;38H中为AD转换值
003F 90015C 38 MOV DPTR,#TAB1
0042 93 39 MOVC A,@A+DPTR ;查温度表
40
0043 F55B 41 MOV 5BH,A ;5BH中为反馈Yk
42
0045 120269 43 LCALL PID ;调用PID子程序进行运算得到控制量
0048 C3 44 CLR C
0049 E558 45 MOV A,58H ;58H中为CK
004B 9480 46 SUBB A,#80H
004D 4005 47 JC IS0 ;产生PWM脉冲,CY为1跳转
004F F568 48 MOV 68H,A ;68H中为a原值
0051 020058 49 LJMP COU ;传送结果显示
50
0054 7400 51 IS0: MOV A,#00H
0056 F568 52 MOV 68H,A ;a原值清零
53
0058 120066 54 COU: LCALL COUNTA ;产生PWM脉冲
55
005B E53A 56 MOV A,3AH ;3AH中为给定温度
005D F534 57 MOV 34H,A ;34H中为显示子程序给定值
58
A51 MACRO ASSEMBLER TCMAIN 01/04/2006 09:01:46 PAGE 2
005F E55B 59 MOV A,5BH ;5BH中为反馈Yk
0061 F530 60 MOV 30H,A ;30H为显示子程序采样值
0063 020038 61 LJMP WAIT1 ;跳转至判断采样址形成否
0066 62 COUNTA:
0066 C3 63 CLR C
0067 747F 64 MOV A,#07FH
0069 9568 65 SUBB A,68H ;不带符号位求补码
006B F55C 66 MOV 5CH,A ;B原值
006D 22 67 RET
68
69 ;*****************
70 ; 初始化子程序
71 ;*****************
006E 7400 72 INIT: MOV A,#00H
0070 7850 73 MOV R0,#50H
0072 F6 74 I1: MOV @R0,A
0073 08 75 INC R0
0074 B880FB 76 CJNE R0,#80H,I1 ;50H----80H赋初值0
77
0077 753930 78 MOV 39H, #30H ;参数初始化
007A 753A28 79 MOV 3AH, #28H
007D 753B60 80 MOV 3BH, #60H
0080 75401F 81 MOV 40H, #1FH ;KP
0083 754110 82 MOV 41H, #10H
0086 754200 83 MOV 42H, #00H ;KI
0089 754314 84 MOV 43H, #14H
008C 754400 85 MOV 44H, #00H ;KD
008F 754520 86 MOV 45H, #20H
87
0092 753000 88 MOV 30H,#00H
0095 753400 89 MOV 34H,#00H
90
0098 755E01 91 MOV 5EH,#01H ;5EH标志位,将CK送入PWM的标志位
009B 756A7F 92 MOV 6AH,#7FH ;6AH中存放a原值
009E 75687F 93 MOV 68H,#7FH ;68H中存放B原值
00A1 759000 94 MOV 90H,#00H ;P1.0=0开始加热
00A4 C27F 95 CLR 7FH ;7FH 采样标志清零
96
00A6 758911 97 MOV TMOD,#11H ;TMOD(89H)T1,T0为16位定时器
98
00A9 75B802 99 MOV IP,#02H ;PT0 定时器0为高优先级
100
00AC D28A 101 SETB IT1 ;IT1(TCON)边沿触发方式INT1为负跳变有效
102 ;所以ADC0809的EOC经过非门与INT1连接
00AE D2AA 103 SETB EX1 ;EX1(IE)允许INT1中断
104
00B0 758CD8 105 MOV TH0,#0D8H
00B3 758AEF 106 MOV TL0,#0EFH ;T0 10MS
107
00B6 758DD8 108 MOV TH1,#0D8H ;改变定时中断的时间可以改正LED显示时一个灯特别亮的问题
00B9 758BEF 109 MOV TL1,#0EFH
110
111 ;MOV TH1,#0E8H
112 ;MOV TL1,#00H
113
00BC D2A9 114 SETB ET0 ;ET0(IE)允许定时器0中
00BE D2AB 115 SETB ET1
00C0 D28C 116 SETB TR0 ;(TCON.4)TR0=1启动定时器T0
117
00C2 D28E 118 SETB TR1
119
00C4 D2AF 120 SETB EA ;EA(IE)开中断
00C6 22 121 RET
122
123 ;************************
124 ;外部中断1子程序,读AD转换结果
A51 MACRO ASSEMBLER TCMAIN 01/04/2006 09:01:46 PAGE 3
125 ;************************
00C7 C0E0 126 IINT1: PUSH ACC
00C9 C083 127 PUSH DPH
00CB C082 128 PUSH DPL
00CD C0D0 129 PUSH 0D0H
130
00CF 90FEFF 131 MOV DPTR,#0FEFFH ;P2.0接AD片选IN7为选择通道
00D2 E0 132 MOVX A,@DPTR
133
00D3 F538 134 MOV 38H,A ;38H中为AD转换值
00D5 D27F 135 SETB 7FH ;置7FH标志位说明采样结束
136
00D7 D0D0 137 POP 0D0H
00D9 D082 138 POP DPL
00DB D083 139 POP DPH
00DD D0E0 140 POP ACC
00DF 32 141 RETI ;返回
142
143 ;************************
144 ;定时器T0中断
145 ;************************
146
00E0 147 TT0: ;定时器T0,启动AD转换
00E0 C083 148 PUSH DPH
00E2 C082 149 PUSH DPL
00E4 C0E0 150 PUSH ACC
00E6 C0D0 151 PUSH 0D0H
152
00E8 758CD8 153 MOV TH0,#0D8H
00EB 758AEF 154 MOV TL0,#0EFH ;T0 10MS(12M)
155
00EE D2A9 156 SETB ET0 ;允许T0中断
00F0 E539 157 MOV A,39H ;39H中为采样系数(恒定值)
00F2 B5510A 158 CJNE A,51H,INCTK ;51H中为TC. 39H不等于51H时跳转
159 ;判断采样周期到否,没有到跳转
00F5 160 AD:
00F5 90FEFF 161 MOV DPTR,#0FEFFH ;
00F8 F0 162 MOVX @DPTR,A ;启动AD转换
00F9 755100 163 MOV 51H,#00H ;清TC
00FC 020104 164 LJMP BACK
165
00FF 0551 166 INCTK: INC 51H ;51H初值为00H TC=TC+1
0101 12010D 167 LCALL KJ
0104 168 BACK:
0104 D0D0 169 POP 0D0H
0106 D0E0 170 POP ACC
0108 D082 171 POP DPL
010A D083 172 POP DPH
010C 32 173 RETI
174
010D 175 KJ: ;这段程序的作用,产生PWM脉冲
010D C0E0 176 PUSH ACC
010F E55E 177 MOV A,5EH ;5EH标志位,将CK送入PWM的标
0111 B4011A 178 CJNE A,#01H,TEST2
0114 E56A 179 MOV A,6AH ;a变量6AH中
0116 700D 180 JNZ ANOT0 ;A不等于0跳
0118 7402 181 MOV A,#02H
011A F55E 182 MOV 5EH,A ;5EH标志位送入02H
011C E55C 183 MOV A,5CH ;5CH为B原值
011E C3 184 CLR C
011F 13 185 RRC A
0120 F559 186 MOV 59H,A ;59H为B变量
0122 02012E 187 LJMP TEST2
188
0125 C3 189 ANOT0: CLR C
0126 E56A 190 MOV A,6AH ;6AH为a变量
A51 MACRO ASSEMBLER TCMAIN 01/04/2006 09:01:46 PAGE 4
0128 9401 191 SUBB A,#01H
012A F56A 192 MOV 6AH,A
012C C297 193 CLR P1.7 ;脉冲清零加热
194
012E E55E 195 TEST2: MOV A,5EH ;5EH标志位,将CK送入PWM的标志
0130 B4021A 196 CJNE A,#02H,OUT ;不相等时跳转
0133 E559 197 MOV A,59H ;59H中为B变量
0135 700D 198 JNZ BNOT0 ;A不等于0跳转
0137 7401 199 MOV A,#01H
0139 F55E 200 MOV 5EH,A ;5EH标志位置1
013B E568 201 MOV A,68H ;68H中为a原值
013D C3 202 CLR C
013E 13 203 RRC A
013F F56A 204 MOV 6AH,A ;6AH中为a变量
0141 02014D 205 LJMP OUT
0144 C3 206 BNOT0: CLR C
0145 E559 207 MOV A,59H
0147 9401 208 SUBB A,#01H
0149 F559 209 MOV 59H,A
014B D297 210 SETB P1.7 ;停止加热
014D D0E0 211 OUT: POP ACC
014F 22 212 RET
213
214 ;*********************
215 ;定时器T1中断发送显示
216 ;*********************
0150 217 TT1:
0150 758DD8 218 MOV TH1,#0D8H ;改变定时中断的时间可以改正LED显示时一个灯特别亮
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -