📄 avr_ds18b20.lss
字号:
/*******************************************************************/
void Ok_Menu (void)
{
2c6: cf 93 push r28
uchar m;
lcd_init(); //初始化LCD
2c8: 0e 94 00 01 call 0x200
lcd_pos(0); //设置显示位置为第一行的第1个字符
2cc: 80 e0 ldi r24, 0x00 ; 0
2ce: 0e 94 48 01 call 0x290
m = 0;
2d2: c0 e0 ldi r28, 0x00 ; 0
while(cdis1[m] != '\0')
{ //显示字符
lcd_wdat(cdis1[m]);
m++;
2d4: 80 91 93 00 lds r24, 0x0093
2d8: 88 23 and r24, r24
2da: 71 f0 breq .+28 ; 0x2f8
2dc: ec 2f mov r30, r28
2de: ff 27 eor r31, r31
2e0: ed 56 subi r30, 0x6D ; 109
2e2: ff 4f sbci r31, 0xFF ; 255
2e4: 80 81 ld r24, Z
2e6: 0e 94 3a 01 call 0x274
2ea: cf 5f subi r28, 0xFF ; 255
2ec: ec 2f mov r30, r28
2ee: ff 27 eor r31, r31
2f0: ed 56 subi r30, 0x6D ; 109
2f2: ff 4f sbci r31, 0xFF ; 255
2f4: 80 81 ld r24, Z
2f6: f0 cf rjmp .-32 ; 0x2d8
}
lcd_pos(0x40); //设置显示位置为第二行第1个字符
2f8: 80 e4 ldi r24, 0x40 ; 64
2fa: 0e 94 48 01 call 0x290
m = 0;
2fe: c0 e0 ldi r28, 0x00 ; 0
while(cdis2[m] != '\0')
{
lcd_wdat(cdis2[m]); //显示字符
m++;
300: 80 91 82 00 lds r24, 0x0082
304: 88 23 and r24, r24
306: 71 f0 breq .+28 ; 0x324
308: ec 2f mov r30, r28
30a: ff 27 eor r31, r31
30c: ee 57 subi r30, 0x7E ; 126
30e: ff 4f sbci r31, 0xFF ; 255
310: 80 81 ld r24, Z
312: 0e 94 3a 01 call 0x274
316: cf 5f subi r28, 0xFF ; 255
318: ec 2f mov r30, r28
31a: ff 27 eor r31, r31
31c: ee 57 subi r30, 0x7E ; 126
31e: ff 4f sbci r31, 0xFF ; 255
320: 80 81 ld r24, Z
322: f0 cf rjmp .-32 ; 0x304
}
writetab(); //自定义字符写入CGRAM
324: 0e 94 4d 01 call 0x29a
delay_nms(5);
328: 85 e0 ldi r24, 0x05 ; 5
32a: 90 e0 ldi r25, 0x00 ; 0
32c: 0e 94 47 00 call 0x8e
lcd_pos(0x4d);
330: 8d e4 ldi r24, 0x4D ; 77
332: 0e 94 48 01 call 0x290
lcd_wdat(0x00); //显示自定义字符
336: 80 e0 ldi r24, 0x00 ; 0
338: 0e 94 3a 01 call 0x274
33c: cf 91 pop r28
33e: 08 95 ret
00000340 <Error_Menu>:
}
/*******************************************************************/
/* */
/* DS18B20 ERROR 显示菜单 */
/* */
/*******************************************************************/
void Error_Menu (void)
{
340: cf 93 push r28
uchar m;
lcd_init(); //初始化LCD
342: 0e 94 00 01 call 0x200
lcd_pos(0); //设置显示位置为第一行的第1个字符
346: 80 e0 ldi r24, 0x00 ; 0
348: 0e 94 48 01 call 0x290
m = 0;
34c: c0 e0 ldi r28, 0x00 ; 0
while(cdis3[m] != '\0')
{ //显示字符
lcd_wdat(cdis3[m]);
m++;
34e: 80 91 71 00 lds r24, 0x0071
352: 88 23 and r24, r24
354: 71 f0 breq .+28 ; 0x372
356: ec 2f mov r30, r28
358: ff 27 eor r31, r31
35a: ef 58 subi r30, 0x8F ; 143
35c: ff 4f sbci r31, 0xFF ; 255
35e: 80 81 ld r24, Z
360: 0e 94 3a 01 call 0x274
364: cf 5f subi r28, 0xFF ; 255
366: ec 2f mov r30, r28
368: ff 27 eor r31, r31
36a: ef 58 subi r30, 0x8F ; 143
36c: ff 4f sbci r31, 0xFF ; 255
36e: 80 81 ld r24, Z
370: f0 cf rjmp .-32 ; 0x352
}
lcd_pos(0x40); //设置显示位置为第二行第1个字符
372: 80 e4 ldi r24, 0x40 ; 64
374: 0e 94 48 01 call 0x290
m = 0;
378: c0 e0 ldi r28, 0x00 ; 0
while(cdis4[m] != '\0')
{
lcd_wdat(cdis4[m]); //显示字符
m++;
37a: 80 91 60 00 lds r24, 0x0060
37e: 88 23 and r24, r24
380: 79 f0 breq .+30 ; 0x3a0
382: ec 2f mov r30, r28
384: ff 27 eor r31, r31
386: e0 5a subi r30, 0xA0 ; 160
388: ff 4f sbci r31, 0xFF ; 255
38a: 80 81 ld r24, Z
38c: 0e 94 3a 01 call 0x274
390: cf 5f subi r28, 0xFF ; 255
392: ec 2f mov r30, r28
394: ff 27 eor r31, r31
396: e0 5a subi r30, 0xA0 ; 160
398: ff 4f sbci r31, 0xFF ; 255
39a: 80 81 ld r24, Z
39c: 88 23 and r24, r24
39e: 89 f7 brne .-30 ; 0x382
3a0: cf 91 pop r28
3a2: 08 95 ret
000003a4 <Disp_Temperature>:
}
}
/*******************************************************************/
/* */
/* 数据转换与温度显示 */
/* */
/*******************************************************************/
void Disp_Temperature(void)
{
display[4]=temp_data[0]&0x0f;
3a4: 90 91 c1 00 lds r25, 0x00C1
3a8: 89 2f mov r24, r25
3aa: 8f 70 andi r24, 0x0F ; 15
display[0]=ditab[display[4]]+0x30; //查表得小数位的值
3ac: e8 2f mov r30, r24
3ae: ff 27 eor r31, r31
3b0: e4 55 subi r30, 0x54 ; 84
3b2: ff 4f sbci r31, 0xFF ; 255
3b4: 80 81 ld r24, Z
3b6: 80 5d subi r24, 0xD0 ; 208
3b8: 80 93 bc 00 sts 0x00BC, r24
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
3bc: 29 2f mov r18, r25
3be: 33 27 eor r19, r19
3c0: 44 e0 ldi r20, 0x04 ; 4
3c2: 36 95 lsr r19
3c4: 27 95 ror r18
3c6: 4a 95 dec r20
3c8: e1 f7 brne .-8 ; 0x3c2
3ca: 80 91 c2 00 lds r24, 0x00C2
3ce: 99 27 eor r25, r25
3d0: 8f 70 andi r24, 0x0F ; 15
3d2: 90 70 andi r25, 0x00 ; 0
3d4: 34 e0 ldi r19, 0x04 ; 4
3d6: 88 0f add r24, r24
3d8: 99 1f adc r25, r25
3da: 3a 95 dec r19
3dc: e1 f7 brne .-8 ; 0x3d6
3de: 28 2b or r18, r24
3e0: 20 93 c0 00 sts 0x00C0, r18
display[3]=display[4]/100+0x30;
3e4: 82 2f mov r24, r18
3e6: 64 e6 ldi r22, 0x64 ; 100
3e8: 0e 94 4e 02 call 0x49c
3ec: 38 2f mov r19, r24
3ee: 30 5d subi r19, 0xD0 ; 208
3f0: 30 93 bf 00 sts 0x00BF, r19
display[1]=display[4]%100;
3f4: 82 2f mov r24, r18
3f6: 0e 94 4e 02 call 0x49c
3fa: 29 2f mov r18, r25
display[2]=display[1]/10+0x30;
3fc: 89 2f mov r24, r25
3fe: 6a e0 ldi r22, 0x0A ; 10
400: 0e 94 4e 02 call 0x49c
404: 48 2f mov r20, r24
406: 40 5d subi r20, 0xD0 ; 208
408: 40 93 be 00 sts 0x00BE, r20
display[1]=display[1]%10+0x30;
40c: 82 2f mov r24, r18
40e: 0e 94 4e 02 call 0x49c
412: 89 2f mov r24, r25
414: 80 5d subi r24, 0xD0 ; 208
416: 80 93 bd 00 sts 0x00BD, r24
if(display[3]==0x30) //高位为0,不显示
41a: 30 33 cpi r19, 0x30 ; 48
41c: 39 f4 brne .+14 ; 0x42c
{
display[3]=0x20;
41e: 80 e2 ldi r24, 0x20 ; 32
420: 80 93 bf 00 sts 0x00BF, r24
if(display[2]==0x30) //次高位为0,不显示
424: 40 33 cpi r20, 0x30 ; 48
426: 11 f4 brne .+4 ; 0x42c
display[2]=0x20;
428: 80 93 be 00 sts 0x00BE, r24
}
lcd_pos(0x48);
42c: 88 e4 ldi r24, 0x48 ; 72
42e: 0e 94 48 01 call 0x290
lcd_wdat(display[3]); //百位数显示
432: 80 91 bf 00 lds r24, 0x00BF
436: 0e 94 3a 01 call 0x274
lcd_pos(0x49);
43a: 89 e4 ldi r24, 0x49 ; 73
43c: 0e 94 48 01 call 0x290
lcd_wdat(display[2]); //十位数显示
440: 80 91 be 00 lds r24, 0x00BE
444: 0e 94 3a 01 call 0x274
lcd_pos(0x4a);
448: 8a e4 ldi r24, 0x4A ; 74
44a: 0e 94 48 01 call 0x290
lcd_wdat(display[1]); //个位数显示
44e: 80 91 bd 00 lds r24, 0x00BD
452: 0e 94 3a 01 call 0x274
lcd_pos(0x4c);
456: 8c e4 ldi r24, 0x4C ; 76
458: 0e 94 48 01 call 0x290
lcd_wdat(display[0]); //小数位数显示
45c: 80 91 bc 00 lds r24, 0x00BC
460: 0e 94 3a 01 call 0x274
464: 08 95 ret
00000466 <main>:
}
/********************************************************/
/* */
/* 主函数 */
/* */
/********************************************************/
int main(void)
{
466: cf e5 ldi r28, 0x5F ; 95
468: d4 e0 ldi r29, 0x04 ; 4
46a: de bf out 0x3e, r29 ; 62
46c: cd bf out 0x3d, r28 ; 61
init_io();
46e: 0e 94 6e 00 call 0xdc
while(1)
{
Ok_Menu ();
472: 0e 94 63 01 call 0x2c6
do
{
Read_Temperature();
476: 0e 94 c6 00 call 0x18c
Disp_Temperature();
47a: 0e 94 d2 01 call 0x3a4
}
47e: 80 91 c3 00 lds r24, 0x00C3
482: 88 23 and r24, r24
484: c1 f3 breq .-16 ; 0x476
while(!presence) ;
Error_Menu ();
486: 0e 94 a0 01 call 0x340
do
{
Init_DS18B20();
48a: 0e 94 78 00 call 0xf0
beep();
48e: 0e 94 57 00 call 0xae
}
492: 80 91 c3 00 lds r24, 0x00C3
496: 88 23 and r24, r24
498: c1 f7 brne .-16 ; 0x48a
49a: eb cf rjmp .-42 ; 0x472
0000049c <__udivmodqi4>:
49c: 99 1b sub r25, r25
49e: 79 e0 ldi r23, 0x09 ; 9
4a0: 04 c0 rjmp .+8 ; 0x4aa
000004a2 <__udivmodqi4_loop>:
4a2: 99 1f adc r25, r25
4a4: 96 17 cp r25, r22
4a6: 08 f0 brcs .+2 ; 0x4aa
4a8: 96 1b sub r25, r22
000004aa <__udivmodqi4_ep>:
4aa: 88 1f adc r24, r24
4ac: 7a 95 dec r23
4ae: c9 f7 brne .-14 ; 0x4a2
4b0: 80 95 com r24
4b2: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -