www.pudn.com > DS18B20.rar > DS18b20.asm


 
;CodeVisionAVR C Compiler V1.25.5 Professional 
;(C) Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. 
;http://www.hpinfotech.com 
 
;Chip type              : ATmega16 
;Program type           : Application 
;Clock frequency        : 8.000000 MHz 
;Memory model           : Small 
;Optimize for           : Size 
;(s)printf features     : int, width 
;(s)scanf features      : int, width 
;External SRAM size     : 0 
;Data Stack size        : 256 byte(s) 
;Heap size              : 0 byte(s) 
;Promote char to int    : No 
;char is unsigned       : Yes 
;8 bit enums            : Yes 
;Word align FLASH struct: No 
;Enhanced core instructions    : On 
;Smart register allocation : On 
;Automatic register allocation : On 
 
	#pragma AVRPART ADMIN PART_NAME ATmega16 
	#pragma AVRPART MEMORY PROG_FLASH 16384 
	#pragma AVRPART MEMORY EEPROM 512 
	#pragma AVRPART MEMORY INT_SRAM SIZE 1024 
	#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60 
 
	.EQU UDRE=0x5 
	.EQU RXC=0x7 
	.EQU USR=0xB 
	.EQU UDR=0xC 
	.EQU SPSR=0xE 
	.EQU SPDR=0xF 
	.EQU EERE=0x0 
	.EQU EEWE=0x1 
	.EQU EEMWE=0x2 
	.EQU EECR=0x1C 
	.EQU EEDR=0x1D 
	.EQU EEARL=0x1E 
	.EQU EEARH=0x1F 
	.EQU WDTCR=0x21 
	.EQU MCUCR=0x35 
	.EQU GICR=0x3B 
	.EQU SPL=0x3D 
	.EQU SPH=0x3E 
	.EQU SREG=0x3F 
 
	.DEF R0X0=R0 
	.DEF R0X1=R1 
	.DEF R0X2=R2 
	.DEF R0X3=R3 
	.DEF R0X4=R4 
	.DEF R0X5=R5 
	.DEF R0X6=R6 
	.DEF R0X7=R7 
	.DEF R0X8=R8 
	.DEF R0X9=R9 
	.DEF R0XA=R10 
	.DEF R0XB=R11 
	.DEF R0XC=R12 
	.DEF R0XD=R13 
	.DEF R0XE=R14 
	.DEF R0XF=R15 
	.DEF R0X10=R16 
	.DEF R0X11=R17 
	.DEF R0X12=R18 
	.DEF R0X13=R19 
	.DEF R0X14=R20 
	.DEF R0X15=R21 
	.DEF R0X16=R22 
	.DEF R0X17=R23 
	.DEF R0X18=R24 
	.DEF R0X19=R25 
	.DEF R0X1A=R26 
	.DEF R0X1B=R27 
	.DEF R0X1C=R28 
	.DEF R0X1D=R29 
	.DEF R0X1E=R30 
	.DEF R0X1F=R31 
 
	.MACRO __CPD1N 
	CPI  R30,LOW(@0) 
	LDI  R26,HIGH(@0) 
	CPC  R31,R26 
	LDI  R26,BYTE3(@0) 
	CPC  R22,R26 
	LDI  R26,BYTE4(@0) 
	CPC  R23,R26 
	.ENDM 
 
	.MACRO __CPD2N 
	CPI  R26,LOW(@0) 
	LDI  R30,HIGH(@0) 
	CPC  R27,R30 
	LDI  R30,BYTE3(@0) 
	CPC  R24,R30 
	LDI  R30,BYTE4(@0) 
	CPC  R25,R30 
	.ENDM 
 
	.MACRO __CPWRR 
	CP   R@0,R@2 
	CPC  R@1,R@3 
	.ENDM 
 
	.MACRO __CPWRN 
	CPI  R@0,LOW(@2) 
	LDI  R30,HIGH(@2) 
	CPC  R@1,R30 
	.ENDM 
 
	.MACRO __ADDB1MN 
	SUBI R30,LOW(-@0-(@1)) 
	.ENDM 
	.MACRO __ADDB2MN 
	SUBI R26,LOW(-@0-(@1)) 
	.ENDM 
	.MACRO __ADDW1MN 
	SUBI R30,LOW(-@0-(@1)) 
	SBCI R31,HIGH(-@0-(@1)) 
	.ENDM 
	.MACRO __ADDW2MN 
	SUBI R26,LOW(-@0-(@1)) 
	SBCI R27,HIGH(-@0-(@1)) 
	.ENDM 
	.MACRO __ADDW1FN 
	SUBI R30,LOW(-2*@0-(@1)) 
	SBCI R31,HIGH(-2*@0-(@1)) 
	.ENDM 
	.MACRO __ADDD1FN 
	SUBI R30,LOW(-2*@0-(@1)) 
	SBCI R31,HIGH(-2*@0-(@1)) 
	SBCI R22,BYTE3(-2*@0-(@1)) 
	.ENDM 
	.MACRO __ADDD1N 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	SBCI R22,BYTE3(-@0) 
	SBCI R23,BYTE4(-@0) 
	.ENDM 
 
	.MACRO __ADDD2N 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	SBCI R24,BYTE3(-@0) 
	SBCI R25,BYTE4(-@0) 
	.ENDM 
 
	.MACRO __SUBD1N 
	SUBI R30,LOW(@0) 
	SBCI R31,HIGH(@0) 
	SBCI R22,BYTE3(@0) 
	SBCI R23,BYTE4(@0) 
	.ENDM 
 
	.MACRO __SUBD2N 
	SUBI R26,LOW(@0) 
	SBCI R27,HIGH(@0) 
	SBCI R24,BYTE3(@0) 
	SBCI R25,BYTE4(@0) 
	.ENDM 
 
	.MACRO __ANDBMNN 
	LDS  R30,@0+@1 
	ANDI R30,LOW(@2) 
	STS  @0+@1,R30 
	.ENDM 
 
	.MACRO __ANDWMNN 
	LDS  R30,@0+@1 
	ANDI R30,LOW(@2) 
	STS  @0+@1,R30 
	LDS  R30,@0+@1+1 
	ANDI R30,HIGH(@2) 
	STS  @0+@1+1,R30 
	.ENDM 
 
	.MACRO __ANDD1N 
	ANDI R30,LOW(@0) 
	ANDI R31,HIGH(@0) 
	ANDI R22,BYTE3(@0) 
	ANDI R23,BYTE4(@0) 
	.ENDM 
 
	.MACRO __ORBMNN 
	LDS  R30,@0+@1 
	ORI  R30,LOW(@2) 
	STS  @0+@1,R30 
	.ENDM 
 
	.MACRO __ORWMNN 
	LDS  R30,@0+@1 
	ORI  R30,LOW(@2) 
	STS  @0+@1,R30 
	LDS  R30,@0+@1+1 
	ORI  R30,HIGH(@2) 
	STS  @0+@1+1,R30 
	.ENDM 
 
	.MACRO __ORD1N 
	ORI  R30,LOW(@0) 
	ORI  R31,HIGH(@0) 
	ORI  R22,BYTE3(@0) 
	ORI  R23,BYTE4(@0) 
	.ENDM 
 
	.MACRO __DELAY_USB 
	LDI  R24,LOW(@0) 
__DELAY_USB_LOOP: 
	DEC  R24 
	BRNE __DELAY_USB_LOOP 
	.ENDM 
 
	.MACRO __DELAY_USW 
	LDI  R24,LOW(@0) 
	LDI  R25,HIGH(@0) 
__DELAY_USW_LOOP: 
	SBIW R24,1 
	BRNE __DELAY_USW_LOOP 
	.ENDM 
 
	.MACRO __CLRD1S 
	LDI  R30,0 
	STD  Y+@0,R30 
	STD  Y+@0+1,R30 
	STD  Y+@0+2,R30 
	STD  Y+@0+3,R30 
	.ENDM 
 
	.MACRO __GETD1S 
	LDD  R30,Y+@0 
	LDD  R31,Y+@0+1 
	LDD  R22,Y+@0+2 
	LDD  R23,Y+@0+3 
	.ENDM 
 
	.MACRO __PUTD1S 
	STD  Y+@0,R30 
	STD  Y+@0+1,R31 
	STD  Y+@0+2,R22 
	STD  Y+@0+3,R23 
	.ENDM 
 
	.MACRO __PUTD2S 
	STD  Y+@0,R26 
	STD  Y+@0+1,R27 
	STD  Y+@0+2,R24 
	STD  Y+@0+3,R25 
	.ENDM 
 
	.MACRO __POINTB1MN 
	LDI  R30,LOW(@0+@1) 
	.ENDM 
 
	.MACRO __POINTW1MN 
	LDI  R30,LOW(@0+@1) 
	LDI  R31,HIGH(@0+@1) 
	.ENDM 
 
	.MACRO __POINTD1M 
	LDI  R30,LOW(@0) 
	LDI  R31,HIGH(@0) 
	LDI  R22,BYTE3(@0) 
	LDI  R23,BYTE4(@0) 
	.ENDM 
 
	.MACRO __POINTW1FN 
	LDI  R30,LOW(2*@0+@1) 
	LDI  R31,HIGH(2*@0+@1) 
	.ENDM 
 
	.MACRO __POINTD1FN 
	LDI  R30,LOW(2*@0+@1) 
	LDI  R31,HIGH(2*@0+@1) 
	LDI  R22,BYTE3(2*@0+@1) 
	LDI  R23,BYTE4(2*@0+@1) 
	.ENDM 
 
	.MACRO __POINTB2MN 
	LDI  R26,LOW(@0+@1) 
	.ENDM 
 
	.MACRO __POINTW2MN 
	LDI  R26,LOW(@0+@1) 
	LDI  R27,HIGH(@0+@1) 
	.ENDM 
 
	.MACRO __POINTBRM 
	LDI  R@0,LOW(@1) 
	.ENDM 
 
	.MACRO __POINTWRM 
	LDI  R@0,LOW(@2) 
	LDI  R@1,HIGH(@2) 
	.ENDM 
 
	.MACRO __POINTBRMN 
	LDI  R@0,LOW(@1+@2) 
	.ENDM 
 
	.MACRO __POINTWRMN 
	LDI  R@0,LOW(@2+@3) 
	LDI  R@1,HIGH(@2+@3) 
	.ENDM 
 
	.MACRO __POINTWRFN 
	LDI  R@0,LOW(@2*2+@3) 
	LDI  R@1,HIGH(@2*2+@3) 
	.ENDM 
 
	.MACRO __GETD1N 
	LDI  R30,LOW(@0) 
	LDI  R31,HIGH(@0) 
	LDI  R22,BYTE3(@0) 
	LDI  R23,BYTE4(@0) 
	.ENDM 
 
	.MACRO __GETD2N 
	LDI  R26,LOW(@0) 
	LDI  R27,HIGH(@0) 
	LDI  R24,BYTE3(@0) 
	LDI  R25,BYTE4(@0) 
	.ENDM 
 
	.MACRO __GETD2S 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	LDD  R24,Y+@0+2 
	LDD  R25,Y+@0+3 
	.ENDM 
 
	.MACRO __GETB1MN 
	LDS  R30,@0+@1 
	.ENDM 
 
	.MACRO __GETB1HMN 
	LDS  R31,@0+@1 
	.ENDM 
 
	.MACRO __GETW1MN 
	LDS  R30,@0+@1 
	LDS  R31,@0+@1+1 
	.ENDM 
 
	.MACRO __GETD1MN 
	LDS  R30,@0+@1 
	LDS  R31,@0+@1+1 
	LDS  R22,@0+@1+2 
	LDS  R23,@0+@1+3 
	.ENDM 
 
	.MACRO __GETBRMN 
	LDS  R@0,@1+@2 
	.ENDM 
 
	.MACRO __GETWRMN 
	LDS  R@0,@2+@3 
	LDS  R@1,@2+@3+1 
	.ENDM 
 
	.MACRO __GETWRZ 
	LDD  R@0,Z+@2 
	LDD  R@1,Z+@2+1 
	.ENDM 
 
	.MACRO __GETD2Z 
	LDD  R26,Z+@0 
	LDD  R27,Z+@0+1 
	LDD  R24,Z+@0+2 
	LDD  R25,Z+@0+3 
	.ENDM 
 
	.MACRO __GETB2MN 
	LDS  R26,@0+@1 
	.ENDM 
 
	.MACRO __GETW2MN 
	LDS  R26,@0+@1 
	LDS  R27,@0+@1+1 
	.ENDM 
 
	.MACRO __GETD2MN 
	LDS  R26,@0+@1 
	LDS  R27,@0+@1+1 
	LDS  R24,@0+@1+2 
	LDS  R25,@0+@1+3 
	.ENDM 
 
	.MACRO __PUTB1MN 
	STS  @0+@1,R30 
	.ENDM 
 
	.MACRO __PUTW1MN 
	STS  @0+@1,R30 
	STS  @0+@1+1,R31 
	.ENDM 
 
	.MACRO __PUTD1MN 
	STS  @0+@1,R30 
	STS  @0+@1+1,R31 
	STS  @0+@1+2,R22 
	STS  @0+@1+3,R23 
	.ENDM 
 
	.MACRO __PUTBR0MN 
	STS  @0+@1,R0 
	.ENDM 
 
	.MACRO __PUTDZ2 
	STD  Z+@0,R26 
	STD  Z+@0+1,R27 
	STD  Z+@0+2,R24 
	STD  Z+@0+3,R25 
	.ENDM 
 
	.MACRO __PUTBMRN 
	STS  @0+@1,R@2 
	.ENDM 
 
	.MACRO __PUTWMRN 
	STS  @0+@1,R@2 
	STS  @0+@1+1,R@3 
	.ENDM 
 
	.MACRO __PUTBZR 
	STD  Z+@1,R@0 
	.ENDM 
 
	.MACRO __PUTWZR 
	STD  Z+@2,R@0 
	STD  Z+@2+1,R@1 
	.ENDM 
 
	.MACRO __GETW1R 
	MOV  R30,R@0 
	MOV  R31,R@1 
	.ENDM 
 
	.MACRO __GETW2R 
	MOV  R26,R@0 
	MOV  R27,R@1 
	.ENDM 
 
	.MACRO __GETWRN 
	LDI  R@0,LOW(@2) 
	LDI  R@1,HIGH(@2) 
	.ENDM 
 
	.MACRO __PUTW1R 
	MOV  R@0,R30 
	MOV  R@1,R31 
	.ENDM 
 
	.MACRO __PUTW2R 
	MOV  R@0,R26 
	MOV  R@1,R27 
	.ENDM 
 
	.MACRO __ADDWRN 
	SUBI R@0,LOW(-@2) 
	SBCI R@1,HIGH(-@2) 
	.ENDM 
 
	.MACRO __ADDWRR 
	ADD  R@0,R@2 
	ADC  R@1,R@3 
	.ENDM 
 
	.MACRO __SUBWRN 
	SUBI R@0,LOW(@2) 
	SBCI R@1,HIGH(@2) 
	.ENDM 
 
	.MACRO __SUBWRR 
	SUB  R@0,R@2 
	SBC  R@1,R@3 
	.ENDM 
 
	.MACRO __ANDWRN 
	ANDI R@0,LOW(@2) 
	ANDI R@1,HIGH(@2) 
	.ENDM 
 
	.MACRO __ANDWRR 
	AND  R@0,R@2 
	AND  R@1,R@3 
	.ENDM 
 
	.MACRO __ORWRN 
	ORI  R@0,LOW(@2) 
	ORI  R@1,HIGH(@2) 
	.ENDM 
 
	.MACRO __ORWRR 
	OR   R@0,R@2 
	OR   R@1,R@3 
	.ENDM 
 
	.MACRO __EORWRR 
	EOR  R@0,R@2 
	EOR  R@1,R@3 
	.ENDM 
 
	.MACRO __GETWRS 
	LDD  R@0,Y+@2 
	LDD  R@1,Y+@2+1 
	.ENDM 
 
	.MACRO __PUTWSR 
	STD  Y+@2,R@0 
	STD  Y+@2+1,R@1 
	.ENDM 
 
	.MACRO __MOVEWRR 
	MOV  R@0,R@2 
	MOV  R@1,R@3 
	.ENDM 
 
	.MACRO __INWR 
	IN   R@0,@2 
	IN   R@1,@2+1 
	.ENDM 
 
	.MACRO __OUTWR 
	OUT  @2+1,R@1 
	OUT  @2,R@0 
	.ENDM 
 
	.MACRO __CALL1MN 
	LDS  R30,@0+@1 
	LDS  R31,@0+@1+1 
	ICALL 
	.ENDM 
 
	.MACRO __CALL1FN 
	LDI  R30,LOW(2*@0+@1) 
	LDI  R31,HIGH(2*@0+@1) 
	CALL __GETW1PF 
	ICALL 
	.ENDM 
 
	.MACRO __CALL2EN 
	LDI  R26,LOW(@0+@1) 
	LDI  R27,HIGH(@0+@1) 
	CALL __EEPROMRDW 
	ICALL 
	.ENDM 
 
	.MACRO __GETW1STACK 
	IN   R26,SPL 
	IN   R27,SPH 
	ADIW R26,@0+1 
	LD   R30,X+ 
	LD   R31,X 
	.ENDM 
 
	.MACRO __NBST 
	BST  R@0,@1 
	IN   R30,SREG 
	LDI  R31,0x40 
	EOR  R30,R31 
	OUT  SREG,R30 
	.ENDM 
 
 
	.MACRO __PUTB1SN 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1SN 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1SN 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1SNS 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	ADIW R26,@1 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1SNS 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	ADIW R26,@1 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1SNS 
	LDD  R26,Y+@0 
	LDD  R27,Y+@0+1 
	ADIW R26,@1 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1PMN 
	LDS  R26,@0 
	LDS  R27,@0+1 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1PMN 
	LDS  R26,@0 
	LDS  R27,@0+1 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1PMN 
	LDS  R26,@0 
	LDS  R27,@0+1 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1PMNS 
	LDS  R26,@0 
	LDS  R27,@0+1 
	ADIW R26,@1 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1PMNS 
	LDS  R26,@0 
	LDS  R27,@0+1 
	ADIW R26,@1 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1PMNS 
	LDS  R26,@0 
	LDS  R27,@0+1 
	ADIW R26,@1 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1RN 
	MOVW R26,R@0 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1RN 
	MOVW R26,R@0 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1RN 
	MOVW R26,R@0 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1RNS 
	MOVW R26,R@0 
	ADIW R26,@1 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1RNS 
	MOVW R26,R@0 
	ADIW R26,@1 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1RNS 
	MOVW R26,R@0 
	ADIW R26,@1 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1RON 
	MOV  R26,R@0 
	MOV  R27,R@1 
	SUBI R26,LOW(-@2) 
	SBCI R27,HIGH(-@2) 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1RON 
	MOV  R26,R@0 
	MOV  R27,R@1 
	SUBI R26,LOW(-@2) 
	SBCI R27,HIGH(-@2) 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1RON 
	MOV  R26,R@0 
	MOV  R27,R@1 
	SUBI R26,LOW(-@2) 
	SBCI R27,HIGH(-@2) 
	CALL __PUTDP1 
	.ENDM 
 
	.MACRO __PUTB1RONS 
	MOV  R26,R@0 
	MOV  R27,R@1 
	ADIW R26,@2 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1RONS 
	MOV  R26,R@0 
	MOV  R27,R@1 
	ADIW R26,@2 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1RONS 
	MOV  R26,R@0 
	MOV  R27,R@1 
	ADIW R26,@2 
	CALL __PUTDP1 
	.ENDM 
 
 
	.MACRO __GETB1SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	LD   R30,Z 
	.ENDM 
 
	.MACRO __GETB1HSX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	LD   R31,Z 
	.ENDM 
 
	.MACRO __GETW1SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	LD   R0,Z+ 
	LD   R31,Z 
	MOV  R30,R0 
	.ENDM 
 
	.MACRO __GETD1SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	LD   R0,Z+ 
	LD   R1,Z+ 
	LD   R22,Z+ 
	LD   R23,Z 
	MOVW R30,R0 
	.ENDM 
 
	.MACRO __GETB2SX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	LD   R26,X 
	.ENDM 
 
	.MACRO __GETW2SX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	LD   R0,X+ 
	LD   R27,X 
	MOV  R26,R0 
	.ENDM 
 
	.MACRO __GETD2SX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	LD   R0,X+ 
	LD   R1,X+ 
	LD   R24,X+ 
	LD   R25,X 
	MOVW R26,R0 
	.ENDM 
 
	.MACRO __GETBRSX 
	MOVW R30,R28 
	SUBI R30,LOW(-@1) 
	SBCI R31,HIGH(-@1) 
	LD   R@0,Z 
	.ENDM 
 
	.MACRO __GETWRSX 
	MOVW R30,R28 
	SUBI R30,LOW(-@2) 
	SBCI R31,HIGH(-@2) 
	LD   R@0,Z+ 
	LD   R@1,Z 
	.ENDM 
 
	.MACRO __LSLW8SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	LD   R31,Z 
	CLR  R30 
	.ENDM 
 
	.MACRO __PUTB1SX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1SX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1SX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	ST   X+,R30 
	ST   X+,R31 
	ST   X+,R22 
	ST   X,R23 
	.ENDM 
 
	.MACRO __CLRW1SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	CLR  R0 
	ST   Z+,R0 
	ST   Z,R0 
	.ENDM 
 
	.MACRO __CLRD1SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	CLR  R0 
	ST   Z+,R0 
	ST   Z+,R0 
	ST   Z+,R0 
	ST   Z,R0 
	.ENDM 
 
	.MACRO __PUTB2SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	ST   Z,R26 
	.ENDM 
 
	.MACRO __PUTW2SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	ST   Z+,R26 
	ST   Z,R27 
	.ENDM 
 
	.MACRO __PUTD2SX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	ST   Z+,R26 
	ST   Z+,R27 
	ST   Z+,R24 
	ST   Z,R25 
	.ENDM 
 
	.MACRO __PUTBSRX 
	MOVW R30,R28 
	SUBI R30,LOW(-@0) 
	SBCI R31,HIGH(-@0) 
	ST   Z,R@1 
	.ENDM 
 
	.MACRO __PUTWSRX 
	MOVW R30,R28 
	SUBI R30,LOW(-@2) 
	SBCI R31,HIGH(-@2) 
	ST   Z+,R@0 
	ST   Z,R@1 
	.ENDM 
 
	.MACRO __PUTB1SNX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	LD   R0,X+ 
	LD   R27,X 
	MOV  R26,R0 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X,R30 
	.ENDM 
 
	.MACRO __PUTW1SNX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	LD   R0,X+ 
	LD   R27,X 
	MOV  R26,R0 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X+,R30 
	ST   X,R31 
	.ENDM 
 
	.MACRO __PUTD1SNX 
	MOVW R26,R28 
	SUBI R26,LOW(-@0) 
	SBCI R27,HIGH(-@0) 
	LD   R0,X+ 
	LD   R27,X 
	MOV  R26,R0 
	SUBI R26,LOW(-@1) 
	SBCI R27,HIGH(-@1) 
	ST   X+,R30 
	ST   X+,R31 
	ST   X+,R22 
	ST   X,R23 
	.ENDM 
 
	.MACRO __MULBRR 
	MULS R@0,R@1 
	MOVW R30,R0 
	.ENDM 
 
	.MACRO __MULBRRU 
	MUL  R@0,R@1 
	MOVW R30,R0 
	.ENDM 
 
	.MACRO __MULBRR0 
	MULS R@0,R@1 
	.ENDM 
 
	.MACRO __MULBRRU0 
	MUL  R@0,R@1 
	.ENDM 
 
	.MACRO __MULBNWRU 
	LDI  R26,@2 
	MUL  R26,R@0 
	MOVW R30,R0 
	MUL  R26,R@1 
	ADD  R31,R0 
	.ENDM 
 
	.CSEG 
	.ORG 0 
 
	.INCLUDE "DS18b20.vec" 
	.INCLUDE "DS18b20.inc" 
 
__RESET: 
	CLI 
	CLR  R30 
	OUT  EECR,R30 
 
;INTERRUPT VECTORS ARE PLACED 
;AT THE START OF FLASH 
	LDI  R31,1 
	OUT  GICR,R31 
	OUT  GICR,R30 
	OUT  MCUCR,R30 
 
;DISABLE WATCHDOG 
	LDI  R31,0x18 
	OUT  WDTCR,R31 
	OUT  WDTCR,R30 
 
;CLEAR R2-R14 
	LDI  R24,13 
	LDI  R26,2 
	CLR  R27 
__CLEAR_REG: 
	ST   X+,R30 
	DEC  R24 
	BRNE __CLEAR_REG 
 
;CLEAR SRAM 
	LDI  R24,LOW(0x400) 
	LDI  R25,HIGH(0x400) 
	LDI  R26,0x60 
__CLEAR_SRAM: 
	ST   X+,R30 
	SBIW R24,1 
	BRNE __CLEAR_SRAM 
 
;GLOBAL VARIABLES INITIALIZATION 
	LDI  R30,LOW(__GLOBAL_INI_TBL*2) 
	LDI  R31,HIGH(__GLOBAL_INI_TBL*2) 
__GLOBAL_INI_NEXT: 
	LPM  R24,Z+ 
	LPM  R25,Z+ 
	SBIW R24,0 
	BREQ __GLOBAL_INI_END 
	LPM  R26,Z+ 
	LPM  R27,Z+ 
	LPM  R0,Z+ 
	LPM  R1,Z+ 
	MOVW R22,R30 
	MOVW R30,R0 
__GLOBAL_INI_LOOP: 
	LPM  R0,Z+ 
	ST   X+,R0 
	SBIW R24,1 
	BRNE __GLOBAL_INI_LOOP 
	MOVW R30,R22 
	RJMP __GLOBAL_INI_NEXT 
__GLOBAL_INI_END: 
 
;STACK POINTER INITIALIZATION 
	LDI  R30,LOW(0x45F) 
	OUT  SPL,R30 
	LDI  R30,HIGH(0x45F) 
	OUT  SPH,R30 
 
;DATA STACK POINTER INITIALIZATION 
	LDI  R28,LOW(0x160) 
	LDI  R29,HIGH(0x160) 
 
	JMP  _main 
 
	.ESEG 
	.ORG 0 
 
	.DSEG 
	.ORG 0x160 
;       1 /***************************************************** 
;       2 This program was produced by the 
;       3 CodeWizardAVR V1.25.5 Professional 
;       4 Automatic Program Generator 
;       5 © Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. 
;       6 http://www.hpinfotech.com 
;       7  
;       8 Project : 
;       9 Version : 
;      10 Date    : 2008-1-22 
;      11 Author  : sy606 
;      12 Company : sy606 
;      13 Comments: 
;      14  
;      15  
;      16 Chip type           : ATmega16 
;      17 Program type        : Application 
;      18 Clock frequency     : 8.000000 MHz 
;      19 Memory model        : Small 
;      20 External SRAM size  : 0 
;      21 Data Stack size     : 256 
;      22 *****************************************************/ 
;      23  
;      24 #include  
;      25 	#ifndef __SLEEP_DEFINED__ 
	#ifndef __SLEEP_DEFINED__ 
;      26 	#define __SLEEP_DEFINED__ 
	#define __SLEEP_DEFINED__ 
;      27 	.EQU __se_bit=0x40 
	.EQU __se_bit=0x40 
;      28 	.EQU __sm_mask=0xB0 
	.EQU __sm_mask=0xB0 
;      29 	.EQU __sm_powerdown=0x20 
	.EQU __sm_powerdown=0x20 
;      30 	.EQU __sm_powersave=0x30 
	.EQU __sm_powersave=0x30 
;      31 	.EQU __sm_standby=0xA0 
	.EQU __sm_standby=0xA0 
;      32 	.EQU __sm_ext_standby=0xB0 
	.EQU __sm_ext_standby=0xB0 
;      33 	.EQU __sm_adc_noise_red=0x10 
	.EQU __sm_adc_noise_red=0x10 
;      34 	.SET power_ctrl_reg=mcucr 
	.SET power_ctrl_reg=mcucr 
;      35 	#endif 
	#endif 
;      36  
;      37 // 1 Wire Bus functions 
;      38 #asm 
;      39    .equ __w1_port=0x1B ;PORTA 
   .equ __w1_port=0x1B ;PORTA 
;      40    .equ __w1_bit=6 
   .equ __w1_bit=6 
;      41 #endasm 
;      42 #include <1wire.h> 
;      43  
;      44 // DS1820 Temperature Sensor functions 
;      45 #include  
;      46  
;      47 // Alphanumeric LCD Module functions 
;      48 #asm 
;      49    .equ __lcd_port=0x15 ;PORTC 
   .equ __lcd_port=0x15 ;PORTC 
;      50 #endasm 
;      51 #include  
;      52 #include  
;      53 #include 
;      54 #include 
;      55 // Declare your global variables here 
;      56 #define MAX_DEVICES 8 
;      57  
;      58 unsigned char rom_code[MAX_DEVICES][9]; 
_rom_code: 
	.BYTE 0x48 
;      59 char lcd_buffer[33]; 
_lcd_buffer: 
	.BYTE 0x21 
;      60  
;      61 void main(void) 
;      62 { 
 
	.CSEG 
_main: 
;      63 unsigned char i,j,devices; 
;      64 int temp; 
;      65 // Declare your local variables here 
;      66  
;      67 // Input/Output Ports initialization 
;      68 // Port A initialization 
;      69 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
;      70 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
;      71 PORTA=0x00; 
;	i -> R17 
;	j -> R16 
;	devices -> R19 
;	temp -> R20,R21 
	LDI  R30,LOW(0) 
	OUT  0x1B,R30 
;      72 DDRA=0x00; 
	OUT  0x1A,R30 
;      73  
;      74 // Port B initialization 
;      75 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
;      76 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
;      77 PORTB=0x00; 
	OUT  0x18,R30 
;      78 DDRB=0x00; 
	OUT  0x17,R30 
;      79  
;      80 // Port C initialization 
;      81 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
;      82 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
;      83 PORTC=0x00; 
	OUT  0x15,R30 
;      84 DDRC=0x00; 
	OUT  0x14,R30 
;      85  
;      86 // Port D initialization 
;      87 // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
;      88 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
;      89 PORTD=0x00; 
	OUT  0x12,R30 
;      90 DDRD=0x00; 
	OUT  0x11,R30 
;      91  
;      92 // Timer/Counter 0 initialization 
;      93 // Clock source: System Clock 
;      94 // Clock value: Timer 0 Stopped 
;      95 // Mode: Normal top=FFh 
;      96 // OC0 output: Disconnected 
;      97 TCCR0=0x00; 
	OUT  0x33,R30 
;      98 TCNT0=0x00; 
	OUT  0x32,R30 
;      99 OCR0=0x00; 
	OUT  0x3C,R30 
;     100  
;     101 // Timer/Counter 1 initialization 
;     102 // Clock source: System Clock 
;     103 // Clock value: Timer 1 Stopped 
;     104 // Mode: Normal top=FFFFh 
;     105 // OC1A output: Discon. 
;     106 // OC1B output: Discon. 
;     107 // Noise Canceler: Off 
;     108 // Input Capture on Falling Edge 
;     109 // Timer 1 Overflow Interrupt: Off 
;     110 // Input Capture Interrupt: Off 
;     111 // Compare A Match Interrupt: Off 
;     112 // Compare B Match Interrupt: Off 
;     113 TCCR1A=0x00; 
	OUT  0x2F,R30 
;     114 TCCR1B=0x00; 
	OUT  0x2E,R30 
;     115 TCNT1H=0x00; 
	OUT  0x2D,R30 
;     116 TCNT1L=0x00; 
	OUT  0x2C,R30 
;     117 ICR1H=0x00; 
	OUT  0x27,R30 
;     118 ICR1L=0x00; 
	OUT  0x26,R30 
;     119 OCR1AH=0x00; 
	OUT  0x2B,R30 
;     120 OCR1AL=0x00; 
	OUT  0x2A,R30 
;     121 OCR1BH=0x00; 
	OUT  0x29,R30 
;     122 OCR1BL=0x00; 
	OUT  0x28,R30 
;     123  
;     124 // Timer/Counter 2 initialization 
;     125 // Clock source: System Clock 
;     126 // Clock value: Timer 2 Stopped 
;     127 // Mode: Normal top=FFh 
;     128 // OC2 output: Disconnected 
;     129 ASSR=0x00; 
	OUT  0x22,R30 
;     130 TCCR2=0x00; 
	OUT  0x25,R30 
;     131 TCNT2=0x00; 
	OUT  0x24,R30 
;     132 OCR2=0x00; 
	OUT  0x23,R30 
;     133  
;     134 // External Interrupt(s) initialization 
;     135 // INT0: Off 
;     136 // INT1: Off 
;     137 // INT2: Off 
;     138 MCUCR=0x00; 
	OUT  0x35,R30 
;     139 MCUCSR=0x00; 
	OUT  0x34,R30 
;     140  
;     141 // Timer(s)/Counter(s) Interrupt(s) initialization 
;     142 TIMSK=0x00; 
	OUT  0x39,R30 
;     143  
;     144 // Analog Comparator initialization 
;     145 // Analog Comparator: Off 
;     146 // Analog Comparator Input Capture by Timer/Counter 1: Off 
;     147 ACSR=0x80; 
	LDI  R30,LOW(128) 
	OUT  0x8,R30 
;     148 SFIOR=0x00; 
	LDI  R30,LOW(0) 
	OUT  0x30,R30 
;     149  
;     150 // 1 Wire Bus initialization 
;     151 w1_init(); 
	CALL _w1_init 
;     152  
;     153 // LCD module initialization 
;     154 lcd_init(16); 
	LDI  R30,LOW(16) 
	ST   -Y,R30 
	CALL _lcd_init 
;     155 lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo"); 
	__POINTW1FN _0,0 
	ST   -Y,R31 
	ST   -Y,R30 
	CALL _lcd_putsf 
;     156         delay_ms(2000); 
	LDI  R30,LOW(2000) 
	LDI  R31,HIGH(2000) 
	CALL SUBOPT_0x0 
;     157         lcd_clear(); 
	CALL _lcd_clear 
;     158  
;     159  
;     160  
;     161         devices=w1_search(0xf0,rom_code); 
	LDI  R30,LOW(240) 
	ST   -Y,R30 
	LDI  R30,LOW(_rom_code) 
	LDI  R31,HIGH(_rom_code) 
	ST   -Y,R31 
	ST   -Y,R30 
	CALL _w1_search 
	MOV  R19,R30 
;     162         sprintf(lcd_buffer,"%-u DEVICE(S) DETECTED\n\r",devices); 
	CALL SUBOPT_0x1 
	__POINTW1FN _0,30 
	ST   -Y,R31 
	ST   -Y,R30 
	MOV  R30,R19 
	CALL SUBOPT_0x2 
	LDI  R24,4 
	CALL _sprintf 
	ADIW R28,8 
;     163         lcd_clear(); 
	CALL _lcd_clear 
;     164         lcd_puts(lcd_buffer); 
	CALL SUBOPT_0x1 
	CALL SUBOPT_0x3 
;     165         delay_ms(500); 
;     166 while (1) 
_0x3: 
;     167       { 
;     168         for(i=0;i