📄 main.lis
字号:
030C ; delay_nus(30); //30us
030C 0EE1 ldi R16,30
030E 10E0 ldi R17,0
0310 9EDF xcall _delay_nus
0312 .dbline 53
0312 ; hold_dq; //释放总线
0312 BF9A sbi 0x17,7
0314 .dbline 54
0314 ; dq_set; //释放总线,DS18B20会将总线强制拉低
0314 C79A sbi 0x18,7
0316 .dbline 56
0316 ;
0316 ; }
0316 L70:
0316 .dbline 41
0316 6A95 dec R22
0318 L72:
0318 .dbline 41
0318 80E0 ldi R24,0
031A 8617 cp R24,R22
031C 60F3 brlo L69
031E X16:
031E .dbline 57
031E ; delay_nus(5); //2.71us(大于1us就行了)
031E 05E0 ldi R16,5
0320 10E0 ldi R17,0
0322 95DF xcall _delay_nus
0324 .dbline 58
0324 ; return(retVal);
0324 042F mov R16,R20
0326 .dbline -2
0326 L68:
0326 .dbline 0 ; func end
0326 6991 ld R22,y+
0328 4991 ld R20,y+
032A 0895 ret
032C .dbsym r retVal 20 c
032C .dbsym r i 22 c
032C .dbend
032C .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
032C ; temp -> R22
032C ; i -> R20
032C ; wb -> R10
.even
032C _writeByteDS18B20::
032C 0E940000 xcall push_xgsetF00C
0330 A02E mov R10,R16
0332 .dbline -1
0332 .dbline 62
0332 ; }
0332 ;
0332 ; void writeByteDS18B20(unsigned char wb)
0332 ; {
0332 .dbline 65
0332 ; unsigned char i;
0332 ; unsigned char temp;
0332 ; rls_dq; //释放总线
0332 BF98 cbi 0x17,7
0334 .dbline 66
0334 ; for(i=0;i<8;i++)
0334 4427 clr R20
0336 17C0 xjmp L79
0338 L76:
0338 .dbline 67
0338 ; {
0338 .dbline 68
0338 ; hold_dq; //Maga16控制总线
0338 BF9A sbi 0x17,7
033A .dbline 69
033A ; dq_clr; //强制拉低
033A C798 cbi 0x18,7
033C .dbline 70
033C ; delay_nus(4);
033C 04E0 ldi R16,4
033E 10E0 ldi R17,0
0340 86DF xcall _delay_nus
0342 .dbline 71
0342 ; temp=wb>>i;
0342 0A2D mov R16,R10
0344 142F mov R17,R20
0346 0E940000 xcall lsr8
034A 602F mov R22,R16
034C .dbline 72
034C ; temp&=0x01;
034C 6170 andi R22,1
034E .dbline 73
034E ; if(temp)
034E 11F0 breq L80
0350 X17:
0350 .dbline 74
0350 ; dq_set; //释放总线
0350 C79A sbi 0x18,7
0352 01C0 xjmp L81
0354 L80:
0354 .dbline 76
0354 ; else
0354 ; dq_clr; //强制拉低
0354 C798 cbi 0x18,7
0356 L81:
0356 .dbline 77
0356 ; delay_nus(50);
0356 02E3 ldi R16,50
0358 10E0 ldi R17,0
035A 79DF xcall _delay_nus
035C .dbline 79
035C ;
035C ; dq_set; //释放总线
035C C79A sbi 0x18,7
035E .dbline 80
035E ; delay_nus(4); //(大于1us就行了)
035E 04E0 ldi R16,4
0360 10E0 ldi R17,0
0362 75DF xcall _delay_nus
0364 .dbline 81
0364 ; }
0364 L77:
0364 .dbline 66
0364 4395 inc R20
0366 L79:
0366 .dbline 66
0366 4830 cpi R20,8
0368 38F3 brlo L76
036A X18:
036A .dbline -2
036A L75:
036A .dbline 0 ; func end
036A 0C940000 xjmp pop_xgsetF00C
036E .dbsym r temp 22 c
036E .dbsym r i 20 c
036E .dbsym r wb 10 c
036E .dbend
036E .dbfunc e readTempDS18B20 _readTempDS18B20 fV
036E ; tempH -> R12
036E ; tempL -> R10
036E ; x -> R10,R11
.even
036E _readTempDS18B20::
036E 0E940000 xcall push_xgset003C
0372 2297 sbiw R28,2
0374 .dbline -1
0374 .dbline 85
0374 ; }
0374 ;
0374 ; void readTempDS18B20(void)
0374 ; {
0374 .dbline 88
0374 ; unsigned char tempL,tempH;
0374 ; unsigned int x;
0374 ; resetDS18B20();
0374 93DF xcall _resetDS18B20
0376 .dbline 89
0376 ; writeByteDS18B20(0xcc); //跳过ROM
0376 0CEC ldi R16,204
0378 D9DF xcall _writeByteDS18B20
037A .dbline 90
037A ; writeByteDS18B20(0x44); //启动温度转换
037A 04E4 ldi R16,68
037C D7DF xcall _writeByteDS18B20
037E .dbline 91
037E ; delay_nus(500); //等待500us
037E 04EF ldi R16,500
0380 11E0 ldi R17,1
0382 65DF xcall _delay_nus
0384 .dbline 92
0384 ; resetDS18B20();
0384 8BDF xcall _resetDS18B20
0386 .dbline 93
0386 ; writeByteDS18B20(0xcc); //跳过ROM
0386 0CEC ldi R16,204
0388 D1DF xcall _writeByteDS18B20
038A .dbline 94
038A ; writeByteDS18B20(0xbe); //读数据
038A 0EEB ldi R16,190
038C CFDF xcall _writeByteDS18B20
038E .dbline 95
038E ; tempL=readByteDS18B20();
038E ADDF xcall _readByteDS18B20
0390 A02E mov R10,R16
0392 .dbline 96
0392 ; tempH=readByteDS18B20();
0392 ABDF xcall _readByteDS18B20
0394 C02E mov R12,R16
0396 .dbline 97
0396 ; x=(tempH<<8)|tempL;
0396 BC2C mov R11,R12
0398 .dbline 98
0398 ; resetDS18B20();
0398 81DF xcall _resetDS18B20
039A .dbline 99
039A ; writeByteDS18B20(0xcc); //跳过ROM
039A 0CEC ldi R16,204
039C C7DF xcall _writeByteDS18B20
039E .dbline 100
039E ; writeByteDS18B20(0x44); //启动温度转换
039E 04E4 ldi R16,68
03A0 C5DF xcall _writeByteDS18B20
03A2 .dbline 101
03A2 ; x=x*0.625;
03A2 00E0 ldi R16,<L83
03A4 10E0 ldi R17,>L83
03A6 0E940000 xcall lpm32
03AA 1801 movw R2,R16
03AC 2901 movw R4,R18
03AE 8501 movw R16,R10
03B0 0E940000 xcall uint2fp
03B4 3A93 st -y,R19
03B6 2A93 st -y,R18
03B8 1A93 st -y,R17
03BA 0A93 st -y,R16
03BC 8101 movw R16,R2
03BE 9201 movw R18,R4
03C0 0E940000 xcall fpmule2
03C4 0E940000 xcall fpint
03C8 5801 movw R10,R16
03CA .dbline 102
03CA ; LCD_DisplayInt(2,3,x); //未将温度值的小数点显示出
03CA B982 std y+1,R11
03CC A882 std y+0,R10
03CE 23E0 ldi R18,3
03D0 02E0 ldi R16,2
03D2 A7DE xcall _LCD_DisplayInt
03D4 .dbline -2
03D4 L82:
03D4 .dbline 0 ; func end
03D4 2296 adiw R28,2
03D6 0C940000 xjmp pop_xgset003C
03DA .dbsym r tempH 12 c
03DA .dbsym r tempL 10 c
03DA .dbsym r x 10 i
03DA .dbend
03DA .dbfile D:\DS18B20\main.c
03DA .dbfunc e main _main fV
03DA ; temp -> R10,R11
03DA ; i -> R10
.even
03DA _main::
03DA 2297 sbiw R28,2
03DC .dbline -1
03DC .dbline 7
03DC ; #include <iom16v.h>
03DC ; #include <macros.h>
03DC ; #include "lcd.h"
03DC ; #include "ds18b20.h"
03DC ;
03DC ; void main(void)
03DC ; {
03DC .dbline 8
03DC ; unsigned char i=0;
03DC AA24 clr R10
03DE .dbline 9
03DE ; unsigned int temp=0;
03DE BB24 clr R11
03E0 .dbline 10
03E0 ; CLI();
03E0 F894 cli
03E2 .dbline 11
03E2 ; LCD_init();
03E2 0EDE xcall _LCD_init
03E4 .dbline 12
03E4 ; SEI();
03E4 7894 sei
03E6 .dbline 13
03E6 ; LCD_DisplayString(1,4,"DS18B20");
03E6 80E0 ldi R24,<L85
03E8 90E0 ldi R25,>L85
03EA 9983 std y+1,R25
03EC 8883 std y+0,R24
03EE 24E0 ldi R18,4
03F0 01E0 ldi R16,1
03F2 83DE xcall _LCD_DisplayString
03F4 .dbline 14
03F4 ; LCD_DisplayString(2,1,"T=");
03F4 80E0 ldi R24,<L86
03F6 90E0 ldi R25,>L86
03F8 9983 std y+1,R25
03FA 8883 std y+0,R24
03FC 21E0 ldi R18,1
03FE 02E0 ldi R16,2
0400 7CDE xcall _LCD_DisplayString
0402 01C0 xjmp L88
0404 L87:
0404 .dbline 16
0404 ; while(1)
0404 ; {
0404 .dbline 17
0404 ; readTempDS18B20();
0404 B4DF xcall _readTempDS18B20
0406 .dbline 18
0406 ; }
0406 L88:
0406 .dbline 15
0406 FECF xjmp L87
0408 X19:
0408 .dbline -2
0408 L84:
0408 .dbline 0 ; func end
0408 2296 adiw R28,2
040A 0895 ret
040C .dbsym r temp 10 i
040C .dbsym r i 10 c
040C .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\DS18B20\main.c
0000 _ch1::
0000 .blkb 6
0006 .dbfile D:\DS18B20\lcd.h
0006 .dbsym e ch1 _ch1 A[6:6]c
.area data(ram, con, rel)
0000 .dbfile D:\DS18B20\lcd.h
0000 L86:
0000 .blkb 3
.area idata
0000 543D00 .byte 'T,61,0
.area data(ram, con, rel)
0003 .dbfile D:\DS18B20\lcd.h
0003 L85:
0003 .blkb 8
.area idata
0003 4453313842323000 .byte 'D,'S,49,56,'B,50,48,0
.area data(ram, con, rel)
000B .dbfile D:\DS18B20\lcd.h
.area lit(rom, con, rel)
0000 L83:
0000 0000203F .word 0x0,0x3f20
0004 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -