📄 temperature.lst
字号:
0084 00 117 NOP
0085 DAEE 118 DJNZ R2,WR1 ; 如果一个字节没写完,继续写
0087 D2A2 119 SETB P2.2 ; 拉高数据线
0089 22 120 RET
121 ;----------------------------------
122 ;读DS18B20的子程序(有具体的时序要求)
123 ;----------------------------------
008A 124 READ_18200:
A51 MACRO ASSEMBLER TEMPERATURE 06/23/2007 10:21:11 PAGE 3
125 ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
008A 7C02 126 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
008C 7929 127 MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
008E 128 RE00:
008E 7A08 129 MOV R2,#8 ; 数据一共有8位
0090 130 RE01:
0090 C3 131 CLR C ; 清除进位标志位
0091 D2A2 132 SETB P2.2 ; 拉高数据线后,等待1微秒初始化读
0093 00 133 NOP
0094 00 134 NOP
0095 C2A2 135 CLR P2.2 ; 拉低数据线后,保持1微秒以上使读初始化有效
0097 00 136 NOP
0098 00 137 NOP
0099 00 138 NOP
009A D2A2 139 SETB P2.2 ; 拉高数据线后,开始读操作
009C 7B08 140 MOV R3,#8
009E 141 RE10:
009E DBFE 142 DJNZ R3,RE10 ; 等待15微秒后,写入数据正确
00A0 A2A2 143 MOV C,P2.2 ; 将数据读入累加器
00A2 7B15 144 MOV R3,#21
00A4 145 RE20:
00A4 DBFE 146 DJNZ R3,RE20 ; 等待60微秒以上后,进行下一次读操作
00A6 13 147 RRC A ; 将累加器带进位右移
00A7 DAE7 148 DJNZ R2,RE01 ; 如果没读满一个字节,继续读取数据
00A9 F7 149 MOV @R1,A ; 将累加器中的数据存储进地址29H中
00AA 19 150 DEC R1
00AB DCE1 151 DJNZ R4,RE00 ; 继续读取高位
00AD 22 152 RET
153 ;----------------------------------
154 ;显示子程序
155 ;----------------------------------
00AE 156 DISPLAY:
00AE E529 157 MOV A,29H ; 将29H中的十六进制数转换成10进制
00B0 75F00A 158 MOV B,#10 ; 10进制/10=10进制
00B3 84 159 DIV AB
00B4 F521 160 MOV B_BIT,A ; 十位在A
00B6 85F020 161 MOV A_BIT,B ; 个位在B
00B9 9000E0 162 MOV DPTR,#NUMTAB ; 指定查表启始地址
00BC 7804 163 MOV R0,#4
00BE 164 DPL1:
00BE 79FA 165 MOV R1,#250 ; 显示1000次
00C0 166 DPLOP:
00C0 E520 167 MOV A,A_BIT ; 取个位数
00C2 93 168 MOVC A,@A+DPTR ; 查个位数的7段代码
00C3 F580 169 MOV P0,A ; 送出个位的7段代码
00C5 C2A7 170 CLR P2.7 ; 开个位显示
00C7 11DB 171 ACALL D1MS ; 显示1ms
00C9 D2A7 172 SETB P2.7
00CB E521 173 MOV A,B_BIT ; 取十位数
00CD 93 174 MOVC A,@A+DPTR ; 查十位数的7段代码
00CE F580 175 MOV P0,A ; 送出十位的7段代码
00D0 C2A6 176 CLR P2.6 ; 开十位显示
00D2 11DB 177 ACALL D1MS ; 显示1ms
00D4 D2A6 178 SETB P2.6
00D6 D9E8 179 DJNZ R1,DPLOP ; 未到100次循环,则继续
00D8 D8E4 180 DJNZ R0,DPL1 ; 未到4个100次循环,则继续
00DA 22 181 RET
182 ; 1MS延时
00DB 183 D1MS:
00DB 7F50 184 MOV R7,#80
00DD DFFE 185 DJNZ R7,$
00DF 22 186 RET
187 ; 实验板上的7段数码管0~9数字的共阴显示代码
00E0 3F065B4F 188 NUMTAB: DB 03FH,06H,5BH,4FH,66H,06DH,07DH,07H,07FH,06FH
00E4 666D7D07
00E8 7F6F
A51 MACRO ASSEMBLER TEMPERATURE 06/23/2007 10:21:11 PAGE 4
189 END
A51 MACRO ASSEMBLER TEMPERATURE 06/23/2007 10:21:11 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
A_BIT. . . . . . . N NUMB 0020H A
B. . . . . . . . . D ADDR 00F0H A
B_BIT. . . . . . . N NUMB 0021H A
D1MS . . . . . . . C ADDR 00DBH A
DISPLAY. . . . . . C ADDR 00AEH A
DPL1 . . . . . . . C ADDR 00BEH A
DPLOP. . . . . . . C ADDR 00C0H A
FLAG1. . . . . . . N NUMB 0038H A
GET_TEMPER . . . . C ADDR 0047H A
INIT_1820. . . . . C ADDR 001AH A
MAIN . . . . . . . C ADDR 0000H A
NUMTAB . . . . . . C ADDR 00E0H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
RE00 . . . . . . . C ADDR 008EH A
RE01 . . . . . . . C ADDR 0090H A
RE10 . . . . . . . C ADDR 009EH A
RE20 . . . . . . . C ADDR 00A4H A
READ_18200 . . . . C ADDR 008AH A
TEMPER_H . . . . . N NUMB 0028H A
TEMPER_L . . . . . N NUMB 0029H A
TSR1 . . . . . . . C ADDR 0021H A
TSR2 . . . . . . . C ADDR 002EH A
TSR3 . . . . . . . C ADDR 0036H A
TSR4 . . . . . . . C ADDR 003BH A
TSR5 . . . . . . . C ADDR 0040H A
TSR6 . . . . . . . C ADDR 0042H A
TSR7 . . . . . . . C ADDR 0044H A
TSS2 . . . . . . . C ADDR 0052H A
WR1. . . . . . . . C ADDR 0075H A
WRITE_1820 . . . . C ADDR 0072H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -