📄 18b20.lis
字号:
00D0 .dbline 72
00D0 ; wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
00D0 4A2D mov R20,R10
00D2 4295 swap R20
00D4 4F70 andi R20,#0x0F
00D6 .dbline 73
00D6 ; wm1=temh<<4;
00D6 6C2D mov R22,R12
00D8 6F70 andi R22,#0x0F
00DA 6295 swap R22
00DC .dbline 76
00DC ;
00DC ; //count=(temh*256+teml)*6.25; //计算具体温度
00DC ; if((temh&0xF8) == 0xF8)
00DC 8C2D mov R24,R12
00DE 887F andi R24,248
00E0 883F cpi R24,248
00E2 09F0 breq X0
00E4 65C0 xjmp L20
00E6 X0:
00E6 .dbline 77
00E6 ; {
00E6 .dbline 78
00E6 ; flag=1;
00E6 81E0 ldi R24,1
00E8 80930100 sts _flag,R24
00EC .dbline 79
00EC ; count=((0xFF-temh)*256+(0xFF-teml))*6.25;
00EC 00E0 ldi R16,<L24
00EE 10E0 ldi R17,>L24
00F0 0E940000 xcall lpm32
00F4 3A93 st -y,R19
00F6 2A93 st -y,R18
00F8 1A93 st -y,R17
00FA 0A93 st -y,R16
00FC 2C2C mov R2,R12
00FE 3324 clr R3
0100 2FEF ldi R18,255
0102 30E0 ldi R19,0
0104 2219 sub R18,R2
0106 3309 sbc R19,R3
0108 00E0 ldi R16,256
010A 11E0 ldi R17,1
010C 0E940000 xcall empy16s
0110 1801 movw R2,R16
0112 4A2C mov R4,R10
0114 5524 clr R5
0116 8FEF ldi R24,255
0118 90E0 ldi R25,0
011A 8419 sub R24,R4
011C 9509 sbc R25,R5
011E 280E add R2,R24
0120 391E adc R3,R25
0122 8101 movw R16,R2
0124 0E940000 xcall int2fp
0128 3A93 st -y,R19
012A 2A93 st -y,R18
012C 1A93 st -y,R17
012E 0A93 st -y,R16
0130 0E940000 xcall empy32f
0134 FE01 movw R30,R28
0136 0083 std z+0,R16
0138 1183 std z+1,R17
013A 2283 std z+2,R18
013C 3383 std z+3,R19
013E FE01 movw R30,R28
0140 2080 ldd R2,z+0
0142 3180 ldd R3,z+1
0144 4280 ldd R4,z+2
0146 5380 ldd R5,z+3
0148 5A92 st -y,R5
014A 4A92 st -y,R4
014C 3A92 st -y,R3
014E 2A92 st -y,R2
0150 00E0 ldi R16,<L25
0152 10E0 ldi R17,>L25
0154 0E940000 xcall lpm32
0158 3A93 st -y,R19
015A 2A93 st -y,R18
015C 1A93 st -y,R17
015E 0A93 st -y,R16
0160 0E940000 xcall cmp32f
0164 D4F0 brlt L22
0166 FE01 movw R30,R28
0168 2080 ldd R2,z+0
016A 3180 ldd R3,z+1
016C 4280 ldd R4,z+2
016E 5380 ldd R5,z+3
0170 5A92 st -y,R5
0172 4A92 st -y,R4
0174 3A92 st -y,R3
0176 2A92 st -y,R2
0178 00E0 ldi R16,<L25
017A 10E0 ldi R17,>L25
017C 0E940000 xcall lpm32
0180 3A93 st -y,R19
0182 2A93 st -y,R18
0184 1A93 st -y,R17
0186 0A93 st -y,R16
0188 0E940000 xcall sub32f
018C 0E940000 xcall fp2int
0190 C801 movw R24,R16
0192 8050 subi R24,0 ; offset = 32768
0194 9048 sbci R25,128
0196 7C01 movw R14,R24
0198 08C0 xjmp L23
019A L22:
019A FE01 movw R30,R28
019C 0081 ldd R16,z+0
019E 1181 ldd R17,z+1
01A0 2281 ldd R18,z+2
01A2 3381 ldd R19,z+3
01A4 0E940000 xcall fp2int
01A8 7801 movw R14,R16
01AA L23:
01AA E0920000 sts _count,R14
01AE .dbline 81
01AE ; //count=((0xFF-temh)*256+(0xFF-teml))*625;
01AE ; }
01AE 5CC0 xjmp L21
01B0 L20:
01B0 .dbline 83
01B0 ; else
01B0 ; {
01B0 .dbline 84
01B0 ; flag=0;
01B0 2224 clr R2
01B2 20920100 sts _flag,R2
01B6 .dbline 85
01B6 ; count=(temh*256+teml)*6.25;
01B6 00E0 ldi R16,<L24
01B8 10E0 ldi R17,>L24
01BA 0E940000 xcall lpm32
01BE 3A93 st -y,R19
01C0 2A93 st -y,R18
01C2 1A93 st -y,R17
01C4 0A93 st -y,R16
01C6 2C2D mov R18,R12
01C8 3327 clr R19
01CA 00E0 ldi R16,256
01CC 11E0 ldi R17,1
01CE 0E940000 xcall empy16s
01D2 1801 movw R2,R16
01D4 4A2C mov R4,R10
01D6 5524 clr R5
01D8 240C add R2,R4
01DA 351C adc R3,R5
01DC 8101 movw R16,R2
01DE 0E940000 xcall int2fp
01E2 3A93 st -y,R19
01E4 2A93 st -y,R18
01E6 1A93 st -y,R17
01E8 0A93 st -y,R16
01EA 0E940000 xcall empy32f
01EE FE01 movw R30,R28
01F0 0083 std z+0,R16
01F2 1183 std z+1,R17
01F4 2283 std z+2,R18
01F6 3383 std z+3,R19
01F8 FE01 movw R30,R28
01FA 2080 ldd R2,z+0
01FC 3180 ldd R3,z+1
01FE 4280 ldd R4,z+2
0200 5380 ldd R5,z+3
0202 5A92 st -y,R5
0204 4A92 st -y,R4
0206 3A92 st -y,R3
0208 2A92 st -y,R2
020A 00E0 ldi R16,<L25
020C 10E0 ldi R17,>L25
020E 0E940000 xcall lpm32
0212 3A93 st -y,R19
0214 2A93 st -y,R18
0216 1A93 st -y,R17
0218 0A93 st -y,R16
021A 0E940000 xcall cmp32f
021E D4F0 brlt L26
0220 FE01 movw R30,R28
0222 2080 ldd R2,z+0
0224 3180 ldd R3,z+1
0226 4280 ldd R4,z+2
0228 5380 ldd R5,z+3
022A 5A92 st -y,R5
022C 4A92 st -y,R4
022E 3A92 st -y,R3
0230 2A92 st -y,R2
0232 00E0 ldi R16,<L25
0234 10E0 ldi R17,>L25
0236 0E940000 xcall lpm32
023A 3A93 st -y,R19
023C 2A93 st -y,R18
023E 1A93 st -y,R17
0240 0A93 st -y,R16
0242 0E940000 xcall sub32f
0246 0E940000 xcall fp2int
024A C801 movw R24,R16
024C 8050 subi R24,0 ; offset = 32768
024E 9048 sbci R25,128
0250 5C01 movw R10,R24
0252 08C0 xjmp L27
0254 L26:
0254 FE01 movw R30,R28
0256 0081 ldd R16,z+0
0258 1181 ldd R17,z+1
025A 2281 ldd R18,z+2
025C 3381 ldd R19,z+3
025E 0E940000 xcall fp2int
0262 5801 movw R10,R16
0264 L27:
0264 A0920000 sts _count,R10
0268 .dbline 87
0268 ; //count=(temh*256+teml)*625; //计算具体温度
0268 ; }
0268 L21:
0268 .dbline 88
0268 ; wm2=wm1+wm0; //16进制转10进制
0268 262E mov R2,R22
026A 240E add R2,R20
026C 422D mov R20,R2
026E .dbline 89
026E ; wm3=wm2/100;
026E 14E6 ldi R17,100
0270 022D mov R16,R2
0272 0E940000 xcall div8u
0276 602F mov R22,R16
0278 .dbline 90
0278 ; wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml是显示的低位
0278 14E6 ldi R17,100
027A 042F mov R16,R20
027C 0E940000 xcall mod8u
0280 1AE0 ldi R17,10
0282 0E940000 xcall div8u
0286 00930300 sts _wmh,R16
028A .dbline 91
028A ; wml=(wm2%100)%10;
028A 14E6 ldi R17,100
028C 042F mov R16,R20
028E 0E940000 xcall mod8u
0292 1AE0 ldi R17,10
0294 0E940000 xcall mod8u
0298 00930200 sts _wml,R16
029C .dbline -2
029C L19:
029C 2496 adiw R28,4
029E 0E940000 xcall pop_gset5
02A2 .dbline 0 ; func end
02A2 0895 ret
02A4 .dbsym r wm3 22 c
02A4 .dbsym r wm1 22 c
02A4 .dbsym r wm0 20 c
02A4 .dbsym r teml 10 c
02A4 .dbsym r wm2 20 c
02A4 .dbsym r temh 12 c
02A4 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\administrator\桌面\教程\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 L25:
0000 00000047 .word 0x0,0x4700
0004 L24:
0004 0000C840 .word 0x0,0x40c8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -