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

📄 1820.lis

📁 利用AVRM16和DX18B20温度传感器通信
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01D0                   .dbline -2
 01D0           L28:
 01D0 0E940000          xcall pop_gset2
 01D4                   .dbline 0 ; func end
 01D4 0895              ret
 01D6                   .dbsym r retVal 20 c
 01D6                   .dbsym r i 22 c
 01D6                   .dbend
 01D6                   .dbfunc e writeByteDS18B20 _writeByteDS18B20 fV
 01D6           ;           temp -> R20
 01D6           ;              i -> R22
 01D6           ;             wb -> R10
                        .even
 01D6           _writeByteDS18B20::
 01D6 0E940000          xcall push_gset3
 01DA A02E              mov R10,R16
 01DC                   .dbline -1
 01DC                   .dbline 277
 01DC           ; }
 01DC           ; 
 01DC           ; 
 01DC           ; /**********************************************************************
 01DC           ; functionName: BYTE readByteDS18B20(void)
 01DC           ; description :写DS18B20一个字节
 01DC           ; **********************************************************************/
 01DC           ; void writeByteDS18B20(unsigned char wb)
 01DC           ; {
 01DC                   .dbline 280
 01DC           ;       unsigned char i;
 01DC           ;       unsigned char temp;
 01DC           ;       RLS_DS18B20;            //释放总线
 01DC B998              cbi 0x17,1
 01DE                   .dbline 281
 01DE           ;       for(i=0;i<8;i++)
 01DE 6627              clr R22
 01E0 16C0              xjmp L39
 01E2           L36:
 01E2                   .dbline 282
 01E2           ;       {
 01E2                   .dbline 283
 01E2           ;               HLD_DS18B20;            //Maga16控制总线
 01E2 B99A              sbi 0x17,1
 01E4                   .dbline 284
 01E4           ;               CLR_DS18B20;            //强制拉低
 01E4 C198              cbi 0x18,1
 01E6                   .dbline 285
 01E6           ;               delayUs(16);            //14.92us
 01E6 00E1              ldi R16,16
 01E8 9DDF              xcall _delayUs
 01EA                   .dbline 286
 01EA           ;               temp=wb>>i;
 01EA 0A2D              mov R16,R10
 01EC 162F              mov R17,R22
 01EE 0E940000          xcall lsr8
 01F2 402F              mov R20,R16
 01F4                   .dbline 287
 01F4           ;               temp&=0x01;
 01F4 4170              andi R20,1
 01F6                   .dbline 288
 01F6           ;               if(temp)
 01F6 11F0              breq L40
 01F8                   .dbline 289
 01F8           ;               RLS_DS18B20;            //释放总线
 01F8 B998              cbi 0x17,1
 01FA 01C0              xjmp L41
 01FC           L40:
 01FC                   .dbline 291
 01FC           ;               else
 01FC           ;               CLR_DS18B20;            //强制拉低
 01FC C198              cbi 0x18,1
 01FE           L41:
 01FE                   .dbline 292
 01FE 00E1              ldi R16,16
 0200 91DF              xcall _delayUs
 0202                   .dbline 293
 0202 03E2              ldi R16,35
 0204 8FDF              xcall _delayUs
 0206                   .dbline 294
 0206 B998              cbi 0x17,1
 0208                   .dbline 295
 0208 01E0              ldi R16,1
 020A 8CDF              xcall _delayUs
 020C                   .dbline 296
 020C           L37:
 020C                   .dbline 281
 020C 6395              inc R22
 020E           L39:
 020E                   .dbline 281
 020E 6830              cpi R22,8
 0210 40F3              brlo L36
 0212                   .dbline -2
 0212           L35:
 0212 0E940000          xcall pop_gset3
 0216                   .dbline 0 ; func end
 0216 0895              ret
 0218                   .dbsym r temp 20 c
 0218                   .dbsym r i 22 c
 0218                   .dbsym r wb 10 c
 0218                   .dbend
 0218                   .dbfunc e readTempDS18B20 _readTempDS18B20 fi
 0218           ;              x -> R20,R21
 0218           ;          tempH -> R20
 0218           ;          tempL -> R22
                        .even
 0218           _readTempDS18B20::
 0218 0E940000          xcall push_gset2
 021C                   .dbline -1
 021C                   .dbline 305
 021C           ;               delayUs(16);            //14.92us
 021C           ;               delayUs(35);            //30.38us
 021C           ;               RLS_DS18B20;            //释放总线
 021C           ;               delayUs(1);                     //2.71us(大于1us就行了)
 021C           ;       }
 021C           ; }
 021C           ; 
 021C           ; 
 021C           ; /**********************************************************************
 021C           ; functionName: unsigned int readTempDS18B20(void)
 021C           ; description :读DS18B20温度
 021C           ; **********************************************************************/
 021C           ; unsigned int readTempDS18B20(void)
 021C           ; {
 021C                   .dbline 308
 021C           ;       unsigned char tempL,tempH;
 021C           ;       unsigned int x;
 021C           ;       resetDS18B20();
 021C 89DF              xcall _resetDS18B20
 021E                   .dbline 309
 021E           ;       writeByteDS18B20(0xcc);         //跳过ROM
 021E 0CEC              ldi R16,204
 0220 DADF              xcall _writeByteDS18B20
 0222                   .dbline 310
 0222           ;       writeByteDS18B20(0x44);         //启动温度转换
 0222 04E4              ldi R16,68
 0224 D8DF              xcall _writeByteDS18B20
 0226                   .dbline 311
 0226           ;       delayUs(1);
 0226 01E0              ldi R16,1
 0228 7DDF              xcall _delayUs
 022A                   .dbline 312
 022A           ;       tempL=resetDS18B20();
 022A 82DF              xcall _resetDS18B20
 022C                   .dbline 313
 022C           ;       writeByteDS18B20(0xcc);         //跳过ROM
 022C 0CEC              ldi R16,204
 022E D3DF              xcall _writeByteDS18B20
 0230                   .dbline 314
 0230           ;       writeByteDS18B20(0xbe);         //读数据
 0230 0EEB              ldi R16,190
 0232 D1DF              xcall _writeByteDS18B20
 0234                   .dbline 315
 0234           ;       tempL=readByteDS18B20();
 0234 A7DF              xcall _readByteDS18B20
 0236 602F              mov R22,R16
 0238                   .dbline 316
 0238           ;       tempH=readByteDS18B20();
 0238 A5DF              xcall _readByteDS18B20
 023A 402F              mov R20,R16
 023C                   .dbline 317
 023C           ;       x=(tempH<<8)|tempL;
 023C 542F              mov R21,R20
 023E 462F              mov R20,R22
 0240                   .dbline 318
 0240           ;       return(x);
 0240 8A01              movw R16,R20
 0242                   .dbline -2
 0242           L42:
 0242 0E940000          xcall pop_gset2
 0246                   .dbline 0 ; func end
 0246 0895              ret
 0248                   .dbsym r x 20 i
 0248                   .dbsym r tempH 20 c
 0248                   .dbsym r tempL 22 c
 0248                   .dbend
 0248                   .dbfunc e realTemp _realTemp fD
 0248           ;           Temp -> y+0
                        .even
 0248           _realTemp::
 0248 2497              sbiw R28,4
 024A                   .dbline -1
 024A                   .dbline 331
 024A           ; } 
 024A           ; 
 024A           ; 
 024A           ; /******************************************************************************
 024A           ; * 名称:float realTemp(void)
 024A           ; * 说明:倍率为0.0625
 024A           ; * 功能:计算真实温度值
 024A           ; * 调用:unsigned int readTempDS18B20(void)
 024A           ; * 输入:无
 024A           ; * 返回值:真实温度值(浮点数)
 024A           ; *******************************************************************************/
 024A           ; float realTemp(void)
 024A           ; {
 024A                   .dbline 332
 024A           ; float Temp= readTempDS18B20()*0.0625;
 024A E6DF              xcall _readTempDS18B20
 024C 1801              movw R2,R16
 024E 00E0              ldi R16,<L44
 0250 10E0              ldi R17,>L44
 0252 0E940000          xcall lpm32
 0256 3A93              st -y,R19
 0258 2A93              st -y,R18
 025A 1A93              st -y,R17
 025C 0A93              st -y,R16
 025E 00E0              ldi R16,<L45
 0260 10E0              ldi R17,>L45
 0262 0E940000          xcall lpm32
 0266 3A93              st -y,R19
 0268 2A93              st -y,R18
 026A 1A93              st -y,R17
 026C 0A93              st -y,R16
 026E 8101              movw R16,R2
 0270 1695              lsr R17
 0272 0795              ror R16
 0274 0E940000          xcall int2fp
 0278 3A93              st -y,R19
 027A 2A93              st -y,R18
 027C 1A93              st -y,R17
 027E 0A93              st -y,R16
 0280 0E940000          xcall empy32fs
 0284 8101              movw R16,R2
 0286 0170              andi R16,1
 0288 1070              andi R17,0
 028A 0E940000          xcall int2fp
 028E 3A93              st -y,R19
 0290 2A93              st -y,R18
 0292 1A93              st -y,R17
 0294 0A93              st -y,R16
 0296 0E940000          xcall add32fs
 029A 0E940000          xcall empy32f
 029E FE01              movw R30,R28
 02A0 0083              std z+0,R16
 02A2 1183              std z+1,R17
 02A4 2283              std z+2,R18
 02A6 3383              std z+3,R19
 02A8                   .dbline 333
 02A8           ; return Temp;
 02A8 FE01              movw R30,R28
 02AA 0081              ldd R16,z+0
 02AC 1181              ldd R17,z+1
 02AE 2281              ldd R18,z+2
 02B0 3381              ldd R19,z+3
 02B2                   .dbline -2
 02B2           L43:
 02B2 2496              adiw R28,4
 02B4                   .dbline 0 ; func end
 02B4 0895              ret
 02B6                   .dbsym l Temp 0 D
 02B6                   .dbend
 02B6                   .dbfunc e displayTemp _displayTemp fI
 02B6           ;              l -> <dead>
 02B6           ;              T -> y+2
 02B6           ;           temp -> R10,R11
 02B6           ;            num -> y+19
 02B6           ;              j -> R22
 02B6           ;              i -> R20
                        .even
 02B6           _displayTemp::
 02B6 0E940000          xcall push_gset4
 02BA 622F              mov R22,R18
 02BC 402F              mov R20,R16
 02BE 2B97              sbiw R28,11
 02C0                   .dbline -1
 02C0                   .dbline 346
 02C0           ; }
 02C0           ; 
 02C0           ; 
 02C0           ; /******************************************************************************
 02C0           ; * 名称:displayTemp
 02C0           ; * 说明:num为真实温度值,i列.j为行,
 02C0           ; * 功能:显示温度值
 02C0           ; * 调用:LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
 02C0           ; * 输入:真实温度值
 02C0           ; * 返回值:无
 02C0           ; *******************************************************************************/
 02C0           ; displayTemp( unsigned char i,unsigned char j, float num)//LCD显示
 02C0           ; {unsigned char T[5] ,l;
 02C0                   .dbline 347
 02C0           ;  unsigned int temp=num*100;
 02C0 00E0              ldi R16,<L49
 02C2 10E0              ldi R17,>L49
 02C4 0E940000          xcall lpm32
 02C8 3A93              st -y,R19
 02CA 2A93              st -y,R18
 02CC 1A93              st -y,R17
 02CE 0A93              st -y,R16
 02D0 FE01              movw R30,R28
 02D2            ; stack offset 4
 02D2 2788              ldd R2,z+23
 02D4 308C              ldd R3,z+24
 02D6 418C              ldd R4,z+25
 02D8 528C              ldd R5,z+26
 02DA 5A92              st -y,R5
 02DC 4A92              st -y,R4
 02DE 3A92              st -y,R3
 02E0 2A92              st -y,R2
 02E2 0E940000          xcall empy32f
 02E6 FE01              movw R30,R28
 02E8 0783              std z+7,R16
 02EA 1087              std z+8,R17
 02EC 2187              std z+9,R18
 02EE 3287              std z+10,R19
 02F0 FE01              movw R30,R28
 02F2 2780              ldd R2,z+7
 02F4 3084              ldd R3,z+8
 02F6 4184              ldd R4,z+9
 02F8 5284              ldd R5,z+10
 02FA 5A92              st -y,R5
 02FC 4A92              st -y,R4
 02FE 3A92              st -y,R3
 0300 2A92              st -y,R2
 0302 00E0              ldi R16,<L50
 0304 10E0              ldi R17,>L50
 0306 0E940000          xcall lpm32
 030A 3A93              st -y,R19
 030C 2A93              st -y,R18
 030E 1A93              st -y,R17
 0310 0A93              st -y,R16
 0312 0E940000          xcall cmp32f
 0316 D4F0              brlt L47
 0318 FE01              movw R30,R28
 031A 2780              ldd R2,z+7
 031C 3084              ldd R3,z+8
 031E 4184              ldd R4,z+9
 0320 5284              ldd R5,z+10
 0322 5A92              st -y,R5
 0324 4A92              st -y,R4
 0326 3A92              st -y,R3
 0328 2A92              st -y,R2
 032A 00E0              ldi R16,<L50
 032C 10E0              ldi R17,>L50
 032E 0E940000          xcall lpm32
 0332 3A93              st -y,R19
 0334 2A93              st -y,R18
 0336 1A93              st -y,R17
 0338 0A93              st -y,R16
 033A 0E940000          xcall sub32f
 033E 0E940000          xcall fp2int
 0342 C801              movw R24,R16
 0344 8050              subi R24,0  ; offset = 32768
 0346 9048              sbci R25,128
 0348 6C01              movw R12,R24
 034A 08C0              xjmp L48
 034C           L47:
 034C FE01              movw R30,R28
 034E 0781              ldd R16,z+7
 0350 1085              ldd R17,z+8
 0352 2185              ldd R18,z+9
 0354 3285              ldd R19,z+10
 0356 0E940000          xcall fp2int
 035A 6801              movw R12,R16
 035C           L48:
 035C 5601              movw R10,R12
 035E                   .dbline 348
 035E           ;  T[0]='0'+temp/1000;
 035E 28EE              ldi R18,1000
 0360 33E0              ldi R19,3
 0362 8501              movw R16,R10
 0364 0E940000          xcall div16u
 0368 C801              movw R24,R16
 036A C096              adiw R24,48

⌨️ 快捷键说明

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