📄 02_adc0832.lst
字号:
144 ;---------------------------------------------------
00C1 145 LCDP2:
00C1 C0E0 146 PUSH ACC ;入栈保护A
00C3 E5F0 147 MOV A,B ;设置显示地址
00C5 24C0 148 ADD A,#0C0H ;设置LCD的第二行地址
00C7 11A2 149 CALL WCOM ;写入命令
00C9 D0E0 150 POP ACC ;由堆栈取出A
00CB 11AF 151 CALL WDATA ;写入数据
00CD 22 152 RET
153 ;=================================================
154 ;ASCII 转换并在第二行显示数字子程序
155 ;=================================================
00CE 156 LCD_CONV:
00CE EC 157 MOV A,R4 ;加载数据
00CF 75200A 158 MOV LCD_X,#10 ;设置位置
00D2 11E3 159 CALL SHOW_DIG2A ;显示数据
00D4 0520 160 INC LCD_X ;设置位置
00D6 742E 161 MOV A,#'.'
00D8 8520F0 162 MOV B,LCD_X
00DB 11C1 163 CALL LCDP2 ;显示小数点
00DD ED 164 MOV A,R5 ;加载数据
00DE 0520 165 INC LCD_X ;设置位置
00E0 11F1 166 CALL SHOW_DIG2B ;显示数据
00E2 22 167 RET
A51 MACRO ASSEMBLER 02_ADC0832 02/14/2009 11:03:48 PAGE 4
168 ;---------------------------------------
169 ;整数部分转换为ASCII码,送显示
170 ;只显示一位数
171 ;---------------------------------------
00E3 172 SHOW_DIG2A:
00E3 75F010 173 MOV B,#16
00E6 84 174 DIV AB
00E7 E5F0 175 MOV A,B ;只取整数部分的个位
00E9 2430 176 ADD A,#30H ;转换为ASCII码
00EB 8520F0 177 MOV B,LCD_X ;地址变量送B
00EE 11C1 178 CALL LCDP2 ;送显示
00F0 22 179 RET
180 ;---------------------------------------
181 ;小数部分转换为ASCII码,送显示
182 ;显示两位数
183 ;---------------------------------------
00F1 184 SHOW_DIG2B:
00F1 75F010 185 MOV B,#16
00F4 84 186 DIV AB
00F5 2430 187 ADD A,#30H ;转换为ASCII码
00F7 C0F0 188 PUSH B
00F9 8520F0 189 MOV B,LCD_X ;地址变量送B
00FC 11C1 190 CALL LCDP2 ;送显示
00FE D0F0 191 POP B
0100 E5F0 192 MOV A,B
0102 2430 193 ADD A,#30H ;转换为ASCII码
0104 0520 194 INC LCD_X
0106 8520F0 195 MOV B,LCD_X ;地址变量送B
0109 11C1 196 CALL LCDP2 ;送显示
010B 22 197 RET
198 ;=========================================================
199 ;AD0832 初始化与AD转换子程序
200 ;(A)=AD转换值
201 ;=========================================================
010C 202 AD_CONV:
010C D295 203 SETB AD_CS ;一个转换周期开始
010E C296 204 CLR AD_CLK
0110 C295 205 CLR AD_CS ;CS置0,片选有效
0112 D297 206 SETB AD_DAT ;DI置1,起始位
0114 00 207 NOP
0115 D296 208 SETB AD_CLK ;第一个脉冲
0117 C297 209 CLR AD_DAT ;在负跳变之前加一个DI反转操作
0119 C296 210 CLR AD_CLK
011B D297 211 SETB AD_DAT ;DI置1,设为单通道
011D 00 212 NOP
011E D296 213 SETB AD_CLK ;第二个脉冲
0120 C297 214 CLR AD_DAT
0122 C296 215 CLR AD_CLK
0124 C297 216 CLR AD_DAT ;DI置0,选择通道0
0126 00 217 NOP
0127 D296 218 SETB AD_CLK ;第三个脉冲
0129 D297 219 SETB AD_DAT
012B C296 220 CLR AD_CLK
012D 00 221 NOP
012E D296 222 SETB AD_CLK ; 第四个脉冲
0130 7908 223 MOV R1,#08H ;计数器初值,读取8位数据,
0132 C296 224 AD_READ: CLR AD_CLK ;下降沿
0134 A297 225 MOV C,AD_DAT ;读取DO端数据
0136 33 226 RLC A ;C移入A,高位在前
0137 D296 227 SETB AD_CLK ;下一个脉冲
0139 D9F7 228 DJNZ R1,AD_READ ;没读完继续
013B D295 229 SETB AD_CS
013D 22 230 RET
231 ;====================================================
232 ;AD转换值处理子程序
233 ;入口:(A) =AD转换值
A51 MACRO ASSEMBLER 02_ADC0832 02/14/2009 11:03:48 PAGE 5
234 ;出口:处理后的数据 (R4)=高位,(R5)=低位
235 ;====================================================
013E 236 AD_CHULI:
013E C3 237 CLR C
013F 7D00 238 MOV R5,#00H ;十进制转换的低位寄存器
0141 7C00 239 MOV R4,#00H ;十进制转换的高位寄存器
0143 7B08 240 MOV R3,#08H ;十进制调整的次数
0145 241 AD_CHULI1:
0145 33 242 RLC A
0146 FA 243 MOV R2,A ;送 R2 保存
0147 ED 244 MOV A,R5 ;(R5)乘2加C
0148 3D 245 ADDC A,R5
0149 D4 246 DA A ;做十进制调整
014A FD 247 MOV R5,A ;结果存回R5
014B EC 248 MOV A,R4 ;(R4)乘2加C
014C 3C 249 ADDC A,R4
014D FC 250 MOV R4,A ;结果存回R4
014E EA 251 MOV A,R2
014F DBF4 252 DJNZ R3,AD_CHULI1 ;是否转换完?
0151 ED 253 MOV A,R5 ;(R5)乘2
0152 2D 254 ADD A,R5
0153 D4 255 DA A
0154 FD 256 MOV R5,A ;结果存回R5
0155 EC 257 MOV A,R4
0156 3C 258 ADDC A,R4 ;(R4)乘2加C
0157 D4 259 DA A
0158 FC 260 MOV R4,A ;结果存回R4
0159 22 261 RET
262 ;---------------------------------------------------
263 END ;结束
A51 MACRO ASSEMBLER 02_ADC0832 02/14/2009 11:03:48 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
AD_CHULI . . . . . C ADDR 013EH A
AD_CHULI1. . . . . C ADDR 0145H A
AD_CLK . . . . . . B ADDR 0090H.6 A
AD_CONV. . . . . . C ADDR 010CH A
AD_CS. . . . . . . B ADDR 0090H.5 A
AD_DAT . . . . . . B ADDR 0090H.7 A
AD_READ. . . . . . C ADDR 0132H A
B. . . . . . . . . D ADDR 00F0H A
CL1. . . . . . . . C ADDR 009BH A
CLR_LINE . . . . . C ADDR 0099H A
DEL1 . . . . . . . C ADDR 006DH A
DELAY0 . . . . . . C ADDR 00BCH A
DELAY1 . . . . . . C ADDR 006BH A
FILL . . . . . . . C ADDR 008DH A
INFO1. . . . . . . C ADDR 002AH A
INFO2. . . . . . . C ADDR 003BH A
INIT_LCD . . . . . C ADDR 004CH A
LC1. . . . . . . . C ADDR 0093H A
LCDP2. . . . . . . C ADDR 00C1H A
LCD_CONV . . . . . C ADDR 00CEH A
LCD_EN . . . . . . B ADDR 00A0H.7 A
LCD_RS . . . . . . B ADDR 00A0H.5 A
LCD_RW . . . . . . B ADDR 00A0H.6 A
LCD_SHOW . . . . . C ADDR 0074H A
LCD_X. . . . . . . N NUMB 0020H A
LINE1. . . . . . . C ADDR 0077H A
LINE2. . . . . . . C ADDR 0083H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
SET_LCD. . . . . . C ADDR 0015H A
SHOW_DIG2A . . . . C ADDR 00E3H A
SHOW_DIG2B . . . . C ADDR 00F1H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0002H A
START1 . . . . . . C ADDR 000DH A
WCOM . . . . . . . C ADDR 00A2H A
WDATA. . . . . . . C ADDR 00AFH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -