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