📄 main.lss
字号:
}
/*********************************************************/
/* */
/* 读取温度 */
/* */
/*********************************************************/
void Read_Temperature(uchar x)
{
144: 0f 93 push r16
146: 1f 93 push r17
148: cf 93 push r28
14a: df 93 push r29
14c: 08 2f mov r16, r24
uchar i;
Init_DS18B20();
14e: b2 df rcall .-156 ; 0xb4
if(presence)
150: 80 91 94 00 lds r24, 0x0094
154: 88 23 and r24, r24
156: 11 f0 breq .+4 ; 0x15c
{ beep();}
158: 8f df rcall .-226 ; 0x78
15a: 23 c0 rjmp .+70 ; 0x1a2
else
{
WriteOneChar(0xCC); //跳过读序号列号的操作
15c: 8c ec ldi r24, 0xCC ; 204
15e: de df rcall .-68 ; 0x11c
WriteOneChar(0x44); //启动温度转换
160: 84 e4 ldi r24, 0x44 ; 68
162: dc df rcall .-72 ; 0x11c
Init_DS18B20();
164: a7 df rcall .-178 ; 0xb4
// WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x55); //匹配ROM命令
166: 85 e5 ldi r24, 0x55 ; 85
168: d9 df rcall .-78 ; 0x11c
16a: c0 e0 ldi r28, 0x00 ; 0
16c: d0 e0 ldi r29, 0x00 ; 0
16e: 17 e0 ldi r17, 0x07 ; 7
for(i=0;i<8;i++)
{
WriteOneChar(RomCode[x][i]);
170: e0 2f mov r30, r16
172: ff 27 eor r31, r31
174: 33 e0 ldi r19, 0x03 ; 3
176: ee 0f add r30, r30
178: ff 1f adc r31, r31
17a: 3a 95 dec r19
17c: e1 f7 brne .-8 ; 0x176
17e: ec 0f add r30, r28
180: fd 1f adc r31, r29
182: e0 5a subi r30, 0xA0 ; 160
184: ff 4f sbci r31, 0xFF ; 255
186: 80 81 ld r24, Z
188: c9 df rcall .-110 ; 0x11c
18a: 11 50 subi r17, 0x01 ; 1
18c: 21 96 adiw r28, 0x01 ; 1
18e: 17 ff sbrs r17, 7
190: ef cf rjmp .-34 ; 0x170
}
WriteOneChar(0xBE); //读取温度寄存器
192: 8e eb ldi r24, 0xBE ; 190
194: c3 df rcall .-122 ; 0x11c
temp_data[0] = ReadOneChar(); //温度低8位
196: ac df rcall .-168 ; 0xf0
198: 80 93 91 00 sts 0x0091, r24
temp_data[1] = ReadOneChar(); //温度高8位
19c: a9 df rcall .-174 ; 0xf0
19e: 80 93 92 00 sts 0x0092, r24
1a2: df 91 pop r29
1a4: cf 91 pop r28
1a6: 1f 91 pop r17
1a8: 0f 91 pop r16
1aa: 08 95 ret
000001ac <Disp_Temperature>:
}
}
/*********************************************************/
/* */
/* 数据处理与温度显示 */
/* */
/*********************************************************/
void Disp_Temperature(uchar ch)
{
1ac: cf 93 push r28
1ae: c8 2f mov r28, r24
display[4]=temp_data[0]&0x0f;
1b0: 90 91 91 00 lds r25, 0x0091
1b4: 89 2f mov r24, r25
1b6: 8f 70 andi r24, 0x0F ; 15
display[0]=ditab[display[4]]; //查表得小数位的值
1b8: e8 2f mov r30, r24
1ba: ff 27 eor r31, r31
1bc: e0 59 subi r30, 0x90 ; 144
1be: ff 4f sbci r31, 0xFF ; 255
1c0: 80 81 ld r24, Z
1c2: 80 93 8c 00 sts 0x008C, r24
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
1c6: 29 2f mov r18, r25
1c8: 33 27 eor r19, r19
1ca: 54 e0 ldi r21, 0x04 ; 4
1cc: 36 95 lsr r19
1ce: 27 95 ror r18
1d0: 5a 95 dec r21
1d2: e1 f7 brne .-8 ; 0x1cc
1d4: 80 91 92 00 lds r24, 0x0092
1d8: 99 27 eor r25, r25
1da: 8f 70 andi r24, 0x0F ; 15
1dc: 90 70 andi r25, 0x00 ; 0
1de: 44 e0 ldi r20, 0x04 ; 4
1e0: 88 0f add r24, r24
1e2: 99 1f adc r25, r25
1e4: 4a 95 dec r20
1e6: e1 f7 brne .-8 ; 0x1e0
1e8: 28 2b or r18, r24
1ea: 20 93 90 00 sts 0x0090, r18
display[3]=display[4]/100;
1ee: 82 2f mov r24, r18
1f0: 64 e6 ldi r22, 0x64 ; 100
1f2: 98 d0 rcall .+304 ; 0x324
1f4: 38 2f mov r19, r24
1f6: 80 93 8f 00 sts 0x008F, r24
display[1]=display[4]%100;
1fa: 82 2f mov r24, r18
1fc: 93 d0 rcall .+294 ; 0x324
1fe: 29 2f mov r18, r25
display[2]=display[1]/10;
200: 4a e0 ldi r20, 0x0A ; 10
202: 89 2f mov r24, r25
204: 64 2f mov r22, r20
206: 8e d0 rcall .+284 ; 0x324
208: 58 2f mov r21, r24
20a: 80 93 8e 00 sts 0x008E, r24
display[1]=display[1]%10;
20e: 82 2f mov r24, r18
210: 89 d0 rcall .+274 ; 0x324
212: 90 93 8d 00 sts 0x008D, r25
if(!display[3]) //高位为0,不显示
216: 33 23 and r19, r19
218: 31 f4 brne .+12 ; 0x226
{
display[3]=0x0a;
21a: 40 93 8f 00 sts 0x008F, r20
if(!display[2]) //次高位为0,不显示
21e: 55 23 and r21, r21
220: 11 f4 brne .+4 ; 0x226
display[2]=0x0a;
222: 40 93 8e 00 sts 0x008E, r20
}
PORTA = 0xc6; //显示 C
226: 86 ec ldi r24, 0xC6 ; 198
228: 8b bb out 0x1b, r24 ; 27
PORTC = 0x7f;
22a: 8f e7 ldi r24, 0x7F ; 127
22c: 85 bb out 0x15, r24 ; 21
delay_nms(1);
22e: 81 e0 ldi r24, 0x01 ; 1
230: 90 e0 ldi r25, 0x00 ; 0
232: 12 df rcall .-476 ; 0x58
PORTA = 0x9c; //显示 °
234: 8c e9 ldi r24, 0x9C ; 156
236: 8b bb out 0x1b, r24 ; 27
PORTC = 0xbf;
238: 8f eb ldi r24, 0xBF ; 191
23a: 85 bb out 0x15, r24 ; 21
delay_nms(1);
23c: 81 e0 ldi r24, 0x01 ; 1
23e: 90 e0 ldi r25, 0x00 ; 0
240: 0b df rcall .-490 ; 0x58
PORTA =LEDData[display[0]]; //显示小数位
242: 80 91 8c 00 lds r24, 0x008C
246: e8 2f mov r30, r24
248: ff 27 eor r31, r31
24a: e0 58 subi r30, 0x80 ; 128
24c: ff 4f sbci r31, 0xFF ; 255
24e: 80 81 ld r24, Z
250: 8b bb out 0x1b, r24 ; 27
PORTC = 0xdf;
252: 8f ed ldi r24, 0xDF ; 223
254: 85 bb out 0x15, r24 ; 21
delay_nms(1);
256: 81 e0 ldi r24, 0x01 ; 1
258: 90 e0 ldi r25, 0x00 ; 0
25a: fe de rcall .-516 ; 0x58
PORTA =LEDData[display[1]]; //显示个位
25c: 80 91 8d 00 lds r24, 0x008D
260: e8 2f mov r30, r24
262: ff 27 eor r31, r31
264: e0 58 subi r30, 0x80 ; 128
266: ff 4f sbci r31, 0xFF ; 255
268: 80 81 ld r24, Z
26a: 8b bb out 0x1b, r24 ; 27
PORTA &=~_BV(PA7); //显示小数点
26c: df 98 cbi 0x1b, 7 ; 27
PORTC = 0xef;
26e: 8f ee ldi r24, 0xEF ; 239
270: 85 bb out 0x15, r24 ; 21
delay_nms(1);
272: 81 e0 ldi r24, 0x01 ; 1
274: 90 e0 ldi r25, 0x00 ; 0
276: f0 de rcall .-544 ; 0x58
PORTA =LEDData[display[2]]; //显示十位
278: 80 91 8e 00 lds r24, 0x008E
27c: e8 2f mov r30, r24
27e: ff 27 eor r31, r31
280: e0 58 subi r30, 0x80 ; 128
282: ff 4f sbci r31, 0xFF ; 255
284: 80 81 ld r24, Z
286: 8b bb out 0x1b, r24 ; 27
PORTC = 0xf7;
288: 87 ef ldi r24, 0xF7 ; 247
28a: 85 bb out 0x15, r24 ; 21
delay_nms(1);
28c: 81 e0 ldi r24, 0x01 ; 1
28e: 90 e0 ldi r25, 0x00 ; 0
290: e3 de rcall .-570 ; 0x58
PORTA =LEDData[display[3]]; //显示十位
292: 80 91 8f 00 lds r24, 0x008F
296: e8 2f mov r30, r24
298: ff 27 eor r31, r31
29a: e0 58 subi r30, 0x80 ; 128
29c: ff 4f sbci r31, 0xFF ; 255
29e: 80 81 ld r24, Z
2a0: 8b bb out 0x1b, r24 ; 27
PORTC = 0xfb;
2a2: 8b ef ldi r24, 0xFB ; 251
2a4: 85 bb out 0x15, r24 ; 21
delay_nms(1);
2a6: 81 e0 ldi r24, 0x01 ; 1
2a8: 90 e0 ldi r25, 0x00 ; 0
2aa: d6 de rcall .-596 ; 0x58
PORTA =LEDData[0x0b]; //显示 "-"
2ac: 80 91 8b 00 lds r24, 0x008B
2b0: 8b bb out 0x1b, r24 ; 27
PORTC = 0xfd;
2b2: 8d ef ldi r24, 0xFD ; 253
2b4: 85 bb out 0x15, r24 ; 21
delay_nms(1);
2b6: 81 e0 ldi r24, 0x01 ; 1
2b8: 90 e0 ldi r25, 0x00 ; 0
2ba: ce de rcall .-612 ; 0x58
PORTA =LEDData[ch+1]; //显示通道号
2bc: ec 2f mov r30, r28
2be: ff 27 eor r31, r31
2c0: e0 58 subi r30, 0x80 ; 128
2c2: ff 4f sbci r31, 0xFF ; 255
2c4: 81 81 ldd r24, Z+1 ; 0x01
2c6: 8b bb out 0x1b, r24 ; 27
PORTC = 0xfe;
2c8: 8e ef ldi r24, 0xFE ; 254
2ca: 85 bb out 0x15, r24 ; 21
delay_nms(1);
2cc: 81 e0 ldi r24, 0x01 ; 1
2ce: 90 e0 ldi r25, 0x00 ; 0
2d0: c3 de rcall .-634 ; 0x58
PORTC = 0xff; //关闭显示
2d2: 8f ef ldi r24, 0xFF ; 255
2d4: 85 bb out 0x15, r24 ; 21
2d6: cf 91 pop r28
2d8: 08 95 ret
000002da <main>:
}
/********************************************************/
/* */
/* 主函数 */
/* */
/********************************************************/
int main(void)
{
2da: cf e5 ldi r28, 0x5F ; 95
2dc: d2 e0 ldi r29, 0x02 ; 2
2de: de bf out 0x3e, r29 ; 62
2e0: cd bf out 0x3d, r28 ; 61
init_io(); //芯片初始化端口
2e2: de de rcall .-580 ; 0xa0
2e4: c7 ec ldi r28, 0xC7 ; 199
2e6: d0 e0 ldi r29, 0x00 ; 0
uint time;
while(1)
{
//第一个DS18B20
for(time=0;time<200;time++)
{
Read_Temperature(0); //读温度值
2e8: 80 e0 ldi r24, 0x00 ; 0
2ea: 2c df rcall .-424 ; 0x144
if(presence)
2ec: 80 91 94 00 lds r24, 0x0094
2f0: 88 23 and r24, r24
2f2: 19 f0 breq .+6 ; 0x2fa
{PORTC = 0xff;} //DS18B20不正常,关闭显示
2f4: 8f ef ldi r24, 0xFF ; 255
2f6: 85 bb out 0x15, r24 ; 21
2f8: 01 c0 rjmp .+2 ; 0x2fc
else Disp_Temperature(0); //显示温度
2fa: 58 df rcall .-336 ; 0x1ac
2fc: 21 97 sbiw r28, 0x01 ; 1
2fe: d7 ff sbrs r29, 7
300: f3 cf rjmp .-26 ; 0x2e8
302: c7 ec ldi r28, 0xC7 ; 199
304: d0 e0 ldi r29, 0x00 ; 0
}
//第二个DS18B20
for(time=0;time<200;time++)
{
Read_Temperature(1); //读温度值
306: 81 e0 ldi r24, 0x01 ; 1
308: 1d df rcall .-454 ; 0x144
if(presence)
30a: 80 91 94 00 lds r24, 0x0094
30e: 88 23 and r24, r24
310: 19 f0 breq .+6 ; 0x318
{PORTC = 0xff ;} //DS18B20不正常,关闭显示
312: 8f ef ldi r24, 0xFF ; 255
314: 85 bb out 0x15, r24 ; 21
316: 02 c0 rjmp .+4 ; 0x31c
else Disp_Temperature(1); //显示温度
318: 81 e0 ldi r24, 0x01 ; 1
31a: 48 df rcall .-368 ; 0x1ac
31c: 21 97 sbiw r28, 0x01 ; 1
31e: d7 ff sbrs r29, 7
320: f2 cf rjmp .-28 ; 0x306
322: e0 cf rjmp .-64 ; 0x2e4
00000324 <__udivmodqi4>:
324: 99 1b sub r25, r25
326: 79 e0 ldi r23, 0x09 ; 9
328: 04 c0 rjmp .+8 ; 0x332
0000032a <__udivmodqi4_loop>:
32a: 99 1f adc r25, r25
32c: 96 17 cp r25, r22
32e: 08 f0 brcs .+2 ; 0x332
330: 96 1b sub r25, r22
00000332 <__udivmodqi4_ep>:
332: 88 1f adc r24, r24
334: 7a 95 dec r23
336: c9 f7 brne .-14 ; 0x32a
338: 80 95 com r24
33a: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -