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

📄 ds18b20.s

📁 基于AVR单片机的DS18B20测温程序.
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -