📄 main.lst
字号:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 1
MCS-51 Family Cross Assembler A S E M - 5 1 V 1.2
=====================================================
Source File: MAIN.ASM
Object File: MAIN.HEX
List File: MAIN.LST
Line I Addr Code Source
1: B B7 DAT BIT P3.7 ;数据通信口
2: N 00D2 swpH equ 0d2H
3: N 00FF swpL equ 0ffH
4: N 30 WDLSB DATA 30H ;读出的温度低字节
5: N 31 WDMSB DATA 31H ;读出的温度高字节
6: ;***************************************************************
7: N 0000 ORG 0000H
8: 0000 02 00 28 LJMP MAIN
9: N 000B ORG 000BH
10: 000B 02 00 0E LJMP TMR0 ;定时显示,用定时器0
11:
12: ;********************************************************
13: ;定时显示子程序
14: 000E TMR0:
15: 000E 75 8C D2 MOV TH0,#swpH ;定时器10MS中断
16: 0011 75 8A FF MOV TL0,#swpL
17: 0014 20 21 08 JB 21H,dsl;用于高低位轮流显示
18: 0017 85 42 80 MOV P0,42H;高位
19: 001A 43 80 20 ORL P0,#00100000B
20: 001D 80 06 sjmp kkk
21: 001F dsl:
22: 001F 85 43 80 MOV P0,43H;低位
23: 0022 43 80 10 ORL P0,#00010000B
24: 0025 kkk:
25: 0025 B2 21 cpl 21H
26: 0027 32 RETI
27:
28: ;主程序:
29: 0028 MAIN:
30: 0028 TOINIT:
31: ;定时器0的初始化
32: 0028 C2 AF CLR EA
33: 002A 75 89 01 MOV TMOD,#01H
34: 002D 75 8C D2 MOV TH0,#swpH ;定时器10MS中断
35: 0030 75 8A FF MOV TL0,#swpL
36: 0033 D2 AF SETB EA
37: 0035 D2 A9 SETB ET0
38: 0037 D2 8C SETB TR0
39: ;***********************************************************
40: ;清显示缓冲
41: 0039 7A 02 MOV R2,#2
42: 003B 78 42 MOV R0,#42H ;
43: 003D OVER:
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: 003D 76 00 MOV @R0,#00H;
45: 003F 08 INC R0
46: 0040 DA FB DJNZ R2,OVER
47:
48: 0042 LOOP:
49: 0042 12 00 47 LCALL DSWD ;调用读出DS18B20温度程序
50: 0045 80 FB SJMP LOOP
51:
52: ;**********************************************************
53: 0047 DSWD:
54: 0047 12 00 C7 LCALL RSTSNR;调用复位程序
55: 004A 30 D5 3D JNB F0,KEND ;如果没有应答,返回主程序
56: 004D 78 CC MOV R0,#0CCH
57: 004F 12 00 AB LCALL SEND_BYTE ;跳过ROM匹配
58: 0052 78 44 MOV R0,#44H ;发出温度转换命令
59: 0054 12 00 AB LCALL SEND_BYTE
60: 0057 D2 AF SETB EA
61: 0059 75 48 01 MOV 48H,#1 ;延时75ms以上准备读
62: 005C SS2:
63: 005C 75 49 FF MOV 49H,#255
64: 005F SS1:
65: 005F 75 4A FF MOV 4AH,#255
66: 0062 SS0:
67: 0062 D5 4A FD DJNZ 4AH,SS0
68: 0065 D5 49 F7 DJNZ 49H,SS1
69: 0068 D5 48 F1 DJNZ 48H,SS2
70: 006B C2 AF CLR EA
71: 006D 12 00 C7 LCALL RSTSNR
72: 0070 30 D5 17 JNB F0,KEND
73: 0073 78 CC MOV R0,#0CCH ;跳过ROM匹配
74: 0075 12 00 AB LCALL SEND_BYTE
75: 0078 78 BE MOV R0,#0BEH ;发出读温度命令
76: 007A 12 00 AB LCALL SEND_BYTE
77: 007D 12 00 BD LCALL READ_BYTE
78: 0080 F5 30 MOV WDLSB,A
79: 0082 12 00 BD LCALL READ_BYTE
80: 0085 F5 31 MOV WDMSB,A
81: 0087 12 00 8D LCALL TRANS12
82: 008A KEND:
83: 008A D2 AF SETB EA
84: 008C 22 RET
85: ;**********************************************************
86: ;温度转换程序(只取整数) ,30H=LSB,31H=MSB;
87: 008D TRANS12:
88: 008D E5 30 MOV A,30H
89: 008F 54 F0 ANL A,#0F0H
90: 0091 F5 3A MOV 3AH,A
91: 0093 E5 31 MOV A,31H
92: 0095 54 0F ANL A,#0FH
93: 0097 45 3A ORL A,3AH
94: 0099 C4 SWAP A
95: 009A 75 F0 0A MOV B,#10
96: 009D 84 DIV AB
97: ;MOV 42H,A
98: 009E 85 F0 43 MOV 43H,B ;
99: 00A1 75 F0 0A mov b,#10
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 00A4 84 div ab
101: 00A5 85 F0 42 mov 42H,B
102: 00A8 F5 41 mov 41H,A
103: 00AA 22 RET
104: ;*************************************************
105: 00AB SEND_BYTE: ;发送一个字节程序
106: 00AB E8 MOV A,R0
107: 00AC 7D 08 MOV R5,#8
108: 00AE C3 SEN3: CLR C
109: 00AF 13 RRC A
110: 00B0 40 05 JC SEN1
111: 00B2 12 00 F0 LCALL WRITE_0
112: 00B5 80 03 SJMP SEN2
113: 00B7 12 00 F9 SEN1: LCALL WRITE_1
114: 00BA DD F2 SEN2: DJNZ R5,SEN3 ; 循环8次,写一个字节
115: 00BC 22 RET
116: ;*************************************************
117: ;读一个字节程序
118: 00BD READ_BYTE:
119: 00BD 7D 08 MOV R5,#8
120: 00BF 12 01 07 READ1: LCALL READ
121: 00C2 13 RRC A
122: 00C3 DD FA DJNZ R5,READ1 ; 循环8次,读一个字节
123: 00C5 F8 MOV R0,A
124: 00C6 22 RET
125: ;*************************************************
126: ;复位程序,如果复位置位F0,没有就复位F0
127: 00C7 D2 B7 RSTSNR: SETB DAT
128: 00C9 00 NOP
129: 00CA 00 NOP
130: 00CB C2 B7 CLR DAT
131: 00CD 7E FA MOV R6,#250 ;主机发复位脉冲持续3μs×200=600μs
132: 00CF DE FE DJNZ R6,$
133: 00D1 7E 32 MOV R6,#50
134: 00D3 DE FE DJNZ R6,$
135: 00D5 D2 B7 SETB DAT ;主机释放总线,口线改为输入
136: 00D7 7E 0F MOV R6,#15
137: 00D9 DE FE DJNZ R6,$
138: 00DB 12 00 E5 CALL CHCK ;调用应答检查程序
139: 00DE 7E 3C MOV R6,#60
140: 00E0 DE FE DJNZ R6,$
141: 00E2 D2 B7 SETB DAT
142: 00E4 22 RET
143: ;*************************************************
144: 00E5 A2 B7 CHCK: MOV C,DAT
145: 00E7 40 04 JC RST0
146: 00E9 D2 D5 SETB F0 ;检测到信号,置位F0
147: 00EB 80 02 SJMP CHCK0
148: 00ED C2 D5 RST0: CLR F0 ;未准备好F0复位
149: 00EF 22 CHCK0: RET
150: ;*************************************************
151: ;写0
152: 00F0 WRITE_0:
153: 00F0 C2 B7 CLR DAT
154: 00F2 7E 1E MOV R6,#30
155: 00F4 DE FE DJNZ R6,$
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 4
Line I Addr Code Source
156: 00F6 D2 B7 SETB DAT
157: 00F8 22 RET
158: ;*************************************************
159: ;写1
160: 00F9 WRITE_1:
161: 00F9 C2 B7 CLR DAT
162: 00FB 00 NOP
163: 00FC 00 NOP
164: 00FD 00 NOP
165: 00FE 00 NOP
166: 00FF 00 NOP
167: 0100 D2 B7 SETB DAT
168: 0102 7E 1E MOV R6,#30
169: 0104 DE FE DJNZ R6,$
170: 0106 22 RET
171: ;*************************************************
172: ;读一位数据程序
173: 0107 D2 B7 READ: SETB DAT ;先复位至少1US产生读起始信号
174: 0109 00 NOP
175: 010A 00 NOP
176: 010B C2 B7 CLR DAT
177: 010D 00 NOP
178: 010E 00 NOP
179: 010F D2 B7 SETB DAT ;置位DAT准备接收数据
180: 0111 00 NOP
181: 0112 00 NOP
182: 0113 00 NOP
183: 0114 00 NOP
184: 0115 00 NOP
185: 0116 00 NOP
186: 0117 00 NOP
187: 0118 A2 B7 MOV C,DAT
188: 011A 7E 17 MOV R6,#23
189: 011C DE FE DJNZ R6,$
190: 011E 22 RET
191: ;**********************************************
192: ;13毫秒延时子程序
193: 011F 7C 14 DELAY10:MOV R4,#20
194: 0121 7D 1E D2: MOV R5,#30
195: 0123 DD FE DJNZ R5,$
196: 0125 DC FA DJNZ R4,D2
197: 0127 22 RET
198:
199: end
register banks used: ---
no errors
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 5
L I S T O F S Y M B O L S
=============================
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
AC BIT D6
ACC DATA E0
B DATA F0
CHCK CODE 00E5 144
CHCK0 CODE 00EF 149
CY BIT D7
D2 CODE 0121 194
DAT BIT B7 1
DELAY10 CODE 011F 193
DPH DATA 83
DPL DATA 82
DSL CODE 001F 21
DSWD CODE 0047 53
EA BIT AF
ES BIT AC
ET0 BIT A9
ET1 BIT AB
EX0 BIT A8
EX1 BIT AA
EXTI0 CODE 0003
EXTI1 CODE 0013
F0 BIT D5
IE DATA A8
IE0 BIT 89
IE1 BIT 8B
INT0 BIT B2
INT1 BIT B3
IP DATA B8
IT0 BIT 88
IT1 BIT 8A
KEND CODE 008A 82
KKK CODE 0025 24
LOOP CODE 0042 48
MAIN CODE 0028 29
OV BIT D2
OVER CODE 003D 43
P BIT D0
P0 DATA 80
P1 DATA 90
P2 DATA A0
P3 DATA B0
PCON DATA 87
PS BIT BC
PSW DATA D0
PT0 BIT B9
PT1 BIT BB
PX0 BIT B8
PX1 BIT BA
RB8 BIT 9A
RD BIT B7
ASEM-51 V1.2 Copyright (c) 1996 by W.W. Heinz PAGE 6
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
READ CODE 0107 173
READ1 CODE 00BF 120
READ_BYTE CODE 00BD 118
REN BIT 9C
RESET CODE 0000
RI BIT 98
RS0 BIT D3
RS1 BIT D4
RST0 CODE 00ED 148
RSTSNR CODE 00C7 127
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SEN1 CODE 00B7 113
SEN2 CODE 00BA 114
SEN3 CODE 00AE 108
SEND_BYTE CODE 00AB 105
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
SS0 CODE 0062 66
SS1 CODE 005F 64
SS2 CODE 005C 62
SWPH NUMBER 00D2 2
SWPL NUMBER 00FF 3
T0 BIT B4
T1 BIT B5
TB8 BIT 9B
TCON DATA 88
TF0 BIT 8D
TF1 BIT 8F
TH0 DATA 8C
TH1 DATA 8D
TI BIT 99
TIMER0 CODE 000B
TIMER1 CODE 001B
TL0 DATA 8A
TL1 DATA 8B
TMOD DATA 89
TMR0 CODE 000E 14
TOINIT CODE 0028 30
TR0 BIT 8C
TR1 BIT 8E
TRANS12 CODE 008D 87
TXD BIT B1
WDLSB DATA 30 4
WDMSB DATA 31 5
WR BIT B6
WRITE_0 CODE 00F0 152
WRITE_1 CODE 00F9 160
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -