?? ds18b20.lis
字號:
00A4 ; {
00A4 .dbline 64
00A4 ; temp =val>>i;
00A4 0A2D mov R16,R10
00A6 162F mov R17,R22
00A8 0E940000 xcall lsr8
00AC 402F mov R20,R16
00AE .dbline 65
00AE ; if((temp&0x01) == 0x01)
00AE 842F mov R24,R20
00B0 8170 andi R24,1
00B2 8130 cpi R24,1
00B4 19F4 brne L15
00B6 .dbline 66
00B6 ; DS18B20_WriteBit(1);
00B6 01E0 ldi R16,1
00B8 C0DF xcall _DS18B20_WriteBit
00BA 02C0 xjmp L16
00BC L15:
00BC .dbline 68
00BC ; else
00BC ; DS18B20_WriteBit(0);
00BC 0027 clr R16
00BE BDDF xcall _DS18B20_WriteBit
00C0 L16:
00C0 .dbline 71
00C0 L12:
00C0 .dbline 62
00C0 6395 inc R22
00C2 L14:
00C2 .dbline 62
00C2 6830 cpi R22,8
00C4 78F3 brlo L11
00C6 .dbline 73
00C6 ;
00C6 ;
00C6 ; }
00C6 ;
00C6 ; delay_nus(60); //延時
00C6 0CE3 ldi R16,60
00C8 10E0 ldi R17,0
00CA 0E940000 xcall _delay_nus
00CE .dbline -2
00CE L10:
00CE 0E940000 xcall pop_gset3
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r temp 20 c
00D4 .dbsym r i 22 c
00D4 .dbsym r val 10 c
00D4 .dbend
00D4 .dbfunc e DS18B20_ReadChar _DS18B20_ReadChar fc
00D4 ; R_data -> R20
00D4 ; i -> R22
.even
00D4 _DS18B20_ReadChar::
00D4 0E940000 xcall push_gset2
00D8 .dbline -1
00D8 .dbline 77
00D8 ; }
00D8 ;
00D8 ; byte DS18B20_ReadChar(void) //讀一個字節數據函數
00D8 ; {
00D8 .dbline 78
00D8 ; unsigned char i = 0;
00D8 6627 clr R22
00DA .dbline 79
00DA ; byte R_data = 0;
00DA 4427 clr R20
00DC .dbline 81
00DC ;
00DC ; for (i=0;i<8;i++)
00DC 09C0 xjmp L21
00DE L18:
00DE .dbline 82
00DE ; {
00DE .dbline 83
00DE ; if(DS18B20_ReadBit())
00DE C3DF xcall _DS18B20_ReadBit
00E0 0023 tst R16
00E2 29F0 breq L22
00E4 .dbline 84
00E4 ; R_data |=1<<i;
00E4 01E0 ldi R16,1
00E6 162F mov R17,R22
00E8 0E940000 xcall lsl8
00EC 402B or R20,R16
00EE L22:
00EE .dbline 85
00EE L19:
00EE .dbline 81
00EE 6395 inc R22
00F0 L21:
00F0 .dbline 81
00F0 6830 cpi R22,8
00F2 A8F3 brlo L18
00F4 .dbline 86
00F4 ; }
00F4 ; return (R_data);
00F4 042F mov R16,R20
00F6 .dbline -2
00F6 L17:
00F6 0E940000 xcall pop_gset2
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbsym r R_data 20 c
00FC .dbsym r i 22 c
00FC .dbend
00FC .dbfunc e ReadTemperature _ReadTemperature fi
00FC ; tempValue -> R20,R21
00FC ; Rom -> y+0
.even
00FC _ReadTemperature::
00FC 0E940000 xcall push_gset1
0100 2297 sbiw R28,2
0102 .dbline -1
0102 .dbline 90
0102 ; }
0102 ;
0102 ; unsigned int ReadTemperature(void) //讀取溫度函數
0102 ; {
0102 .dbline 93
0102 ; byte Rom[2];
0102 ; unsigned int tempValue;
0102 ; if(DS18B20_Reset())
0102 7EDF xcall _DS18B20_Reset
0104 0023 tst R16
0106 19F0 breq L25
0108 .dbline 94
0108 ; {
0108 .dbline 95
0108 ; return 0xffff;
0108 0FEF ldi R16,65535
010A 1FEF ldi R17,255
010C 23C0 xjmp L24
010E L25:
010E .dbline 97
010E ; }
010E ; DS18B20_WriteChar(0xcc) ; //跳過讀序號列號的操作
010E 0CEC ldi R16,204
0110 C3DF xcall _DS18B20_WriteChar
0112 .dbline 98
0112 ; DS18B20_WriteChar(0x44) ; //啟動溫度轉換
0112 04E4 ldi R16,68
0114 C1DF xcall _DS18B20_WriteChar
0116 .dbline 99
0116 ; delay_nus(100);
0116 04E6 ldi R16,100
0118 10E0 ldi R17,0
011A 0E940000 xcall _delay_nus
011E .dbline 100
011E ; if(DS18B20_Reset())
011E 70DF xcall _DS18B20_Reset
0120 0023 tst R16
0122 19F0 breq L27
0124 .dbline 101
0124 ; {
0124 .dbline 102
0124 ; return 0xffff;
0124 0FEF ldi R16,65535
0126 1FEF ldi R17,255
0128 15C0 xjmp L24
012A L27:
012A .dbline 104
012A ; }
012A ; DS18B20_WriteChar(0xCC) ; //跳過讀序號列號的操作
012A 0CEC ldi R16,204
012C B5DF xcall _DS18B20_WriteChar
012E .dbline 105
012E ; DS18B20_WriteChar(0xBE) ; //讀取溫度寄存器
012E 0EEB ldi R16,190
0130 B3DF xcall _DS18B20_WriteChar
0132 .dbline 106
0132 ; delay_nus(200);
0132 08EC ldi R16,200
0134 10E0 ldi R17,0
0136 0E940000 xcall _delay_nus
013A .dbline 107
013A ; Rom[0] = DS18B20_ReadChar() ; //讀溫度低8位
013A CCDF xcall _DS18B20_ReadChar
013C 0883 std y+0,R16
013E .dbline 108
013E ; Rom[1] = DS18B20_ReadChar() ; //讀溫度高8位
013E CADF xcall _DS18B20_ReadChar
0140 0983 std y+1,R16
0142 .dbline 112
0142 ; /* *tempValue = Rom[1];
0142 ; *tempValue <<= 8;
0142 ; *tempValue |= Rom[0];*/
0142 ; tempValue = Rom[1];
0142 402F mov R20,R16
0144 5527 clr R21
0146 .dbline 113
0146 ; tempValue <<= 8;
0146 542F mov R21,R20
0148 4427 clr R20
014A .dbline 114
014A ; tempValue |= Rom[0];
014A 2880 ldd R2,y+0
014C 3324 clr R3
014E 4229 or R20,R2
0150 5329 or R21,R3
0152 .dbline 115
0152 ; return tempValue;
0152 8A01 movw R16,R20
0154 .dbline -2
0154 L24:
0154 2296 adiw R28,2
0156 0E940000 xcall pop_gset1
015A .dbline 0 ; func end
015A 0895 ret
015C .dbsym r tempValue 20 i
015C .dbsym l Rom 0 A[2:2]c
015C .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -