📄 main.lst
字号:
A51 MACRO ASSEMBLER MAIN DATE 28/01/02 PAGE 1
MS-DOS MACRO ASSEMBLER A51 V4.4
OBJECT MODULE PLACED IN MAIN.OBJ
ASSEMBLER INVOKED BY: A51 MAIN.ASM DEBUG
LOC OBJ LINE SOURCE
1 ;数字温度控制显示程序(误差补偿法) (CPU:89C2051 晶体:12MHz)
2 ;作者:高宇
3 ;2001、3、17
4
5 ;主程序用工作寄存器:第0组
6 ;定时测量工作寄存器:第1组
7 ;显示用工作寄存器: 第2组
8 ;AT24C02读写工作寄存器:第3组
9
10 ;注:在调试板中,加热控制为P1.7,I2C器件开启为P1.6,而在实际电路板中相反
11
12 MainRAM SEGMENT DATA
13 MainMark SEGMENT BIT
14
22 $LIST
23
24 ;*************************************************************
25
000A 26 SetTimer EQU 10 ;数码管闪烁频率设置
00C8 27 SetWaitTimer EQU 200 ;设置加热温度时,键没按下后等待返回温度显示的时间
0014 28 SetChangSpeed1 EQU 20 ;设定按住键盘后正常速度时增加或减少控制温度的速度()
0004 29 SetChangSpeed2 EQU 4 ;设定按住键盘一段时间后快速增加或减少控制温度的速度()
0005 30 SetPushKeyMum EQU 5 ;同一键按住五个闪烁周期后加速控制温度设定速度
0003 31 SetDisplayBit EQU 3 ;设置显示的位数
32
0001 33 TempUpH EQU 01H
002C 34 TempUpL EQU 2CH ;设定温度上限为300度
0000 35 TempDownH EQU 00H
0000 36 TempDownL EQU 00H ;设定温度下限为0度
37
0005 38 SetCompKey EQU 5 ;连续读5次,键值相同说明按下了一个键
0010 39 UpKey EQU 10H ;上键
0011 40 DownKey EQU 11H ;下键
0012 41 SetKey EQU 12H ;设定键
0055 42 UnKey EQU 55H ;无键
43
0000 44 TempOffset EQU 00H ;滞回比较温度 ;
45 ;-------------------------------------------------------------
46 ;DATA 20H
---- 47 RSEG MainMark
48
0000 49 XSBJ: DBIT 1 ;数码管显示标记(0 不显示 1 显示)
0001 50 FHBJ: DBIT 1 ;返回温度显示(0 不返回 1 返回)
0002 51 ChangOk: DBIT 1 ;改变控制温度允许与否标记(0 否 1 可)
0003 52 DisplayStatu: DBIT 1 ;数码管显示状态(0 不闪烁 1 闪烁)
0004 53 SetTempChang: DBIT 1 ;上一步重新设定了控制温度(1 重新设定 0 没有)
0005 54 ReadTempOK: DBIT 1 ;已经读取了温度
0006 55 TempContr: DBIT 1 ;是否加热标记
56
0007 57 TestCon: DBIT 1 ;确定采样基准值还是实际值
0008 58 Timerout: DBIT 1 ;温度测量时间溢出标志
59 ;-------------------------------------------------------------
---- 60 RSEG MAINRAM
61
A51 MACRO ASSEMBLER MAIN DATE 28/01/02 PAGE 2
LOC OBJ LINE SOURCE
0000 62 SetTempHBak1: DS 1
0001 63 SetTempLBak1: DS 1 ;设定温度值存贮
64
0002 65 VIH: DS 1 ;待测电压整数部分
0003 66 VIL: DS 1 ;待测电压小数部分
67
0004 68 VIHT: DS 1 ;待测电压或基准电压整数部分
0005 69 VILT: DS 1 ;待测电压或基准电压小数部分
70
71
0006 72 CLOCK: DS 1 ;检测次数计数器
0007 73 TOTALH: DS 1 ;临时累加器高字节
0008 74 TOTALM: DS 1 ;临时累加器中字节
0009 75 TOTALL: DS 1 ;临时累加器低字节
000A 76 DisPort: DS 1 ;动态显示时应显示的数码管号
000B 77 Mumber0: DS 1 ;第一个数码管显示数值
000C 78 Mumber1: DS 1 ;第二个数码管显示数值
000D 79 Mumber2: DS 1 ;第三个数码管显示数值
80
000E 81 Timer: DS 1 ;时间基准(65ms)
000F 82 Timer1: DS 1 ;时间基准(65ms)
0010 83 Timer2: DS 1 ;时间基准(65ms)
84
0011 85 KeyCount: DS 1 ;同一键按下计数
0012 86 KeyCodeTemp: DS 1 ;键值缓存
0013 87 KeyCode: DS 1 ;保存键值
88
0014 89 SetTempH: DS 1
0015 90 SetTempL: DS 1 ;设定温度值存贮
0016 91 ChangSpeed: DS 1 ;控制温度设定时速度
0017 92 PushKeyMumber: DS 1 ;同一键一直按下次数
0018 93 UpPushKeyCode: DS 1 ;上一次按键保存
94
0019 95 BeforTempH: DS 1
001A 96 BeforTempL: DS 1 ;上一次温度保存
001B 97 TempH: DS 1
001C 98 TempL: DS 1
99
100
001D 101 SetTempHBak2: DS 1
001E 102 SetTempLBak2: DS 1 ;设定温度值存贮
103
001F 104 TempSub : DS 1 ;保存实际温度与控制温度差值
0020 105 ContrlMumber: DS 1
106
0021 107 Counter: DS 1 ;计数器
0022 108 ProgramAddressT1: DS 2;断点地址保存
109
110 ;-------------------------------------------------------------
0024 111 TempOffsetH: DS 1
0025 112 TempOffsetL: DS 1 ;温度误差
113 ;-------------------------------------------------------------
0010 114 SetTempHE2PROM1 EQU 010H
0011 115 SetTempLE2PROM1 EQU 011H
116
0030 117 SetTempHE2PROM2 EQU 030H
0031 118 SetTempLE2PROM2 EQU 031H
119
0050 120 SetTempHE2PROM3 EQU 050H
A51 MACRO ASSEMBLER MAIN DATE 28/01/02 PAGE 3
LOC OBJ LINE SOURCE
0051 121 SetTempLE2PROM3 EQU 051H ;设定好的控制温度值保存地址及备份地址
122 ;-------------------------------------------------------------
123
124
0092 125 RC BIT P1.2 ;92h ;RC充放电控制端口(低电平放电)
0092 126 KeyPort BIT P1.2 ;键输入口
127
00B6 128 JUDE BIT P3.6 ;0B6H;比较电压判断口
129
0095 130 XM0 BIT P1.5 ;第三个数码管控制口/设置键
0094 131 XM1 BIT P1.4 ;第四个数码管控制口/下键/采样实际值
0093 132 XM2 BIT P1.3 ;第五个数码管控制口/上键/采样基准值
133
0096 134 TempContrPort BIT P1.6 ;加热控制(1 加热 0 停止)
135 ;*************************************************************
136 ISEG AT 05FH
005F 137 STACK: DS 01EH
138 ;分配堆栈
139
140
141
142 CSEG AT 0000H
143 USING 0
144 ;使用第0组寄存器
0000 145 Start:
0000 020026 146 LJMP Main ;主程序
147 ;-------------------------------------------------------------
148
149 CSEG AT 0003H
0003 020000 150 LJMP Start
151
152 CSEG AT 000BH
000B 0202A8 153 LJMP DINS ;T0:定时中断子程序
154
155 CSEG AT 0013H
0013 020000 156 LJMP Start
157
158 CSEG AT 001BH
001B 02023F 159 LJMP DINS1 ;T1:定时中断子程序
160
161 CSEG AT 0023H
0023 020000 162 LJMP Start
163
164 ;-------------------------------------------------------------
165 CSEG AT 026H
0026 166 Main:
167
168
0026 C200 F 169 CLR TempContr
170
0028 75815E 171 MOV SP,#STACK-1
172 ;设置堆栈
002B C2AF 173 CLR EA
002D 7820 174 MOV R0,#20H
002F 175 CLEAR:
002F F6 176 MOV @R0,A ;清零片内单元
0030 08 177 INC R0
0031 B85FFB 178 CJNE R0,#5FH,CLEAR
179
A51 MACRO ASSEMBLER MAIN DATE 28/01/02 PAGE 4
LOC OBJ LINE SOURCE
0034 C200 F 180 CLR ReadTempOK
181
0036 750000 F 182 MOV DisPort,#00H ;显示第1个数码管
0039 750055 F 183 MOV KeyCode,#UnKey
003C 750055 F 184 MOV KeyCodeTemp,#UnKey
185
003F C2AF 186 CLR EA
0041 758911 187 MOV TMOD,#11H ;定时器设置
0044 758CD8 188 MOV TH0,#0D8H ;约10mS检测一次
0047 D292 189 SETB RC ;电容放电
190
0049 750000 F 191 MOV ContrlMumber,#00H
004C 750000 F 192 MOV VIH,#00H
004F 750000 F 193 MOV VIL,#00H
0052 750000 F 194 MOV TempH,#00H
0055 750000 F 195 MOV TempL,#00H
196
197
0058 750000 F 198 MOV TempOffsetH , #00H
005B 750000 F 199 MOV TempOffsetL , #00H ;起始时设置测量误差为0
005E C200 F 200 CLR TestCon
201
0060 C200 F 202 CLR Timerout ;起始时温度测量没有溢出
203
0062 204 MainEncrypt:
0062 120122 205 LCALL SetTemp ;启动时显示控制温度
206
0065 7400 207 MOV A,#00H
0067 12040A 208 LCALL SetDisplayMode ;数码管常亮
006A 209 LOOP:
006A D2AF 210 SETB EA
211
006C 300003 F 212 JNB ReadTempOK,LOOP00
006F 1200C9 213 LCALL CompTemp
214
0072 215 LOOP00:
216
0072 E500 F 217 MOV A , TempOffsetH
0074 5480 218 ANL A , #10000000B ;最高位表示误差方向
0076 6011 219 JZ LOOP101
0078 C3 220 CLR C
0079 E500 F 221 MOV A , VIL
007B 9500 F 222 SUBB A , TempOffsetL
007D FB 223 MOV R3 , A
007E E500 F 224 MOV A , TempOffsetH
0080 547F 225 ANL A , #01111111B
0082 FA 226 MOV R2 , A
0083 E500 F 227 MOV A , VIH
0085 9A 228 SUBB A , R2
0086 FA 229 MOV R2 , A
0087 0193 230 AJMP LOOP102
0089 231 LOOP101:
0089 E500 F 232 MOV A , VIL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -