📄 ds18b20.lis
字号:
00A0 .dbend
00A0 .dbfunc e gettemp _gettemp fc
00A0 ; wm3 -> R10
00A0 ; wm2 -> R10
00A0 ; wm1 -> R22
00A0 ; wm0 -> R20
00A0 ; teml -> R20
00A0 ; temh -> R22
.even
00A0 _gettemp::
00A0 0E940000 xcall push_xgsetF00C
00A4 .dbline -1
00A4 .dbline 68
00A4 ; }
00A4 ;
00A4 ; unsigned char gettemp(void) //读取温度值
00A4 ; {
00A4 .dbline 70
00A4 ; unsigned char temh,teml,wm0,wm1,wm2,wm3;
00A4 ; init_1820(); //复位18b20
00A4 ADDF xcall _init_1820
00A6 .dbline 71
00A6 ; write_1820(0xcc); // 发出转换命令
00A6 0CEC ldi R16,204
00A8 BEDF xcall _write_1820
00AA .dbline 72
00AA ; write_1820(0x44);
00AA 04E4 ldi R16,68
00AC BCDF xcall _write_1820
00AE .dbline 73
00AE ; delay_nms(1100); //不延时也好使,不知道怎么回事!
00AE 0CE4 ldi R16,1100
00B0 14E0 ldi R17,4
00B2 2ED0 xcall _delay_nms
00B4 .dbline 74
00B4 ; init_1820();
00B4 A5DF xcall _init_1820
00B6 .dbline 75
00B6 ; write_1820(0xcc); //发出读命令
00B6 0CEC ldi R16,204
00B8 B6DF xcall _write_1820
00BA .dbline 76
00BA ; write_1820(0xbe);
00BA 0EEB ldi R16,190
00BC B4DF xcall _write_1820
00BE .dbline 77
00BE ; teml=read_1820(); //读数据
00BE CEDF xcall _read_1820
00C0 402F mov R20,R16
00C2 .dbline 78
00C2 ; temh=read_1820();
00C2 CCDF xcall _read_1820
00C4 602F mov R22,R16
00C6 .dbline 79
00C6 ; wm0=teml&0xF0; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
00C6 407F andi R20,240
00C8 .dbline 80
00C8 ; wm1=temh&0x0F;
00C8 6F70 andi R22,15
00CA .dbline 81
00CA ; wm2=wm1+wm0; //16进制转10进制
00CA A62E mov R10,R22
00CC A40E add R10,R20
00CE .dbline 82
00CE ; wm3=wm2/100;
00CE 14E6 ldi R17,100
00D0 0A2D mov R16,R10
00D2 0E940000 xcall div8u
00D6 A02E mov R10,R16
00D8 .dbline 85
00D8 ; //wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml使显示的低位
00D8 ; //wml=(wm2%100)%10;
00D8 ; return wm3;
00D8 .dbline -2
00D8 L19:
00D8 .dbline 0 ; func end
00D8 0C940000 xjmp pop_xgsetF00C
00DC .dbsym r wm3 10 c
00DC .dbsym r wm2 10 c
00DC .dbsym r wm1 22 c
00DC .dbsym r wm0 20 c
00DC .dbsym r teml 20 c
00DC .dbsym r temh 22 c
00DC .dbend
00DC .dbfunc e delay_1us _delay_1us fV
.even
00DC _delay_1us::
00DC .dbline -1
00DC .dbline 97
00DC ; }
00DC ;
00DC ;
00DC ; //延时程序:
00DC ;
00DC ; //delay.h
00DC ; /*-----------------------------------------------------------------------
00DC ; 延时函数
00DC ; 系统时钟:8M
00DC ; -----------------------------------------------------------------------*/
00DC ; void delay_1us(void) //1us延时函数
00DC ; {
00DC .dbline 98
00DC ; asm("nop");
00DC 0000 nop
00DE .dbline -2
00DE L20:
00DE .dbline 0 ; func end
00DE 0895 ret
00E0 .dbend
00E0 .dbfunc e delay_nus _delay_nus fV
00E0 ; i -> R20,R21
00E0 ; n -> R10,R11
.even
00E0 _delay_nus::
00E0 0E940000 xcall push_xgset300C
00E4 5801 movw R10,R16
00E6 .dbline -1
00E6 .dbline 102
00E6 ; }
00E6 ;
00E6 ; void delay_nus(unsigned int n) //N us延时函数
00E6 ; {
00E6 .dbline 103
00E6 ; unsigned int i=0;
00E6 4427 clr R20
00E8 5527 clr R21
00EA .dbline 104
00EA ; for (i=0;i<n;i++)
00EA 03C0 xjmp L25
00EC L22:
00EC .dbline 105
00EC ; delay_1us();
00EC F7DF xcall _delay_1us
00EE L23:
00EE .dbline 104
00EE 4F5F subi R20,255 ; offset = 1
00F0 5F4F sbci R21,255
00F2 L25:
00F2 .dbline 104
00F2 4A15 cp R20,R10
00F4 5B05 cpc R21,R11
00F6 D0F3 brlo L22
00F8 X5:
00F8 .dbline -2
00F8 L21:
00F8 .dbline 0 ; func end
00F8 0C940000 xjmp pop_xgset300C
00FC .dbsym r i 20 i
00FC .dbsym r n 10 i
00FC .dbend
00FC .dbfunc e delay_1ms _delay_1ms fV
00FC ; i -> R16,R17
.even
00FC _delay_1ms::
00FC .dbline -1
00FC .dbline 109
00FC ; }
00FC ;
00FC ; void delay_1ms(void) //1ms延时函数
00FC ; {
00FC .dbline 111
00FC ; unsigned int i;
00FC ; for (i=0;i<1140;i++);
00FC 0027 clr R16
00FE 1127 clr R17
0100 02C0 xjmp L30
0102 L27:
0102 .dbline 111
0102 L28:
0102 .dbline 111
0102 0F5F subi R16,255 ; offset = 1
0104 1F4F sbci R17,255
0106 L30:
0106 .dbline 111
0106 0437 cpi R16,116
0108 E4E0 ldi R30,4
010A 1E07 cpc R17,R30
010C D0F3 brlo L27
010E X6:
010E .dbline -2
010E L26:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym r i 16 i
0110 .dbend
0110 .dbfunc e delay_nms _delay_nms fV
0110 ; i -> R20,R21
0110 ; n -> R10,R11
.even
0110 _delay_nms::
0110 0E940000 xcall push_xgset300C
0114 5801 movw R10,R16
0116 .dbline -1
0116 .dbline 115
0116 ; }
0116 ;
0116 ; void delay_nms(unsigned int n) //N ms延时函数
0116 ; {
0116 .dbline 116
0116 ; unsigned int i=0;
0116 4427 clr R20
0118 5527 clr R21
011A .dbline 117
011A ; for (i=0;i<n;i++)
011A 03C0 xjmp L35
011C L32:
011C .dbline 118
011C ; delay_1ms();
011C EFDF xcall _delay_1ms
011E L33:
011E .dbline 117
011E 4F5F subi R20,255 ; offset = 1
0120 5F4F sbci R21,255
0122 L35:
0122 .dbline 117
0122 4A15 cp R20,R10
0124 5B05 cpc R21,R11
0126 D0F3 brlo L32
0128 X7:
0128 .dbline -2
0128 L31:
0128 .dbline 0 ; func end
0128 0C940000 xjmp pop_xgset300C
012C .dbsym r i 20 i
012C .dbsym r n 10 i
012C .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\try\DS18B20\DS18B20.C
0000 _wml::
0000 .blkb 1
0001 .dbsym e wml _wml c
0001 _wmh::
0001 .blkb 1
0002 .dbsym e wmh _wmh c
0002 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -