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

📄 main.lis

📁 ds18b20多个时候的分辨函数
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03E2           ;    unsigned char tempL,tempH;
 03E2           ;    unsigned int x;
 03E2           ;    match_rom(num);
 03E2 0A2D              mov R16,R10
 03E4 DBDF              xcall _match_rom
 03E6                   .dbline 420
 03E6           ;    writeuint8DS18B20(0x44);     //启动温度转换
 03E6 04E4              ldi R16,68
 03E8 9BDE              xcall _writeuint8DS18B20
 03EA                   .dbline 421
 03EA           ;    delayUs(1);
 03EA 01E0              ldi R16,1
 03EC 13DE              xcall _delayUs
 03EE                   .dbline 422
 03EE           ;    resetDS18B20();
 03EE 27DE              xcall _resetDS18B20
 03F0                   .dbline 423
 03F0           ;    match_rom(num);
 03F0 0A2D              mov R16,R10
 03F2 D4DF              xcall _match_rom
 03F4                   .dbline 424
 03F4           ;    writeuint8DS18B20(0xbe);     //读数据
 03F4 0EEB              ldi R16,190
 03F6 94DE              xcall _writeuint8DS18B20
 03F8                   .dbline 425
 03F8           ;    tempL=readuint8DS18B20();
 03F8 7DDE              xcall _readuint8DS18B20
 03FA A02E              mov R10,R16
 03FC                   .dbline 426
 03FC           ;    tempH=readuint8DS18B20();
 03FC 7BDE              xcall _readuint8DS18B20
 03FE C02E              mov R12,R16
 0400                   .dbline 427
 0400           ;    x=(tempH<<8)|tempL;
 0400 BC2C              mov R11,R12
 0402                   .dbline 428
 0402           ;    return(x);
 0402 8501              movw R16,R10
 0404                   .dbline -2
 0404           L93:
 0404                   .dbline 0 ; func end
 0404 0C940000          xjmp pop_xgset003C
 0408                   .dbsym r x 10 i
 0408                   .dbsym r tempH 12 c
 0408                   .dbsym r tempL 10 c
 0408                   .dbsym r num 10 c
 0408                   .dbend
 0408                   .dbfunc e output _output fV
 0408           ;              t -> R20
 0408           ;         number -> R20
 0408           ;           temp -> R22,R23
                        .even
 0408           _output::
 0408 0E940000          xcall push_xgsetF000
 040C 422F              mov R20,R18
 040E B801              movw R22,R16
 0410                   .dbline -1
 0410                   .dbline 431
 0410           ; }
 0410           ; 
 0410           ; void output(uint16 temp,unsigned char number){
 0410                   .dbline 433
 0410           ;      unsigned char t;
 0410           ;      USART_Transmit('N');
 0410 0EE4              ldi R16,78
 0412 E0DE              xcall _USART_Transmit
 0414                   .dbline 434
 0414           ;      USART_Transmit('O');
 0414 0FE4              ldi R16,79
 0416 DEDE              xcall _USART_Transmit
 0418                   .dbline 435
 0418           ;        USART_Transmit(':');
 0418 0AE3              ldi R16,58
 041A DCDE              xcall _USART_Transmit
 041C                   .dbline 436
 041C           ;        USART_Transmit(number+0x30);
 041C 042F              mov R16,R20
 041E 005D              subi R16,208    ; addi 48
 0420 D9DE              xcall _USART_Transmit
 0422                   .dbline 437
 0422           ;      USART_Transmit('-');
 0422 0DE2              ldi R16,45
 0424 D7DE              xcall _USART_Transmit
 0426                   .dbline 438
 0426           ;        t=(temp&0xf0)>>4;
 0426 AB01              movw R20,R22
 0428 407F              andi R20,240
 042A 5070              andi R21,0
 042C 5695              lsr R21
 042E 4795              ror R20
 0430 5695              lsr R21
 0432 4795              ror R20
 0434 5695              lsr R21
 0436 4795              ror R20
 0438 5695              lsr R21
 043A 4795              ror R20
 043C                   .dbline 439
 043C           ;        if(t>9)t='A'+t-10;
 043C 89E0              ldi R24,9
 043E 8417              cp R24,R20
 0440 28F4              brsh L95
 0442           X35:
 0442                   .dbline 439
 0442 842F              mov R24,R20
 0444 8F5B              subi R24,191    ; addi 65
 0446 8A50              subi R24,10
 0448 482F              mov R20,R24
 044A 01C0              xjmp L96
 044C           L95:
 044C                   .dbline 440
 044C           ;        else t='0'+t;
 044C 405D              subi R20,208    ; addi 48
 044E           L96:
 044E                   .dbline 441
 044E           ;        USART_Transmit(t);
 044E 042F              mov R16,R20
 0450 C1DE              xcall _USART_Transmit
 0452                   .dbline 442
 0452           ;        t=(temp&0x0f);
 0452 462F              mov R20,R22
 0454 4F70              andi R20,15
 0456 5070              andi R21,0
 0458                   .dbline 443
 0458           ;        if(t>9)t='A'+t-10;
 0458 89E0              ldi R24,9
 045A 8417              cp R24,R20
 045C 28F4              brsh L97
 045E           X36:
 045E                   .dbline 443
 045E 842F              mov R24,R20
 0460 8F5B              subi R24,191    ; addi 65
 0462 8A50              subi R24,10
 0464 482F              mov R20,R24
 0466 01C0              xjmp L98
 0468           L97:
 0468                   .dbline 444
 0468           ;        else t='0'+t;
 0468 405D              subi R20,208    ; addi 48
 046A           L98:
 046A                   .dbline 445
 046A           ;        USART_Transmit(t);
 046A 042F              mov R16,R20
 046C B3DE              xcall _USART_Transmit
 046E                   .dbline 446
 046E           ;        USART_Transmit(0x0d);
 046E 0DE0              ldi R16,13
 0470 B1DE              xcall _USART_Transmit
 0472                   .dbline -2
 0472           L94:
 0472                   .dbline 0 ; func end
 0472 0C940000          xjmp pop_xgsetF000
 0476                   .dbsym r t 20 c
 0476                   .dbsym r number 20 c
 0476                   .dbsym r temp 22 i
 0476                   .dbend
 0476                   .dbfunc e get_temp _get_temp fV
 0476           ;           temp -> R10
 0476           ;              i -> R12,R13
 0476           ;         number -> R20
                        .even
 0476           _get_temp::
 0476 0E940000          xcall push_xgset303C
 047A                   .dbline -1
 047A                   .dbline 451
 047A           ;        
 047A           ; 
 047A           ; 
 047A           ; }
 047A           ; void get_temp(void){
 047A                   .dbline 453
 047A           ; uint16 i; //读温度值的暂存变量
 047A           ;   unsigned char temp=0;
 047A AA24              clr R10
 047C                   .dbline 454
 047C           ;   unsigned char number=0;
 047C 4427              clr R20
 047E                   .dbline 455
 047E           ;   i=resetDS18B20();
 047E DFDD              xcall _resetDS18B20
 0480 C02E              mov R12,R16
 0482 DD24              clr R13
 0484                   .dbline 456
 0484           ;   for(number=0;number<maxsize;number++){
 0484 1DC0              xjmp L103
 0486           L100:
 0486                   .dbline 456
 0486                   .dbline 457
 0486           ;      i=readTemp_DS18B20(number);
 0486 042F              mov R16,R20
 0488 A9DF              xcall _readTemp_DS18B20
 048A 6801              movw R12,R16
 048C                   .dbline 458
 048C           ;     if(i&(1<<3)) //判断倒数第四位是1还是0 
 048C 03FF              sbrs R16,3
 048E 06C0              rjmp L104
 0490           X37:
 0490                   .dbline 459
 0490           ;     {
 0490                   .dbline 460
 0490           ;       temp=i>>4+1;
 0490 25E0              ldi R18,5
 0492 30E0              ldi R19,0
 0494 0E940000          xcall lsr16
 0498 A02E              mov R10,R16
 049A                   .dbline 461
 049A           ;     }
 049A 09C0              xjmp L105
 049C           L104:
 049C                   .dbline 463
 049C           ;     else
 049C           ;     {
 049C                   .dbline 464
 049C           ;       temp=i>>4;
 049C 5601              movw R10,R12
 049E B694              lsr R11
 04A0 A794              ror R10
 04A2 B694              lsr R11
 04A4 A794              ror R10
 04A6 B694              lsr R11
 04A8 A794              ror R10
 04AA B694              lsr R11
 04AC A794              ror R10
 04AE                   .dbline 465
 04AE           ;     }
 04AE           L105:
 04AE                   .dbline 466
 04AE           ;      tep[number][0]=temp;
 04AE 8AE0              ldi R24,10
 04B0 849F              mul R24,R20
 04B2 F001              movw R30,R0
 04B4 80E0              ldi R24,<_tep
 04B6 90E0              ldi R25,>_tep
 04B8 E80F              add R30,R24
 04BA F91F              adc R31,R25
 04BC A082              std z+0,R10
 04BE                   .dbline 467
 04BE           ;   }
 04BE           L101:
 04BE                   .dbline 456
 04BE 4395              inc R20
 04C0           L103:
 04C0                   .dbline 456
 04C0 4730              cpi R20,7
 04C2 08F3              brlo L100
 04C4           X38:
 04C4                   .dbline -2
 04C4           L99:
 04C4                   .dbline 0 ; func end
 04C4 0C940000          xjmp pop_xgset303C
 04C8                   .dbsym r temp 10 c
 04C8                   .dbsym r i 12 i
 04C8                   .dbsym r number 20 c
 04C8                   .dbend
 04C8                   .dbfunc e main _main fV
 04C8           ;         number -> R12
 04C8           ;           temp -> R10
                        .even
 04C8           _main::
 04C8                   .dbline -1
 04C8                   .dbline 475
 04C8           ; 
 04C8           ; 
 04C8           ; }
 04C8           ; 
 04C8           ; 
 04C8           ; 
 04C8           ; void main(void)
 04C8           ; {
 04C8                   .dbline 477
 04C8           ; 
 04C8           ;   unsigned char temp=0;
 04C8                   .dbline 478
 04C8           ;   unsigned char number=0;
 04C8 CC24              clr R12
 04CA                   .dbline 479
 04CA           ;   port_init();
 04CA 9ADD              xcall _port_init
 04CC                   .dbline 481
 04CC           ;   
 04CC           ;   USART_Init(9600); //波特率9600 初始化串口
 04CC 00E8              ldi R16,9600
 04CE 15E2              ldi R17,37
 04D0 50DE              xcall _USART_Init
 04D2                   .dbline 482
 04D2           ;   USART_Transmit('O');
 04D2 0FE4              ldi R16,79
 04D4 7FDE              xcall _USART_Transmit
 04D6                   .dbline 483
 04D6           ;   USART_Transmit('K');
 04D6 0BE4              ldi R16,75
 04D8 7DDE              xcall _USART_Transmit
 04DA                   .dbline 484
 04DA           ;   temp=read_rom();
 04DA 80DE              xcall _read_rom
 04DC A02E              mov R10,R16
 04DE           L107:
 04DE                   .dbline 487
 04DE           ; 
 04DE           ;   while(1)
 04DE           ;   {
 04DE                   .dbline 490
 04DE           ; 
 04DE           ;    
 04DE           ;   }//end while(1)
 04DE           L108:
 04DE                   .dbline 486
 04DE FFCF              xjmp L107
 04E0           X39:
 04E0                   .dbline -2
 04E0           L106:
 04E0                   .dbline 0 ; func end
 04E0 0895              ret
 04E2                   .dbsym r number 12 c
 04E2                   .dbsym r temp 10 c
 04E2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\cood\18b20\main.c
 0000           _tep::
 0000                   .blkb 70
 0046                   .dbsym e tep _tep A[70:7:10]c
 0046           _B20_num::
 0046                   .blkb 1
 0047                   .dbsym e B20_num _B20_num c
 0047           _rom_seq::
 0047                   .blkb 56
 007F                   .dbsym e rom_seq _rom_seq A[56:7:8]c
 007F           ; }
 007F           ; 
 007F           ; /*
 007F           ; 假设你只要精确到1度 
 007F           ; 
 007F           ; 换算温度用很简单的方法就可以处理: 
 007F           ; 
 007F           ; 首先判断是正温度还是负温度 
 007F           ; 然后判断倒数第四位是1还是0 
 007F           ; 如果是1且温度为正,那么 温度=x>>4+1; 
 007F           ; 如果是1且温度为负,那么 温度=x>>4-1; 
 007F           ; 如果是0,温度=x>>4; 
 007F           ; 
 007F           ; 这样的操作可以节省很多的flah空间。 
 007F           ; */

⌨️ 快捷键说明

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