⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lis

📁 AVR16单片机DS18B20程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 023A           ;  templ=B20_readB();     //读温度低字节
 023A BCDF              xcall _B20_readB
 023C 402F              mov R20,R16
 023E                   .dbline 102
 023E           ;  temph=B20_readB();     //读温度高字节
 023E BADF              xcall _B20_readB
 0240 602F              mov R22,R16
 0242                   .dbline 103
 0242           ;  temp=templ+temph*256;//将温度整理成16位变量
 0242 262F              mov R18,R22
 0244 3327              clr R19
 0246 00E0              ldi R16,256
 0248 11E0              ldi R17,1
 024A 0E940000          xcall empy16s
 024E 242E              mov R2,R20
 0250 3324              clr R3
 0252 200E              add R2,R16
 0254 311E              adc R3,R17
 0256 A101              movw R20,R2
 0258                   .dbline 104
 0258           ;  return temp;       //返回16位变量
 0258 022D              mov R16,R2
 025A 132D              mov R17,R3
 025C                   .dbline -2
 025C           L52:
 025C 0E940000          xcall pop_gset2
 0260                   .dbline 0 ; func end
 0260 0895              ret
 0262                   .dbsym r temp 20 i
 0262                   .dbsym r temph 22 c
 0262                   .dbsym r templ 20 c
 0262                   .dbend
 0262                   .dbfunc e Num_BCD _Num_BCD fpc
 0262           ;           rept -> R20,R21
 0262           ;            chr -> y+0
 0262           ;              i -> R22
 0262           ;            num -> R10,R11
                        .even
 0262           _Num_BCD::
 0262 0E940000          xcall push_gset3
 0266 5801              movw R10,R16
 0268 2397              sbiw R28,3
 026A                   .dbline -1
 026A                   .dbline 113
 026A           ; }
 026A           ; /*******************************************
 026A           ; 函数名称: Num_BCD
 026A           ; 功    能: 将一个字节的整数转换成三位BCD码
 026A           ; 参    数: num--需要转换的整数
 026A           ; 返回值  : chr--三位BCD码数组指针
 026A           ; /********************************************/
 026A           ; uchar* Num_BCD(uint num)
 026A           ; {
 026A                   .dbline 116
 026A           ;  uchar i,chr[3];        
 026A           ;  uchar *rept;
 026A           ;  rept=&(chr[0]);        //返回指针指向BCD码数组
 026A AE01              movw R20,R28
 026C                   .dbline 117
 026C           ;  for(i=0;i<3;i++)
 026C 6627              clr R22
 026E 16C0              xjmp L57
 0270           L54:
 0270                   .dbline 118
 0270                   .dbline 119
 0270 262E              mov R2,R22
 0272 3324              clr R3
 0274 E2E0              ldi R30,2
 0276 F0E0              ldi R31,0
 0278 E219              sub R30,R2
 027A F309              sbc R31,R3
 027C CE01              movw R24,R28
 027E E80F              add R30,R24
 0280 F91F              adc R31,R25
 0282 2AE0              ldi R18,10
 0284 30E0              ldi R19,0
 0286 8501              movw R16,R10
 0288 0E940000          xcall mod16u
 028C 0083              std z+0,R16
 028E                   .dbline 120
 028E 2AE0              ldi R18,10
 0290 30E0              ldi R19,0
 0292 8501              movw R16,R10
 0294 0E940000          xcall div16u
 0298 5801              movw R10,R16
 029A                   .dbline 121
 029A           L55:
 029A                   .dbline 117
 029A 6395              inc R22
 029C           L57:
 029C                   .dbline 117
 029C 6330              cpi R22,3
 029E 40F3              brlo L54
 02A0                   .dbline 122
 02A0           ;  {
 02A0           ;   chr[2-i]=num%10;      //对10取余数(其实是求模,但是对于正数,取余与求模是相等的)
 02A0           ;   num/=10;                      //除以10,为取出下一位做准备
 02A0           ;  }
 02A0           ;  return rept;           //返回指针
 02A0 042F              mov R16,R20
 02A2 152F              mov R17,R21
 02A4                   .dbline -2
 02A4           L53:
 02A4 2396              adiw R28,3
 02A6 0E940000          xcall pop_gset3
 02AA                   .dbline 0 ; func end
 02AA 0895              ret
 02AC                   .dbsym r rept 20 pc
 02AC                   .dbsym l chr 0 A[3:3]c
 02AC                   .dbsym r i 22 c
 02AC                   .dbsym r num 10 i
 02AC                   .dbend
 02AC                   .dbfunc e main _main fV
 02AC           ;              t -> R22,R23
 02AC           ;         temppt -> R10,R11
 02AC           ;           temp -> y+0
 02AC           ;              i -> R20
                        .even
 02AC           _main::
 02AC 2797              sbiw R28,7
 02AE                   .dbline -1
 02AE                   .dbline 131
 02AE           ; }
 02AE           ; /*******************************************
 02AE           ; 函数名称: main
 02AE           ; 功    能: 完成温度的读取与显示
 02AE           ; 参    数: 无
 02AE           ; 返回值  : 无
 02AE           ; /********************************************/
 02AE           ; void main(void)
 02AE           ; {
 02AE                   .dbline 135
 02AE           ;  uint t;
 02AE           ;  uchar *temppt;
 02AE           ;  uchar i,temp[3];
 02AE           ;  Board_init( );          //初始化开发板
 02AE D6DE              xcall _Board_init
 02B0 8DC0              xjmp L60
 02B2           L59:
 02B2                   .dbline 137
 02B2           ;  while(1)
 02B2           ;  {
 02B2                   .dbline 138
 02B2           ;   t=Read_temp();   //读取温度值
 02B2 B7DF              xcall _Read_temp
 02B4 B801              movw R22,R16
 02B6                   .dbline 139
 02B6           ;   t*=0.625;              //转换成实际温度的10倍
 02B6 00E0              ldi R16,<L64
 02B8 10E0              ldi R17,>L64
 02BA 0E940000          xcall lpm32
 02BE 3A93              st -y,R19
 02C0 2A93              st -y,R18
 02C2 1A93              st -y,R17
 02C4 0A93              st -y,R16
 02C6 00E0              ldi R16,<L65
 02C8 10E0              ldi R17,>L65
 02CA 0E940000          xcall lpm32
 02CE 3A93              st -y,R19
 02D0 2A93              st -y,R18
 02D2 1A93              st -y,R17
 02D4 0A93              st -y,R16
 02D6 8B01              movw R16,R22
 02D8 1695              lsr R17
 02DA 0795              ror R16
 02DC 0E940000          xcall int2fp
 02E0 3A93              st -y,R19
 02E2 2A93              st -y,R18
 02E4 1A93              st -y,R17
 02E6 0A93              st -y,R16
 02E8 0E940000          xcall empy32fs
 02EC 8B01              movw R16,R22
 02EE 0170              andi R16,1
 02F0 1070              andi R17,0
 02F2 0E940000          xcall int2fp
 02F6 3A93              st -y,R19
 02F8 2A93              st -y,R18
 02FA 1A93              st -y,R17
 02FC 0A93              st -y,R16
 02FE 0E940000          xcall add32fs
 0302 0E940000          xcall empy32f
 0306 FE01              movw R30,R28
 0308 0383              std z+3,R16
 030A 1483              std z+4,R17
 030C 2583              std z+5,R18
 030E 3683              std z+6,R19
 0310 2380              ldd R2,z+3
 0312 3480              ldd R3,z+4
 0314 4580              ldd R4,z+5
 0316 5680              ldd R5,z+6
 0318 5A92              st -y,R5
 031A 4A92              st -y,R4
 031C 3A92              st -y,R3
 031E 2A92              st -y,R2
 0320 00E0              ldi R16,<L66
 0322 10E0              ldi R17,>L66
 0324 0E940000          xcall lpm32
 0328 3A93              st -y,R19
 032A 2A93              st -y,R18
 032C 1A93              st -y,R17
 032E 0A93              st -y,R16
 0330 0E940000          xcall cmp32f
 0334 CCF0              brlt L62
 0336 FE01              movw R30,R28
 0338 2380              ldd R2,z+3
 033A 3480              ldd R3,z+4
 033C 4580              ldd R4,z+5
 033E 5680              ldd R5,z+6
 0340 5A92              st -y,R5
 0342 4A92              st -y,R4
 0344 3A92              st -y,R3
 0346 2A92              st -y,R2
 0348 00E0              ldi R16,<L66
 034A 10E0              ldi R17,>L66
 034C 0E940000          xcall lpm32
 0350 3A93              st -y,R19
 0352 2A93              st -y,R18
 0354 1A93              st -y,R17
 0356 0A93              st -y,R16
 0358 0E940000          xcall sub32f
 035C 0E940000          xcall fp2int
 0360 A801              movw R20,R16
 0362 4050              subi R20,0  ; offset = 32768
 0364 5048              sbci R21,128
 0366 08C0              xjmp L63
 0368           L62:
 0368 FE01              movw R30,R28
 036A 0381              ldd R16,z+3
 036C 1481              ldd R17,z+4
 036E 2581              ldd R18,z+5
 0370 3681              ldd R19,z+6
 0372 0E940000          xcall fp2int
 0376 A801              movw R20,R16
 0378           L63:
 0378 BA01              movw R22,R20
 037A                   .dbline 140
 037A           ;   temppt=Num_BCD(t);//将实际温度的10倍转换成BCD码
 037A 8B01              movw R16,R22
 037C 72DF              xcall _Num_BCD
 037E 5801              movw R10,R16
 0380                   .dbline 141
 0380           ;   for(i=0;i<3;i++)    //将转换后的BCD码存入显示数组
 0380 4427              clr R20
 0382 0CC0              xjmp L70
 0384           L67:
 0384                   .dbline 142
 0384                   .dbline 143
 0384 E42F              mov R30,R20
 0386 FF27              clr R31
 0388 EA0D              add R30,R10
 038A FB1D              adc R31,R11
 038C 2080              ldd R2,z+0
 038E CE01              movw R24,R28
 0390 E42F              mov R30,R20
 0392 FF27              clr R31
 0394 E80F              add R30,R24
 0396 F91F              adc R31,R25
 0398 2082              std z+0,R2
 039A                   .dbline 144
 039A           L68:
 039A                   .dbline 141
 039A 4395              inc R20
 039C           L70:
 039C                   .dbline 141
 039C 4330              cpi R20,3
 039E 90F3              brlo L67
 03A0                   .dbline 145
 03A0           ;   {
 03A0           ;    temp[i]=*(temppt+i);
 03A0           ;   }
 03A0           ;   for(i=0;i<3;i++)                                    //显示温度
 03A0 4427              clr R20
 03A2 12C0              xjmp L74
 03A4           L71:
 03A4                   .dbline 146
 03A4           ;   {
 03A4                   .dbline 147
 03A4           ;    if(i==1)
 03A4 4130              cpi R20,1
 03A6 19F4              brne L75
 03A8                   .dbline 148
 03A8           ;    {
 03A8                   .dbline 149
 03A8           ;     temp[1]+=16;                              //如果是各位,则加上小数点(数码管的译码数组有所改变,读者可以看10_DS18B20文件夹下的SMG.C文件)
 03A8 8981              ldd R24,y+1
 03AA 805F              subi R24,240    ; addi 16
 03AC 8983              std y+1,R24
 03AE                   .dbline 150
 03AE           ;    }
 03AE           L75:
 03AE                   .dbline 151
 03AE 242F              mov R18,R20
 03B0 2F5F              subi R18,255    ; addi 1
 03B2 CE01              movw R24,R28
 03B4 E42F              mov R30,R20
 03B6 FF27              clr R31
 03B8 E80F              add R30,R24
 03BA F91F              adc R31,R25
 03BC 0081              ldd R16,z+0
 03BE 74DE              xcall _One_smg_display
 03C0                   .dbline 152
 03C0 05E0              ldi R16,5
 03C2 10E0              ldi R17,0
 03C4 35DE              xcall _Delayms
 03C6                   .dbline 153
 03C6           L72:
 03C6                   .dbline 145
 03C6 4395              inc R20
 03C8           L74:
 03C8                   .dbline 145
 03C8 4330              cpi R20,3
 03CA 60F3              brlo L71
 03CC                   .dbline 154
 03CC           L60:
 03CC                   .dbline 136
 03CC 72CF              xjmp L59
 03CE           X0:
 03CE                   .dbline -2
 03CE                   .dbline 155
 03CE           ;    One_smg_display(temp[i],i+1);         
 03CE           ;    Delayms(5);
 03CE           ;   }
 03CE           ;  }
 03CE           ; }
 03CE           L58:
 03CE 2796              adiw R28,7
 03D0                   .dbline 0 ; func end
 03D0 0895              ret
 03D2                   .dbsym r t 22 i
 03D2                   .dbsym r temppt 10 pc
 03D2                   .dbsym l temp 0 A[3:3]c
 03D2                   .dbsym r i 20 c
 03D2                   .dbend
                        .area lit(rom, con, rel)
 0034           L66:
 0034 00000047          .word 0x0,0x4700
 0038           L65:
 0038 00000040          .word 0x0,0x4000
 003C           L64:
 003C 0000203F          .word 0x0,0x3f20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -