📄 18b20.lis
字号:
00A2 0A2D mov R16,R10
00A4 .dbline -2
00A4 L12:
00A4 .dbline 0 ; func end
00A4 0C940000 xjmp pop_xgsetF00C
00A8 .dbsym r temp 10 c
00A8 .dbsym r k 22 c
00A8 .dbsym r n 20 c
00A8 .dbend
00A8 .dbfunc e gettemp _gettemp fV
00A8 ; wm3 -> R12
00A8 ; wm1 -> R10
00A8 ; wm0 -> R20
00A8 ; teml -> R12
00A8 ; wm2 -> R10
00A8 ; temh -> R22
.even
00A8 _gettemp::
00A8 0E940000 xcall push_xgsetF03C
00AC .dbline -1
00AC .dbline 61
00AC ; }
00AC ;
00AC ; void gettemp(void) //读取温度值
00AC ; {
00AC .dbline 63
00AC ; unsigned char temh,teml,wm0,wm1,wm2,wm3;
00AC ; init_1820(); //复位18b20
00AC A9DF xcall _init_1820
00AE .dbline 64
00AE ; write_1820(0xcc); // 发出转换命令
00AE 0CEC ldi R16,204
00B0 BCDF xcall _write_1820
00B2 .dbline 65
00B2 ; write_1820(0x44);
00B2 04E4 ldi R16,68
00B4 BADF xcall _write_1820
00B6 .dbline 67
00B6 ; // delay_nms(800); //不延时也好使,不知道怎么回事!
00B6 ; init_1820();
00B6 A4DF xcall _init_1820
00B8 .dbline 68
00B8 ; write_1820(0xcc); //发出读命令
00B8 0CEC ldi R16,204
00BA B7DF xcall _write_1820
00BC .dbline 69
00BC ; write_1820(0xbe);
00BC 0EEB ldi R16,190
00BE B5DF xcall _write_1820
00C0 .dbline 70
00C0 ; teml=read_1820(); //读数据
00C0 D0DF xcall _read_1820
00C2 C02E mov R12,R16
00C4 .dbline 71
00C4 ; temh=read_1820();
00C4 CEDF xcall _read_1820
00C6 602F mov R22,R16
00C8 .dbline 72
00C8 ; wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
00C8 4C2D mov R20,R12
00CA 4295 swap R20
00CC 4F70 andi R20,#0x0F
00CE .dbline 73
00CE ; wm1=temh<<4;
00CE 862F mov R24,R22
00D0 8F70 andi R24,#0x0F
00D2 8295 swap R24
00D4 A82E mov R10,R24
00D6 .dbline 76
00D6 ;
00D6 ; //count=(temh*256+teml)*6.25; //计算具体温度
00D6 ; if((temh&0xF8) == 0xF8)
00D6 862F mov R24,R22
00D8 887F andi R24,248
00DA 883F cpi R24,248
00DC 61F5 brne L20
00DE X5:
00DE .dbline 77
00DE ; {
00DE .dbline 78
00DE ; flag=1;
00DE 81E0 ldi R24,1
00E0 80930100 sts _flag,R24
00E4 .dbline 79
00E4 ; count=((0xFF-temh)*256+(0xFF-teml))*6.25;
00E4 00E0 ldi R16,<L22
00E6 10E0 ldi R17,>L22
00E8 0E940000 xcall lpm32
00EC 1801 movw R2,R16
00EE 2901 movw R4,R18
00F0 662E mov R6,R22
00F2 7724 clr R7
00F4 2FEF ldi R18,255
00F6 30E0 ldi R19,0
00F8 2619 sub R18,R6
00FA 3709 sbc R19,R7
00FC 00E0 ldi R16,256
00FE 11E0 ldi R17,1
0100 0E940000 xcall empy16s
0104 3801 movw R6,R16
0106 8C2C mov R8,R12
0108 9924 clr R9
010A 8FEF ldi R24,255
010C 90E0 ldi R25,0
010E 8819 sub R24,R8
0110 9909 sbc R25,R9
0112 680E add R6,R24
0114 791E adc R7,R25
0116 8301 movw R16,R6
0118 0E940000 xcall int2fp
011C 3A93 st -y,R19
011E 2A93 st -y,R18
0120 1A93 st -y,R17
0122 0A93 st -y,R16
0124 8101 movw R16,R2
0126 9201 movw R18,R4
0128 0E940000 xcall fpmule2
012C 0E940000 xcall fpint
0130 00930000 sts _count,R16
0134 .dbline 81
0134 ; //count=((0xFF-temh)*256+(0xFF-teml))*625;
0134 ; }
0134 23C0 xjmp L21
0136 L20:
0136 .dbline 83
0136 ; else
0136 ; {
0136 .dbline 84
0136 ; flag=0;
0136 2224 clr R2
0138 20920100 sts _flag,R2
013C .dbline 85
013C ; count=(temh*256+teml)*6.25;
013C 00E0 ldi R16,<L22
013E 10E0 ldi R17,>L22
0140 0E940000 xcall lpm32
0144 1801 movw R2,R16
0146 2901 movw R4,R18
0148 262F mov R18,R22
014A 3327 clr R19
014C 00E0 ldi R16,256
014E 11E0 ldi R17,1
0150 0E940000 xcall empy16s
0154 3801 movw R6,R16
0156 8C2C mov R8,R12
0158 9924 clr R9
015A 680C add R6,R8
015C 791C adc R7,R9
015E 8301 movw R16,R6
0160 0E940000 xcall int2fp
0164 3A93 st -y,R19
0166 2A93 st -y,R18
0168 1A93 st -y,R17
016A 0A93 st -y,R16
016C 8101 movw R16,R2
016E 9201 movw R18,R4
0170 0E940000 xcall fpmule2
0174 0E940000 xcall fpint
0178 00930000 sts _count,R16
017C .dbline 87
017C ; //count=(temh*256+teml)*625; //计算具体温度
017C ; }
017C L21:
017C .dbline 88
017C ; wm2=wm1+wm0; //16进制转10进制
017C A40E add R10,R20
017E .dbline 89
017E ; wm3=wm2/100;
017E 14E6 ldi R17,100
0180 0A2D mov R16,R10
0182 0E940000 xcall div8u
0186 C02E mov R12,R16
0188 .dbline 90
0188 ; wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml是显示的低位
0188 14E6 ldi R17,100
018A 0A2D mov R16,R10
018C 0E940000 xcall mod8u
0190 1AE0 ldi R17,10
0192 0E940000 xcall div8u
0196 00930300 sts _wmh,R16
019A .dbline 91
019A ; wml=(wm2%100)%10;
019A 14E6 ldi R17,100
019C 0A2D mov R16,R10
019E 0E940000 xcall mod8u
01A2 1AE0 ldi R17,10
01A4 0E940000 xcall mod8u
01A8 00930200 sts _wml,R16
01AC .dbline -2
01AC L19:
01AC .dbline 0 ; func end
01AC 0C940000 xjmp pop_xgsetF03C
01B0 .dbsym r wm3 12 c
01B0 .dbsym r wm1 10 c
01B0 .dbsym r wm0 20 c
01B0 .dbsym r teml 12 c
01B0 .dbsym r wm2 10 c
01B0 .dbsym r temh 22 c
01B0 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\18b20.c
0000 _count::
0000 .blkb 1
0001 .dbsym e count _count c
0001 _flag::
0001 .blkb 1
0002 .dbsym e flag _flag c
0002 _wml::
0002 .blkb 1
0003 .dbsym e wml _wml c
0003 _wmh::
0003 .blkb 1
0004 .dbsym e wmh _wmh c
.area lit(rom, con, rel)
0000 L22:
0000 0000C840 .word 0x0,0x40c8
0004 ;
0004 ;
0004 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -