📄 ds18b20.s
字号:
nop
.dbline 183
; asm("nop");
nop
.dbline 184
; asm("nop");
nop
.dbline 185
; asm("nop");
nop
.dbline 186
; asm("nop");
nop
.dbline 187
; asm("nop");
nop
.dbline 188
; asm("nop");
nop
.dbline 190
;
; Set_DQ1;
sbi 0x14,3
.dbline 190
sbi 0x15,3
.dbline 190
.dbline 191
; delayus(30);
ldi R16,30
ldi R17,0
rcall _delayus
.dbline -2
L37:
.dbline 0 ; func end
ret
.dbend
.dbfunc e WriteBits _WriteBits fV
; i -> R20
; Byte -> R22
.even
_WriteBits::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 200
;
; }
;
; /***************************************************************
; * 功能:向总线写一个字节 *
; * 输入:需要写的字 *
; ***************************************************************/
; void WriteBits(char Byte)
; {
.dbline 201
; char i = 0;
clr R20
.dbline 202
; for (i=0;i<8;i++)
rjmp L42
L39:
.dbline 203
; {
.dbline 204
; if (Byte & 0x01)
sbrs R22,0
rjmp L43
.dbline 205
; {
.dbline 206
; Writr1();
rcall _Writr1
.dbline 207
; }
rjmp L44
L43:
.dbline 209
; else
; {
.dbline 210
; Writr0();
rcall _Writr0
.dbline 211
; }
L44:
.dbline 212
lsr R22
.dbline 213
L40:
.dbline 202
inc R20
L42:
.dbline 202
cpi R20,8
brlo L39
.dbline -2
L38:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r Byte 22 c
.dbend
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L46:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L47:
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
.area text(rom, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
.dbfunc e Reset1820 _Reset1820 fc
.dbsym s CheckValue L47 c
.dbsym s CheckTimes L46 c
.even
_Reset1820::
.dbline -1
.dbline 221
; Byte>>=1;
; }
; }
;
; /***************************************************************
; * 功能:DS18B20复位程序 *
; * 返回:总线复位成功,返回1 *
; ***************************************************************/
; char Reset1820(void)
; {
.dbline 224
; static char CheckTimes = 0;
; static char CheckValue = 1;
; delayus(664);
ldi R16,664
ldi R17,2
rcall _delayus
.dbline 225
; Set_DQ1;
sbi 0x14,3
.dbline 225
sbi 0x15,3
.dbline 225
.dbline 226
; Set_DQ0; //拉低总线480us
sbi 0x14,3
.dbline 226
in R24,0x15
andi R24,247
out 0x15,R24
.dbline 226
.dbline 227
; delayus(332);
ldi R16,332
ldi R17,1
rcall _delayus
.dbline 228
; Set_DQ1;
sbi 0x14,3
.dbline 228
sbi 0x15,3
.dbline 228
.dbline 229
; DDRC &= 0xf7; //设置端口为输入状态,读取数据
in R24,0x14
andi R24,247
out 0x14,R24
.dbline 230
; PORTC |= 0x08;
sbi 0x15,3
L48:
.dbline 231
L49:
.dbline 231
; while(PINC&0x08); //等待,直至确认复位成功
sbic 0x13,3
rjmp L48
.dbline 232
; CheckValue = Read_DQ;
in R24,0x13
andi R24,8
sts L47,R24
.dbline 233
; delayus(150);
ldi R16,150
ldi R17,0
rcall _delayus
.dbline 234
; return CheckValue;
lds R16,L47
.dbline -2
L45:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Init1820 _Init1820 fV
.even
_Init1820::
.dbline -1
.dbline 238
; }
;
; void Init1820(void)
; {
.dbline 250
; /* if (Reset1820() == 0x08)
; {
; DisplayListChar(0,0,"1820 Not Detect $");
; DisplayListChar(0,1," $");
; }
; else
; {
; DisplayListChar(0,0,"Init DS18B20 OK!$");
; DisplayListChar(0,1," $");
; }
; */
; WriteBits(MatchROM);
ldi R16,204
rcall _WriteBits
.dbline 251
; WriteBits(WriteMode);
ldi R16,78
rcall _WriteBits
.dbline 252
; WriteBits(TH);
ldi R16,100
rcall _WriteBits
.dbline 253
; WriteBits(TL);
ldi R16,138
rcall _WriteBits
.dbline 254
; WriteBits(MatchTemp);
ldi R16,127
rcall _WriteBits
.dbline -2
L51:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ReadBit _ReadBit fc
; i -> R20
; Read_Value -> R20
.even
_ReadBit::
rcall push_gset1
.dbline -1
.dbline 262
; }
;
; /***************************************************************
; * 功能:从总线中读取数据位 *
; * 返回:读取值 *
; ***************************************************************/
; char ReadBit(void)
; {
.dbline 263
; char i = 0;
clr R20
.dbline 264
; char Read_Value = 0;
.dbline 265
; Set_DQ1;
sbi 0x14,3
.dbline 265
sbi 0x15,3
.dbline 265
.dbline 266
; Set_DQ0;
sbi 0x14,3
.dbline 266
in R24,0x15
andi R24,247
out 0x15,R24
.dbline 266
.dbline 267
; asm("nop");
nop
.dbline 268
; asm("nop");
nop
.dbline 269
; asm("nop");
nop
.dbline 270
; asm("nop");
nop
.dbline 271
; asm("nop");
nop
.dbline 272
; asm("nop");
nop
.dbline 273
; asm("nop");
nop
.dbline 274
; asm("nop");
nop
.dbline 275
; asm("nop");
nop
.dbline 276
; asm("nop");
nop
.dbline 277
; asm("nop");
nop
.dbline 279
;
; Set_DQ1;
sbi 0x14,3
.dbline 279
sbi 0x15,3
.dbline 279
.dbline 281
;
; DDRC &= 0xf7; //设置端口为输入状态,读取数据
in R24,0x14
andi R24,247
out 0x14,R24
.dbline 282
; PORTC |= 0x08;
sbi 0x15,3
.dbline 284
;
; Read_Value = Read_DQ;
in R20,0x13
andi R20,8
.dbline 285
; asm("nop");
nop
.dbline 286
; asm("nop");
nop
.dbline 287
; delayus(30);
ldi R16,30
ldi R17,0
rcall _delayus
.dbline 288
; return Read_Value;
mov R16,R20
.dbline -2
L52:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r Read_Value 20 c
.dbend
.dbfunc e ReadBits _ReadBits fc
; b -> R20
; i -> R22
; ReadBits_Value -> R10
.even
_ReadBits::
rcall push_gset3
.dbline -1
.dbline 297
; }
;
;
; /***************************************************************
; * 功能:从总线读取一个字节 *
; * 返回:读取到的字符 *
; ***************************************************************/
; char ReadBits(void)
; {
.dbline 298
; char i = 0;
clr R22
.dbline 299
; char b = 0;
clr R20
.dbline 300
; char ReadBits_Value = 0;
clr R10
.dbline 301
; for (i=8;i>0;i--)
ldi R22,8
rjmp L57
L54:
.dbline 302
; {
.dbline 303
; ReadBits_Value = ReadBits_Value>>1;
lsr R10
.dbline 304
; b = ReadBit();
rcall _ReadBit
mov R20,R16
.dbline 305
; if(b)
tst R16
breq L58
.dbline 306
; {
.dbline 307
; ReadBits_Value = ReadBits_Value|0x80;
mov R24,R10
ori R24,128
mov R10,R24
.dbline 308
; }
L58:
.dbline 310
L55:
.dbline 301
dec R22
L57:
.dbline 301
clr R2
cp R2,R22
brlo L54
.dbline 312
;
; }
; //DEC_Num_Disp(0,1,ReadBits_Value,5);
; return ReadBits_Value;
mov R16,R10
.dbline -2
L53:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r b 20 c
.dbsym r i 22 c
.dbsym r ReadBits_Value 10 c
.dbend
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L61:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L62:
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L63:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L64:
.blkb 4
.area idata
.word 0,0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
.area text(rom, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
.dbfunc e Get_Temperature _Get_Temperature fV
.dbsym s final L64 L
.dbsym s Temp2 L63 c
.dbsym s TempHi L62 I
.dbsym s TempLow L61 I
; i -> <dead>
.even
_Get_Temperature::
sbiw R28,2
.dbline -1
.dbline 320
; }
;
; /***************************************************************
; * 功能:获得温度值 *
; * 返回:温度值--摄氏温度 *
; ***************************************************************/
; void Get_Temperature(void)
; {
.dbline 326
; uint i;
; static int TempLow = 0;
; static int TempHi = 0;
; static char Temp2 = 0;
; static long final = 0;
; Reset1820();
rcall _Reset1820
.dbline 327
; WriteBits(MatchROM);
ldi R16,204
rcall _WriteBits
.dbline 328
; WriteBits(ConverTem);
ldi R16,68
rcall _WriteBits
.dbline 332
; //for(i=0;i<20;i++)
; //delayus(66);
;
; Reset1820();
rcall _Reset1820
.dbline 333
; WriteBits(MatchROM);
ldi R16,204
rcall _WriteBits
.dbline 334
; WriteBits(Get_Value);
ldi R16,190
rcall _WriteBits
.dbline 336
; //for(i=0;i<20;i++)
; delayus(70);
ldi R16,70
ldi R17,0
rcall _delayus
.dbline 337
; TempLow = ReadBits(); //温度低位
rcall _ReadBits
mov R2,R16
clr R3
sts L61+1,R3
sts L61,R2
.dbline 338
; delayus(70);
ldi R16,70
ldi R17,0
rcall _delayus
.dbline 339
; TempHi = ReadBits();
rcall _ReadBits
mov R2,R16
clr R3
sts L62+1,R3
sts L62,R2
.dbline 343
; //温度高位
;
;
; final = (((TempHi)<<8)|TempLow)*0.0625;
ldi R16,<L65
ldi R17,>L65
rcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
lds R2,L61
lds R3,L61+1
lds R16,L62
lds R17,L62+1
mov R17,R16
clr R16
or R16,R2
or R17,R3
rcall int2fp
st -y,R19
st -y,R18
st -y,R17
st -y,R16
rcall empy32f
rcall fp2long
sts L64+1,R17
sts L64,R16
sts L64+2+1,R19
sts L64+2,R18
.dbline 347
;
;
;
; process(final,data);
ldi R24,<_data
ldi R25,>_data
std y+1,R25
std y+0,R24
rcall _process
.dbline 348
; DisplayListChar(3,1,data);
ldi R24,<_data
ldi R25,>_data
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,3
rcall _DisplayListChar
.dbline -2
L60:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym l i 3 i
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 353
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 355
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 356
; port_init();
rcall _port_init
.dbline 357
; LCMInit(); //清屏
rcall _LCMInit
.dbline 358
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 359
; GICR = 0x00;
out 0x3b,R2
.dbline 360
; TIMSK = 0x04; //timer interrupt sources
ldi R24,4
out 0x39,R24
.dbline 361
; SEI(); //re-enable interrupts
sei
.dbline -2
L66:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
sbiw R28,2
.dbline -1
.dbline 366
; //all peripherals are now initialized
; }
;
; void main(void)
; {
.dbline 368
; uchar i;
; init_devices();
rcall _init_devices
.dbline 376
; /*
; delayms(5);
; DisplayListChar(0,0,"Reset after sure$");
; DisplayListChar(0,1," C $");
; Init1820();
; delayms(10);
; */
; DisplayListChar(0,0,"DS18B20+LCD$");
ldi R24,<L68
ldi R25,>L68
std y+1,R25
std y+0,R24
clr R18
clr R16
rcall _DisplayListChar
.dbline 377
; DisplayListChar(0,1,"Made by zhang_he$");
ldi R24,<L69
ldi R25,>L69
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
rcall _DisplayListChar
.dbline 378
; delayms(80);
ldi R16,80
ldi R17,0
rcall _delayms
.dbline 379
; DisplayListChar(0,0,"Press the button$");
ldi R24,<L70
ldi R25,>L70
std y+1,R25
std y+0,R24
clr R18
clr R16
rcall _DisplayListChar
L71:
.dbline 380
L72:
.dbline 380
; while(PIND!=0xfe);
in R24,0x10
cpi R24,254
brne L71
.dbline 381
; DisplayListChar(0,0," Now Temp: $");
ldi R24,<L74
ldi R25,>L74
std y+1,R25
std y+0,R24
clr R18
clr R16
rcall _DisplayListChar
.dbline 382
; DisplayListChar(0,1," C $");
ldi R24,<L75
ldi R25,>L75
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
rcall _DisplayListChar
.dbline 384
;
; for(i=0;;i++)
clr R20
L76:
.dbline 385
.dbline 386
rcall _Get_Temperature
.dbline 387
L77:
.dbline 384
inc R20
.dbline 384
rjmp L76
X3:
.dbline -2
L67:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
_data::
.blkb 5
.dbsym e data _data A[5:5]c
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L75:
.blkb 18
.area idata
.byte 32,32,32,32,32,32,32,32,'C,32,32,32,32,32,32,32
.byte 36,0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L74:
.blkb 18
.area idata
.byte 32,'N,'o,'w,32,'T,'e,'m,'p,58,32,32,32,32,32,32
.byte 36,0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L70:
.blkb 18
.area idata
.byte 'P,'r,'e,'s,'s,32,'t,'h,'e,32,'b,'u,'t,'t,'o,'n
.byte 36,0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L69:
.blkb 18
.area idata
.byte 'M,'a,'d,'e,32,'b,'y,32,'z,'h,'a,'n,'g,95,'h,'e
.byte 36,0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
L68:
.blkb 13
.area idata
.byte 'D,'S,49,56,'B,50,48,43,'L,'C,'D,36,0
.area data(ram, con, rel)
.dbfile E:\CRAZY\调试AVR_C\电升06~1\DS18B20.c
.area lit(rom, con, rel)
L65:
.word 0x0,0x3d80
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -