📄 main.lis
字号:
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 + -