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 : ATmega8515
;Program type : Application
;Clock frequency : 3.686400 MHz
;Memory model : Small
;Optimize for : Size
;(s)printf features : float, width, precision
;(s)scanf features : int, width
;External SRAM size : 0
;Data Stack size : 128 byte(s)
;Heap size : 0 byte(s)
;Promote char to int : No
;char is unsigned : Yes
;8 bit enums : Yes
;Word align FLASH struct: Yes
;Enhanced core instructions : On
;Smart register allocation : On
;Automatic register allocation : On
#pragma AVRPART ADMIN PART_NAME ATmega8515
#pragma AVRPART MEMORY PROG_FLASH 8192
#pragma AVRPART MEMORY EEPROM 512
#pragma AVRPART MEMORY INT_SRAM SIZE 512
#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 MCUCSR=0x34
.EQU MCUCR=0x35
.EQU EMCUCR=0x36
.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)
RCALL __GETW1PF
ICALL
.ENDM
.MACRO __CALL2EN
LDI R26,LOW(@0+@1)
LDI R27,HIGH(@0+@1)
RCALL __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)
RCALL __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
RCALL __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)
RCALL __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
RCALL __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)
RCALL __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
RCALL __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)
RCALL __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
RCALL __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
OUT EMCUCR,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(0x200)
LDI R25,HIGH(0x200)
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(0x25F)
OUT SPL,R30
LDI R30,HIGH(0x25F)
OUT SPH,R30
;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0xE0)
LDI R29,HIGH(0xE0)
RJMP _main
.ESEG
.ORG 0
.DB 0 ; FIRST EEPROM LOCATION NOT USED, SEE ATMEL ERRATA SHEETS
.DSEG
.ORG 0xE0
; 1 /* Multipoint thermometer with LCD display
; 2 using the Maxim DS18B20
; 3 1 Wire bus temperature sensors
; 4
; 5 CodeVisionAVR C Compiler
; 6 (C) 2000-2005 HP InfoTech S.R.L.
; 7 www.hpinfotech.ro
; 8
; 9 Chip: ATmega8515
; 10 Memory Model: SMALL
; 11 Data Stack Size: 128 bytes
; 12
; 13 PLEASE MAKE SURE THAT THE CKSEL0..3 FUSE
; 14 BITS ARE PROGRAMMED TO USE THE EXTERNAL
; 15 3.6864MHz CLOCK SOURCE OF THE STK500 AND NOT
; 16 THE INTERNAL 1MHz OSCILLATOR.
; 17 The ATmega8515 chip comes from the factory
; 18 with CKSEL0..3 fuse bits set to use the
; 19 internal 1 MHz oscillator.
; 20
; 21 The DS18B20 sensors are connected to
; 22 bit 6 of PORTA of the ATmega8515 as follows:
; 23
; 24 [DS18B20] [STK500 PORTA HEADER]
; 25 1 GND - 9 GND
; 26 2 DQ - 7 PA6
; 27 3 VDD - 10 +5V
; 28
; 29 All the temperature sensors must be connected
; 30 in parallel
; 31
; 32 AN 4.7k PULLUP RESISTOR MUST BE CONNECTED
; 33 BETWEEN DQ (PA6) AND +5V !
; 34 */
; 35 #asm
; 36 .equ __w1_port=0x1b
.equ __w1_port=0x1b
; 37 .equ __w1_bit=6
.equ __w1_bit=6
; 38 #endasm
; 39
; 40 /* Use an 2x16 alphanumeric LCD connected
; 41 to PORTC as follows:
; 42
; 43 [LCD] [STK500 PORTC HEADER]
; 44 1 GND- 9 GND
; 45 2 +5V- 10 VCC
; 46 3 VLC- LCD contrast control voltage 0..1V
; 47 4 RS - 1 PC0
; 48 5 RD - 2 PC1
; 49 6 EN - 3 PC2
; 50 11 D4 - 5 PC4
; 51 12 D5 - 6 PC5
; 52 13 D6 - 7 PC6
; 53 14 D7 - 8 PC7
; 54 */
; 55
; 56 #asm
; 57 .equ __lcd_port=0x15
.equ __lcd_port=0x15
; 58 #endasm
; 59
; 60 #include // LCD driver routines
; 61 #include
; 62 #include
; 63 #include
; 64
; 65 char lcd_buffer[33];
_lcd_buffer:
.BYTE 0x21
; 66
; 67 /* maximum number of DS18B20 connected to the 1 Wire bus */
; 68 #define MAX_DEVICES 8
; 69
; 70 /* DS18B20 devices ROM code storage area */
; 71 unsigned char rom_code[MAX_DEVICES][9];
_rom_code:
.BYTE 0x48
; 72
; 73 main()
; 74 {
.CSEG
_main:
; 75 unsigned char i,j,devices;
; 76 float tmp;
; 77 lcd_init(16);
SBIW R28,4
; i -> R17
; j -> R16
; devices -> R19
; tmp -> Y+0
LDI R30,LOW(16)
ST -Y,R30
RCALL _lcd_init
; 78 lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo");
__POINTW1FN _0,0
RCALL SUBOPT_0x0
RCALL _lcd_putsf
; 79 delay_ms(200);
LDI R30,LOW(200)
LDI R31,HIGH(200)
RCALL SUBOPT_0x1
; 80 lcd_clear();
RCALL _lcd_clear
; 81
; 82 /* detect how many DS18B20 devices
; 83 are connected to the 1 Wire bus */
; 84 devices=w1_search(0xf0,rom_code);
LDI R30,LOW(240)
ST -Y,R30
LDI R30,LOW(_rom_code)
LDI R31,HIGH(_rom_code)
RCALL SUBOPT_0x0
RCALL _w1_search
MOV R19,R30
; 85 sprintf(lcd_buffer,"%u DS18B20\nDevice detected",devices);
RCALL SUBOPT_0x2
__POINTW1FN _0,30
RCALL SUBOPT_0x0
MOV R30,R19
RCALL SUBOPT_0x3
; 86 lcd_puts(lcd_buffer);
RCALL SUBOPT_0x2
RCALL SUBOPT_0x4
; 87 delay_ms(800);
; 88
; 89 /* display the ROM codes for each device */
; 90 if (devices)
CPI R19,0
BREQ _0x3
; 91 {
; 92 for (i=0;i125)
__GETD2S 0
__GETD1N 0x42FA0000
RCALL __CMPF12
BREQ PC+2
BRCC PC+2
RJMP _0x1C
; 130 sprintf(lcd_buffer,"t%u=%+.3f\xdfC",i+1,tmp-4096);
RCALL SUBOPT_0x2
__POINTW1FN _0,113
RCALL SUBOPT_0x5
RCALL SUBOPT_0x7
__GETD2S 8
__GETD1N 0x45800000
RCALL SUBOPT_0x8
RJMP _0x13A
; 131 else
_0x1C:
; 132 sprintf(lcd_buffer,"t%u=%+.3f\xdfC",i+1,tmp);
RCALL SUBOPT_0x2
__POINTW1FN _0,113
RCALL SUBOPT_0x5
RCALL SUBOPT_0x7
__GETD1S 8
_0x13A:
RCALL __PUTPARD1
LDI R24,8
RCALL _sprintf
ADIW R28,12
; 133 lcd_clear();
RCALL _lcd_clear
; 134 lcd_puts(lcd_buffer);
RCALL SUBOPT_0x2
RCALL _lcd_puts
; 135 delay_ms(1000);
LDI R30,LOW(1000)
LDI R31,HIGH(1000)
RCALL SUBOPT_0x1
; 136 };
SUBI R17,-1
RJMP _0x1A
_0x1B:
; 137 };
RJMP _0x16
; 138 }
_0x1E:
NOP
RJMP _0x1E
.equ __lcd_direction=__lcd_port-1
.equ __lcd_pin=__lcd_port-2
.equ __lcd_rs=0
.equ __lcd_rd=1
.equ __lcd_enable=2
.equ __lcd_busy_flag=7
.DSEG
__base_y_G2:
.BYTE 0x4
.CSEG
__lcd_delay_G2:
ldi r31,15
__lcd_delay0:
dec r31
brne __lcd_delay0
RET
__lcd_ready:
in r26,__lcd_direction
andi r26,0xf ;set as input
out __lcd_direction,r26
sbi __lcd_port,__lcd_rd ;RD=1
cbi __lcd_port,__lcd_rs ;RS=0
__lcd_busy:
RCALL __lcd_delay_G2
sbi __lcd_port,__lcd_enable ;EN=1
RCALL __lcd_delay_G2
in r26,__lcd_pin
cbi __lcd_port,__lcd_enable ;EN=0
RCALL __lcd_delay_G2
sbi __lcd_port,__lcd_enable ;EN=1
RCALL __lcd_delay_G2
cbi __lcd_port,__lcd_enable ;EN=0
sbrc r26,__lcd_busy_flag
rjmp __lcd_busy
RET
__lcd_write_nibble_G2:
andi r26,0xf0
or r26,r27
out __lcd_port,r26 ;write
sbi __lcd_port,__lcd_enable ;EN=1
RCALL __lcd_delay_G2
cbi __lcd_port,__lcd_enable ;EN=0
RCALL __lcd_delay_G2
RET
__lcd_write_data:
cbi __lcd_port,__lcd_rd ;RD=0
in r26,__lcd_direction
ori r26,0xf0 | (1<<__lcd_rs) | (1<<__lcd_rd) | (1<<__lcd_enable) ;set as output
out __lcd_direction,r26
in r27,__lcd_port
andi r27,0xf
ld r26,y
RCALL __lcd_write_nibble_G2
ld r26,y
swap r26
RCALL __lcd_write_nibble_G2
sbi __lcd_port,__lcd_rd ;RD=1
ADIW R28,1
RET
__lcd_read_nibble_G2:
sbi __lcd_port,__lcd_enable ;EN=1
RCALL __lcd_delay_G2
in r30,__lcd_pin ;read
cbi __lcd_port,__lcd_enable ;EN=0
RCALL __lcd_delay_G2
andi r30,0xf0
RET
_lcd_read_byte0_G2:
RCALL __lcd_delay_G2
RCALL __lcd_read_nibble_G2
mov r26,r30
RCALL __lcd_read_nibble_G2
cbi __lcd_port,__lcd_rd ;RD=0
swap r30
or r30,r26
RET
_lcd_gotoxy:
RCALL __lcd_ready
LD R30,Y
RCALL SUBOPT_0x9
SUBI R30,LOW(-__base_y_G2)
SBCI R31,HIGH(-__base_y_G2)
LD R30,Z
LDD R26,Y+1
ADD R30,R26
RCALL SUBOPT_0xA
LDD R5,Y+1
LDD R4,Y+0
ADIW R28,2
RET
_lcd_clear:
RCALL __lcd_ready
LDI R30,LOW(2)
RCALL SUBOPT_0xA
RCALL __lcd_ready
LDI R30,LOW(12)
RCALL SUBOPT_0xA
RCALL __lcd_ready
LDI R30,LOW(1)
RCALL SUBOPT_0xA
LDI R30,LOW(0)
MOV R4,R30
MOV R5,R30
RET
_lcd_putchar:
push r30
push r31
ld r26,y
set
cpi r26,10
breq __lcd_putchar1
clt
INC R5
CP R7,R5
BRSH _0x20
__lcd_putchar1:
INC R4
LDI R30,LOW(0)
ST -Y,R30
ST -Y,R4
RCALL _lcd_gotoxy
brts __lcd_putchar0
_0x20:
rcall __lcd_ready
sbi __lcd_port,__lcd_rs ;RS=1
ld r26,y
st -y,r26
rcall __lcd_write_data
__lcd_putchar0:
pop r31
pop r30
ADIW R28,1
RET
_lcd_puts:
ST -Y,R17
_0x21:
RCALL SUBOPT_0xB
MOV R17,R30
CPI R30,0
BREQ _0x23
ST -Y,R17
RCALL _lcd_putchar
RJMP _0x21
_0x23:
LDD R17,Y+0
RJMP _0x139
_lcd_putsf:
ST -Y,R17
_0x24:
RCALL SUBOPT_0xC
ADIW R30,1
STD Y+1,R30
STD Y+1+1,R31
SBIW R30,1
LPM R30,Z
MOV R17,R30
CPI R30,0
BREQ _0x26
ST -Y,R17
RCALL _lcd_putchar
RJMP _0x24
_0x26:
LDD R17,Y+0
_0x139:
ADIW R28,3
RET
__long_delay_G2:
clr r26
clr r27
__long_delay0:
sbiw r26,1 ;2 cycles
brne __long_delay0 ;2 cycles
RET
__lcd_init_write_G2:
cbi __lcd_port,__lcd_rd ;RD=0
in r26,__lcd_direction
ori r26,0xf7 ;set as output
out __lcd_direction,r26
in r27,__lcd_port
andi r27,0xf
ld r26,y
RCALL __lcd_write_nibble_G2
sbi __lcd_port,__lcd_rd ;RD=1
ADIW R28,1
RET
_lcd_init:
cbi __lcd_port,__lcd_enable ;EN=0
cbi __lcd_port,__lcd_rs ;RS=0
LDD R7,Y+0
LD R30,Y
SUBI R30,-LOW(128)
__PUTB1MN __base_y_G2,2
LD R30,Y
SUBI R30,-LOW(192)
__PUTB1MN __base_y_G2,3
RCALL SUBOPT_0xD
RCALL SUBOPT_0xD
RCALL SUBOPT_0xD
RCALL __long_delay_G2
LDI R30,LOW(32)
ST -Y,R30
RCALL __lcd_init_write_G2
RCALL __long_delay_G2
LDI R30,LOW(40)
RCALL SUBOPT_0xA
RCALL __long_delay_G2
LDI R30,LOW(4)
RCALL SUBOPT_0xA
RCALL __long_delay_G2
LDI R30,LOW(133)
RCALL SUBOPT_0xA
RCALL __long_delay_G2
in r26,__lcd_direction
andi r26,0xf ;set as input
out __lcd_direction,r26
sbi __lcd_port,__lcd_rd ;RD=1
RCALL _lcd_read_byte0_G2
CPI R30,LOW(0x5)
BREQ _0x27
LDI R30,LOW(0)
RJMP _0x138
_0x27:
RCALL __lcd_ready
LDI R30,LOW(6)
RCALL SUBOPT_0xA
RCALL _lcd_clear
LDI R30,LOW(1)
_0x138:
ADIW R28,1
RET
.DSEG
___ds18b20_scratch_pad:
.BYTE 0x9
.CSEG
_ds18b20_select:
ST -Y,R17
RCALL _w1_init
CPI R30,0
BRNE _0x28
LDI R30,LOW(0)
LDD R17,Y+0
RJMP _0x136
_0x28:
RCALL SUBOPT_0xC
SBIW R30,0
BREQ _0x29
LDI R30,LOW(85)
RCALL SUBOPT_0xE
LDI R17,LOW(0)
_0x2B:
RCALL SUBOPT_0xB
RCALL SUBOPT_0xE
SUBI R17,-LOW(1)
CPI R17,8
BRLO _0x2B
RJMP _0x2D
_0x29:
LDI R30,LOW(204)
RCALL SUBOPT_0xE
_0x2D:
LDI R30,LOW(1)
LDD R17,Y+0
RJMP _0x136
_ds18b20_read_spd:
RCALL __SAVELOCR4
LDD R30,Y+4
LDD R31,Y+4+1
RCALL SUBOPT_0xF
BRNE _0x2E
LDI R30,LOW(0)
RJMP _0x137
_0x2E:
LDI R30,LOW(190)
RCALL SUBOPT_0xE
LDI R17,LOW(0)
__POINTWRM 18,19,___ds18b20_scratch_pad
_0x30:
PUSH R19
PUSH R18
__ADDWRN 18,19,1
RCALL _w1_read
POP R26
POP R27
ST X,R30
SUBI R17,-LOW(1)
CPI R17,9
BRLO _0x30
LDI R30,LOW(___ds18b20_scratch_pad)
LDI R31,HIGH(___ds18b20_scratch_pad)
RCALL SUBOPT_0x0
LDI R30,LOW(9)
ST -Y,R30
RCALL _w1_dow_crc8
RCALL __LNEGB1
_0x137:
RCALL __LOADLOCR4
ADIW R28,6
RET
_ds18b20_temperature:
ST -Y,R17
RCALL SUBOPT_0x10
BRNE _0x32
RCALL SUBOPT_0x11
RJMP _0x136
_0x32:
__GETB1MN ___ds18b20_scratch_pad,4
SWAP R30
ANDI R30,0xF
LSR R30
ANDI R30,LOW(0x3)
MOV R17,R30
RCALL SUBOPT_0xC
RCALL SUBOPT_0xF
BRNE _0x33
RCALL SUBOPT_0x11
RJMP _0x136
_0x33:
LDI R30,LOW(68)
RCALL SUBOPT_0xE
MOV R30,R17
LDI R26,LOW(_conv_delay_G3*2)
LDI R27,HIGH(_conv_delay_G3*2)
RCALL SUBOPT_0x12
RCALL SUBOPT_0x1
RCALL SUBOPT_0x10
BRNE _0x34
RCALL SUBOPT_0x11
RJMP _0x136
_0x34:
RCALL _w1_init
MOV R30,R17
LDI R26,LOW(_bit_mask_G3*2)
LDI R27,HIGH(_bit_mask_G3*2)
RCALL SUBOPT_0x12
LDS R26,___ds18b20_scratch_pad
LDS R27,___ds18b20_scratch_pad+1
AND R30,R26
AND R31,R27
CLR R22
CLR R23
RCALL __CDF1
__GETD2N 0x3D800000
RCALL __MULF12
LDD R17,Y+0
_0x136:
ADIW R28,3
RET
_ds18b20_init:
LDD R30,Y+3
LDD R31,Y+3+1
RCALL SUBOPT_0xF
BRNE _0x35
LDI R30,LOW(0)
RJMP _0x135
_0x35:
LD R30,Y
SWAP R30
ANDI R30,0xF0
LSL R30
ORI R30,LOW(0x1F)
ST Y,R30
LDI R30,LOW(78)
RCALL SUBOPT_0xE
LDD R30,Y+1
RCALL SUBOPT_0xE
LDD R30,Y+2
RCALL SUBOPT_0xE
LD R30,Y
RCALL SUBOPT_0xE
LDD R30,Y+3
LDD R31,Y+3+1
RCALL SUBOPT_0x0
RCALL _ds18b20_read_spd
CPI R30,0
BRNE _0x36
LDI R30,LOW(0)
RJMP _0x135
_0x36:
__GETB2MN ___ds18b20_scratch_pad,3
LDD R30,Y+2
CP R30,R26
BRNE _0x38
__GETB2MN ___ds18b20_scratch_pad,2
LDD R30,Y+1
CP R30,R26
BRNE _0x38
__GETB2MN ___ds18b20_scratch_pad,4
LD R30,Y
CP R30,R26
BREQ _0x37
_0x38:
LDI R30,LOW(0)
RJMP _0x135
_0x37:
LDD R30,Y+3
LDD R31,Y+3+1
RCALL SUBOPT_0xF
BRNE _0x3A
LDI R30,LOW(0)
RJMP _0x135
_0x3A:
LDI R30,LOW(72)
RCALL SUBOPT_0xE
LDI R30,LOW(15)
LDI R31,HIGH(15)
RCALL SUBOPT_0x1
RCALL _w1_init
_0x135:
ADIW R28,5
RET
#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x20
.SET power_ctrl_reg=mcucr
#endif
_getchar:
sbis usr,rxc
rjmp _getchar
in r30,udr
RET
_putchar:
sbis usr,udre
rjmp _putchar
ld r30,y
out udr,r30
ADIW R28,1
RET
__put_G4:
RCALL __SAVELOCR2
LDD R26,Y+4
LDD R27,Y+4+1
RCALL __GETW1P
SBIW R30,0
BREQ _0x3B
LDD R26,Y+2
LDD R27,Y+2+1
RCALL __GETW1P
MOVW R16,R30
SBIW R30,0
BREQ _0x3D
__CPWRN 16,17,2
BRLO _0x3E
MOVW R30,R16
SBIW R30,1
MOVW R16,R30
ST X+,R30
ST X,R31
_0x3D:
LDD R26,Y+4
LDD R27,Y+4+1
RCALL SUBOPT_0x13
LDD R26,Y+6
STD Z+0,R26
_0x3E:
RJMP _0x3F
_0x3B:
LDD R30,Y+6
ST -Y,R30
RCALL _putchar
_0x3F:
RCALL __LOADLOCR2
ADIW R28,7
RET
__ftoa_G4:
SBIW R28,4
RCALL __SAVELOCR2
LDD R26,Y+8
CPI R26,LOW(0x7)
BRLO _0x40
LDI R30,LOW(6)
STD Y+8,R30
_0x40:
LDD R30,Y+8
LDI R26,LOW(__fround_G4*2)
LDI R27,HIGH(__fround_G4*2)
RCALL SUBOPT_0x9
RCALL __LSLW2
ADD R30,R26
ADC R31,R27
RCALL __GETD1PF
RCALL SUBOPT_0x14
RCALL __ADDF12
RCALL SUBOPT_0x15
LDI R17,LOW(0)
RCALL SUBOPT_0x16
RCALL SUBOPT_0x17
_0x41:
RCALL SUBOPT_0x18
RCALL __CMPF12
BRLO _0x43
RCALL SUBOPT_0x19
RCALL __MULF12
RCALL SUBOPT_0x17
SUBI R17,-LOW(1)
RJMP _0x41
_0x43:
CPI R17,0
BRNE _0x44
RCALL SUBOPT_0x1A
LDI R30,LOW(48)
ST X,R30
RJMP _0x45
_0x44:
_0x46:
MOV R30,R17
SUBI R17,1
CPI R30,0
BREQ _0x48
RCALL SUBOPT_0x19
RCALL SUBOPT_0x1B
RCALL SUBOPT_0x17
RCALL SUBOPT_0x18
RCALL __DIVF21
RCALL __CFD1
MOV R16,R30
RCALL SUBOPT_0x1A
RCALL SUBOPT_0x1C
__GETD2S 2
RCALL SUBOPT_0x1D
RCALL __MULF12
RCALL SUBOPT_0x14
RCALL SUBOPT_0x8
RCALL SUBOPT_0x15
RJMP _0x46
_0x48:
_0x45:
LDD R30,Y+8
CPI R30,0
BRNE _0x49
RCALL SUBOPT_0x1E
RJMP _0x134
_0x49:
RCALL SUBOPT_0x1A
LDI R30,LOW(46)
ST X,R30
_0x4A:
LDD R30,Y+8
SUBI R30,LOW(1)
STD Y+8,R30
SUBI R30,-LOW(1)
BREQ _0x4C
RCALL SUBOPT_0x14
RCALL SUBOPT_0x1F
RCALL SUBOPT_0x15
__GETD1S 9
RCALL __CFD1U
MOV R16,R30
RCALL SUBOPT_0x1A
RCALL SUBOPT_0x1C
RCALL SUBOPT_0x14
RCALL SUBOPT_0x1D
RCALL SUBOPT_0x8
RCALL SUBOPT_0x15
RJMP _0x4A
_0x4C:
RCALL SUBOPT_0x1E
_0x134:
RCALL __LOADLOCR2
ADIW R28,13
RET
__ftoe_G4:
SBIW R28,4
RCALL __SAVELOCR4
RCALL SUBOPT_0x16
RCALL SUBOPT_0x20
LDD R26,Y+11
CPI R26,LOW(0x7)
BRLO _0x4D
LDI R30,LOW(6)
STD Y+11,R30
_0x4D:
LDD R17,Y+11
_0x4E:
MOV R30,R17
SUBI R17,1
CPI R30,0
BREQ _0x50
RCALL SUBOPT_0x21
RCALL SUBOPT_0x20
RJMP _0x4E
_0x50:
RCALL SUBOPT_0x22
RCALL __CPD10
BRNE _0x51
LDI R19,LOW(0)
RCALL SUBOPT_0x21
RCALL SUBOPT_0x20
RJMP _0x52
_0x51:
LDD R19,Y+11
RCALL SUBOPT_0x23
BREQ PC+2
BRCC PC+2
RJMP _0x53
RCALL SUBOPT_0x21
RCALL SUBOPT_0x20
_0x54:
RCALL SUBOPT_0x23
BRLO _0x56
RCALL SUBOPT_0x24
RCALL SUBOPT_0x25
RJMP _0x54
_0x56:
RJMP _0x57
_0x53:
_0x58:
RCALL SUBOPT_0x23
BRSH _0x5A
RCALL SUBOPT_0x24
RCALL SUBOPT_0x1F
RCALL SUBOPT_0x26
SUBI R19,LOW(1)
RJMP _0x58
_0x5A:
RCALL SUBOPT_0x21
RCALL SUBOPT_0x20
_0x57:
RCALL SUBOPT_0x22
__GETD2N 0x3F000000
RCALL __ADDF12
RCALL SUBOPT_0x26
RCALL SUBOPT_0x23
BRLO _0x5B
RCALL SUBOPT_0x24
RCALL SUBOPT_0x25
_0x5B:
_0x52:
LDI R17,LOW(0)
_0x5C:
LDD R30,Y+11
CP R30,R17
BRLO _0x5E
RCALL SUBOPT_0x27
__GETD1N 0x41200000
RCALL SUBOPT_0x1B
RCALL SUBOPT_0x20
__GETD1S 4
RCALL SUBOPT_0x24
RCALL __DIVF21
RCALL __CFD1
MOV R16,R30
RCALL SUBOPT_0x28
RCALL SUBOPT_0x1C
RCALL SUBOPT_0x1D
RCALL SUBOPT_0x27
RCALL __MULF12
RCALL SUBOPT_0x24
RCALL SUBOPT_0x8
RCALL SUBOPT_0x26
MOV R30,R17
SUBI R17,-1
CPI R30,0
BRNE _0x5C
RCALL SUBOPT_0x28
LDI R30,LOW(46)
ST X,R30
RJMP _0x5C
_0x5E:
RCALL SUBOPT_0x29
LDD R26,Y+10
STD Z+0,R26
CPI R19,0
BRGE _0x60
RCALL SUBOPT_0x28
LDI R30,LOW(45)
ST X,R30
NEG R19
_0x60:
CPI R19,10
BRLT _0x61
RCALL SUBOPT_0x29
MOVW R22,R30
MOV R26,R19
LDI R30,LOW(10)
RCALL __DIVB21
SUBI R30,-LOW(48)
MOVW R26,R22
ST X,R30
_0x61:
RCALL SUBOPT_0x29
MOVW R22,R30
MOV R26,R19
LDI R30,LOW(10)
RCALL __MODB21
SUBI R30,-LOW(48)
MOVW R26,R22
ST X,R30
LDD R26,Y+8
LDD R27,Y+8+1
LDI R30,LOW(0)
ST X,R30
RCALL __LOADLOCR4
ADIW R28,16
RET
__print_G4:
SBIW R28,63
SBIW R28,15
RCALL __SAVELOCR6
LDI R17,0
__GETW1SX 84
STD Y+16,R30
STD Y+16+1,R31
_0x62:
MOVW R26,R28
SUBI R26,LOW(-(90))
SBCI R27,HIGH(-(90))
RCALL SUBOPT_0x13
LPM R30,Z
MOV R18,R30
CPI R30,0
BRNE PC+2
RJMP _0x64
MOV R30,R17
CPI R30,0
BRNE _0x68
CPI R18,37
BRNE _0x69
LDI R17,LOW(1)
RJMP _0x6A
_0x69:
RCALL SUBOPT_0x2A
_0x6A:
RJMP _0x67
_0x68:
CPI R30,LOW(0x1)
BRNE _0x6B
CPI R18,37
BRNE _0x6C
RCALL SUBOPT_0x2A
RJMP _0x13B
_0x6C:
LDI R17,LOW(2)
LDI R30,LOW(0)
STD Y+19,R30
LDI R16,LOW(0)
CPI R18,45
BRNE _0x6D
LDI R16,LOW(1)
RJMP _0x67
_0x6D:
CPI R18,43
BRNE _0x6E
LDI R30,LOW(43)
STD Y+19,R30
RJMP _0x67
_0x6E:
CPI R18,32
BRNE _0x6F
LDI R30,LOW(32)
STD Y+19,R30
RJMP _0x67
_0x6F:
RJMP _0x70
_0x6B:
CPI R30,LOW(0x2)
BRNE _0x71
_0x70:
LDI R21,LOW(0)
LDI R17,LOW(3)
CPI R18,48
BRNE _0x72
ORI R16,LOW(128)
RJMP _0x67
_0x72:
RJMP _0x73
_0x71:
CPI R30,LOW(0x3)
BRNE _0x74
_0x73:
CPI R18,48
BRLO _0x76
CPI R18,58
BRLO _0x77
_0x76:
RJMP _0x75
_0x77:
MOV R26,R21
LDI R30,LOW(10)
MUL R30,R26
MOVW R30,R0
MOV R21,R30
MOV R30,R18
SUBI R30,LOW(48)
ADD R21,R30
RJMP _0x67
_0x75:
LDI R20,LOW(0)
CPI R18,46
BRNE _0x78
LDI R17,LOW(4)
RJMP _0x67
_0x78:
RJMP _0x79
_0x74:
CPI R30,LOW(0x4)
BRNE _0x7B
CPI R18,48
BRLO _0x7D
CPI R18,58
BRLO _0x7E
_0x7D:
RJMP _0x7C
_0x7E:
ORI R16,LOW(32)
MOV R26,R20
LDI R30,LOW(10)
MUL R30,R26
MOVW R30,R0
MOV R20,R30
MOV R30,R18
SUBI R30,LOW(48)
ADD R20,R30
RJMP _0x67
_0x7C:
_0x79:
CPI R18,108
BRNE _0x7F
ORI R16,LOW(2)
LDI R17,LOW(5)
RJMP _0x67
_0x7F:
RJMP _0x80
_0x7B:
CPI R30,LOW(0x5)
BREQ PC+2
RJMP _0x67
_0x80:
MOV R30,R18
CPI R30,LOW(0x63)
BRNE _0x85
RCALL SUBOPT_0x2B
LDD R30,Z+4
RCALL SUBOPT_0x2C
RJMP _0x86
_0x85:
CPI R30,LOW(0x45)
BREQ _0x89
CPI R30,LOW(0x65)
BRNE _0x8A
_0x89:
RJMP _0x8B
_0x8A:
CPI R30,LOW(0x66)
BRNE _0x8C
_0x8B:
RCALL SUBOPT_0x2D
RCALL SUBOPT_0x2B
RCALL SUBOPT_0x2E
RCALL __GETD1P
RCALL SUBOPT_0x2F
MOVW R26,R30
MOVW R24,R22
RCALL __CPD20
BRLT _0x8D
LDD R26,Y+19
CPI R26,LOW(0x2B)
BREQ _0x8F
RJMP _0x90
_0x8D:
RCALL SUBOPT_0x30
RCALL __ANEGF1
RCALL SUBOPT_0x2F
LDI R30,LOW(45)
STD Y+19,R30
_0x8F:
SBRS R16,7
RJMP _0x91
LDD R30,Y+19
RCALL SUBOPT_0x2C
RJMP _0x92
_0x91:
RCALL SUBOPT_0x31
RCALL SUBOPT_0x32
LDD R26,Y+19
STD Z+0,R26
_0x92:
_0x90:
SBRS R16,5
LDI R20,LOW(6)
CPI R18,102
BRNE _0x94
RCALL SUBOPT_0x30
RCALL __PUTPARD1
ST -Y,R20
LDD R30,Y+15
LDD R31,Y+15+1
RCALL SUBOPT_0x0
RCALL __ftoa_G4
RJMP _0x95
_0x94:
RCALL SUBOPT_0x30
RCALL __PUTPARD1
ST -Y,R20
ST -Y,R18
LDD R30,Y+16
LDD R31,Y+16+1
RCALL SUBOPT_0x0
RCALL __ftoe_G4
_0x95:
RCALL SUBOPT_0x2D
RCALL SUBOPT_0x33
RJMP _0x96
_0x8C:
CPI R30,LOW(0x73)
BRNE _0x98
RCALL SUBOPT_0x2B
RCALL SUBOPT_0x2E
RCALL __GETW1P
STD Y+10,R30
STD Y+10+1,R31
RCALL SUBOPT_0x33
RJMP _0x99
_0x98:
CPI R30,LOW(0x70)
BRNE _0x9B
RCALL SUBOPT_0x2B
RCALL SUBOPT_0x2E
RCALL __GETW1P
STD Y+10,R30
STD Y+10+1,R31
RCALL SUBOPT_0x31
RCALL SUBOPT_0x0
RCALL _strlenf
MOV R17,R30
ORI R16,LOW(8)
_0x99:
ANDI R16,LOW(127)
CPI R20,0
BREQ _0x9D
CP R20,R17
BRLO _0x9E
_0x9D:
RJMP _0x9C
_0x9E:
MOV R17,R20
_0x9C:
_0x96:
LDI R20,LOW(0)
LDI R30,LOW(0)
STD Y+18,R30
LDI R19,LOW(0)
RJMP _0x9F
_0x9B:
CPI R30,LOW(0x64)
BREQ _0xA2
CPI R30,LOW(0x69)
BRNE _0xA3
_0xA2:
ORI R16,LOW(4)
RJMP _0xA4
_0xA3:
CPI R30,LOW(0x75)
BRNE _0xA5
_0xA4:
LDI R30,LOW(10)
STD Y+18,R30
SBRS R16,1
RJMP _0xA6
__GETD1N 0x3B9ACA00
RCALL SUBOPT_0x26
LDI R17,LOW(10)
RJMP _0xA7
_0xA6:
__GETD1N 0x2710
RCALL SUBOPT_0x26
LDI R17,LOW(5)
RJMP _0xA7
_0xA5:
CPI R30,LOW(0x58)
BRNE _0xA9
ORI R16,LOW(8)
RJMP _0xAA
_0xA9:
CPI R30,LOW(0x78)
BREQ PC+2
RJMP _0xE8
_0xAA:
LDI R30,LOW(16)
STD Y+18,R30
SBRS R16,1
RJMP _0xAC
__GETD1N 0x10000000
RCALL SUBOPT_0x26
LDI R17,LOW(8)
RJMP _0xA7
_0xAC:
__GETD1N 0x1000
RCALL SUBOPT_0x26
LDI R17,LOW(4)
_0xA7:
CPI R20,0
BREQ _0xAD
ANDI R16,LOW(127)
RJMP _0xAE
_0xAD:
LDI R20,LOW(1)
_0xAE:
SBRS R16,1
RJMP _0xAF
RCALL SUBOPT_0x2B
RCALL SUBOPT_0x2E
RCALL __GETD1P
RJMP _0x13C
_0xAF:
SBRS R16,2
RJMP _0xB1
RCALL SUBOPT_0x2B
RCALL SUBOPT_0x2E
RCALL __GETW1P
RCALL __CWD1
RJMP _0x13C
_0xB1:
RCALL SUBOPT_0x2B
RCALL SUBOPT_0x2E
RCALL __GETW1P
CLR R22
CLR R23
_0x13C:
__PUTD1S 6
SBRS R16,2
RJMP _0xB3
RCALL SUBOPT_0x34
RCALL __CPD20
BRGE _0xB4
RCALL SUBOPT_0x30
RCALL __ANEGD1
RCALL SUBOPT_0x2F
LDI R30,LOW(45)
STD Y+19,R30
_0xB4:
LDD R30,Y+19
CPI R30,0
BREQ _0xB5
SUBI R17,-LOW(1)
SUBI R20,-LOW(1)
RJMP _0xB6
_0xB5:
ANDI R16,LOW(251)
_0xB6:
_0xB3:
MOV R19,R20
_0x9F:
SBRC R16,0
RJMP _0xB7
_0xB8:
CP R17,R21
BRSH _0xBB
CP R19,R21
BRLO _0xBC
_0xBB:
RJMP _0xBA
_0xBC:
SBRS R16,7
RJMP _0xBD
SBRS R16,2
RJMP _0xBE
ANDI R16,LOW(251)
LDD R18,Y+19
SUBI R17,LOW(1)
RJMP _0xBF
_0xBE:
LDI R18,LOW(48)
_0xBF:
RJMP _0xC0
_0xBD:
LDI R18,LOW(32)
_0xC0:
RCALL SUBOPT_0x2A
SUBI R21,LOW(1)
RJMP _0xB8
_0xBA:
_0xB7:
_0xC1:
CP R17,R20
BRSH _0xC3
ORI R16,LOW(16)
SBRS R16,2
RJMP _0xC4
RCALL SUBOPT_0x35
BREQ _0xC5
SUBI R21,LOW(1)
_0xC5:
SUBI R17,LOW(1)
SUBI R20,LOW(1)
_0xC4:
LDI R30,LOW(48)
RCALL SUBOPT_0x2C
CPI R21,0
BREQ _0xC6
SUBI R21,LOW(1)
_0xC6:
SUBI R20,LOW(1)
RJMP _0xC1
_0xC3:
MOV R19,R17
LDD R30,Y+18
CPI R30,0
BRNE _0xC7
_0xC8:
CPI R19,0
BREQ _0xCA
SBRS R16,3
RJMP _0xCB
RCALL SUBOPT_0x31
RCALL SUBOPT_0x32
LPM R30,Z
RJMP _0x13D
_0xCB:
LDD R26,Y+10
LDD R27,Y+10+1
LD R30,X+
STD Y+10,R26
STD Y+10+1,R27
_0x13D:
ST -Y,R30
__GETW1SX 87
RCALL SUBOPT_0x0
MOVW R30,R28
ADIW R30,19
RCALL SUBOPT_0x0
RCALL __put_G4
CPI R21,0
BREQ _0xCD
SUBI R21,LOW(1)
_0xCD:
SUBI R19,LOW(1)
RJMP _0xC8
_0xCA:
RJMP _0xCE
_0xC7:
_0xD0:
RCALL SUBOPT_0x22
RCALL SUBOPT_0x34
RCALL __DIVD21U
MOV R18,R30
CPI R18,10
BRLO _0xD2
SBRS R16,3
RJMP _0xD3
SUBI R18,-LOW(55)
RJMP _0xD4
_0xD3:
SUBI R18,-LOW(87)
_0xD4:
RJMP _0xD5
_0xD2:
SUBI R18,-LOW(48)
_0xD5:
SBRC R16,4
RJMP _0xD7
CPI R18,49
BRSH _0xD9
RCALL SUBOPT_0x24
__CPD2N 0x1
BRNE _0xD8
_0xD9:
RJMP _0xDB
_0xD8:
CP R20,R19
BRSH _0x13E
CP R21,R19
BRLO _0xDE
SBRS R16,0
RJMP _0xDF
_0xDE:
RJMP _0xDD
_0xDF:
LDI R18,LOW(32)
SBRS R16,7
RJMP _0xE0
_0x13E:
LDI R18,LOW(48)
_0xDB:
ORI R16,LOW(16)
SBRS R16,2
RJMP _0xE1
RCALL SUBOPT_0x35
BREQ _0xE2
SUBI R21,LOW(1)
_0xE2:
_0xE1:
_0xE0:
_0xD7:
RCALL SUBOPT_0x2A
CPI R21,0
BREQ _0xE3
SUBI R21,LOW(1)
_0xE3:
_0xDD:
SUBI R19,LOW(1)
RCALL SUBOPT_0x22
RCALL SUBOPT_0x34
RCALL __MODD21U
RCALL SUBOPT_0x2F
LDD R30,Y+18
RCALL SUBOPT_0x24
CLR R31
CLR R22
CLR R23
RCALL __DIVD21U
RCALL SUBOPT_0x26
RCALL SUBOPT_0x22
RCALL __CPD10
BREQ _0xD1
RJMP _0xD0
_0xD1:
_0xCE:
SBRS R16,0
RJMP _0xE4
_0xE5:
CPI R21,0
BREQ _0xE7
SUBI R21,LOW(1)
LDI R30,LOW(32)
RCALL SUBOPT_0x2C
RJMP _0xE5
_0xE7:
_0xE4:
_0xE8:
_0x86:
_0x13B:
LDI R17,LOW(0)
_0x67:
RJMP _0x62
_0x64:
RCALL __LOADLOCR6
ADIW R28,63
ADIW R28,29
RET
_sprintf:
PUSH R15
MOV R15,R24
SBIW R28,2
RCALL __SAVELOCR2
MOVW R26,R28
RCALL __ADDW2R15
MOVW R16,R26
MOVW R26,R28
ADIW R26,6
RCALL __ADDW2R15
RCALL __GETW1P
STD Y+2,R30
STD Y+2+1,R31
MOVW R26,R28
ADIW R26,4
RCALL __ADDW2R15
RCALL __GETW1P
RCALL SUBOPT_0x0
ST -Y,R17
ST -Y,R16
MOVW R30,R28
ADIW R30,6
RCALL SUBOPT_0x0
LDI R30,LOW(0)
LDI R31,HIGH(0)
RCALL SUBOPT_0x0
RCALL __print_G4
LDD R26,Y+2
LDD R27,Y+2+1
LDI R30,LOW(0)
ST X,R30
RCALL __LOADLOCR2
ADIW R28,4
POP R15
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 66 TIMES, CODE SIZE REDUCTION:63 WORDS
SUBOPT_0x0:
ST -Y,R31
ST -Y,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 7 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x1:
RCALL SUBOPT_0x0
RJMP _delay_ms
;OPTIMIZER ADDED SUBROUTINE, CALLED 11 TIMES, CODE SIZE REDUCTION:18 WORDS
SUBOPT_0x2:
LDI R30,LOW(_lcd_buffer)
LDI R31,HIGH(_lcd_buffer)
RJMP SUBOPT_0x0
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:16 WORDS
SUBOPT_0x3:
CLR R31
CLR R22
CLR R23
RCALL __PUTPARD1
LDI R24,4
RCALL _sprintf
ADIW R28,8
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x4:
RCALL _lcd_puts
LDI R30,LOW(800)
LDI R31,HIGH(800)
RJMP SUBOPT_0x1
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x5:
RCALL SUBOPT_0x0
MOV R30,R17
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x6:
LDI R26,LOW(9)
MUL R17,R26
MOVW R30,R0
SUBI R30,LOW(-_rom_code)
SBCI R31,HIGH(-_rom_code)
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x7:
SUBI R30,-LOW(1)
CLR R31
CLR R22
CLR R23
RCALL __PUTPARD1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x8:
RCALL __SWAPD12
RCALL __SUBF12
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x9:
LDI R31,0
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 8 TIMES, CODE SIZE REDUCTION:5 WORDS
SUBOPT_0xA:
ST -Y,R30
RJMP __lcd_write_data
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0xB:
LDD R26,Y+1
LDD R27,Y+1+1
LD R30,X+
STD Y+1,R26
STD Y+1+1,R27
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0xC:
LDD R30,Y+1
LDD R31,Y+1+1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0xD:
RCALL __long_delay_G2
LDI R30,LOW(48)
ST -Y,R30
RJMP __lcd_init_write_G2
;OPTIMIZER ADDED SUBROUTINE, CALLED 10 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0xE:
ST -Y,R30
RJMP _w1_write
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0xF:
RCALL SUBOPT_0x0
RCALL _ds18b20_select
CPI R30,0
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x10:
RCALL SUBOPT_0xC
RCALL SUBOPT_0x0
RCALL _ds18b20_read_spd
CPI R30,0
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:6 WORDS
SUBOPT_0x11:
__GETD1N 0xC61C3C00
LDD R17,Y+0
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x12:
RCALL SUBOPT_0x9
LSL R30
ROL R31
ADD R30,R26
ADC R31,R27
RCALL __GETW1PF
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x13:
LD R30,X+
LD R31,X+
ADIW R30,1
ST -X,R31
ST -X,R30
SBIW R30,1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:13 WORDS
SUBOPT_0x14:
__GETD2S 9
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0x15:
__PUTD1S 9
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x16:
__GETD1N 0x3F800000
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x17:
__PUTD1S 2
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x18:
__GETD1S 2
RJMP SUBOPT_0x14
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:5 WORDS
SUBOPT_0x19:
__GETD2S 2
__GETD1N 0x41200000
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:13 WORDS
SUBOPT_0x1A:
LDD R26,Y+6
LDD R27,Y+6+1
ADIW R26,1
STD Y+6,R26
STD Y+6+1,R27
SBIW R26,1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:5 WORDS
SUBOPT_0x1B:
RCALL __DIVF21
__GETD2N 0x3F000000
RCALL __ADDF12
RCALL __PUTPARD1
RJMP _floor
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x1C:
MOV R30,R16
SUBI R30,-LOW(48)
ST X,R30
MOV R30,R16
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x1D:
CLR R31
CLR R22
CLR R23
RCALL __CDF1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x1E:
LDD R26,Y+6
LDD R27,Y+6+1
LDI R30,LOW(0)
ST X,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:18 WORDS
SUBOPT_0x1F:
__GETD1N 0x41200000
RCALL __MULF12
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:13 WORDS
SUBOPT_0x20:
__PUTD1S 4
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:10 WORDS
SUBOPT_0x21:
__GETD2S 4
RJMP SUBOPT_0x1F
;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:10 WORDS
SUBOPT_0x22:
__GETD1S 12
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:22 WORDS
SUBOPT_0x23:
__GETD1S 4
__GETD2S 12
RCALL __CMPF12
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 7 TIMES, CODE SIZE REDUCTION:16 WORDS
SUBOPT_0x24:
__GETD2S 12
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0x25:
__GETD1N 0x41200000
RCALL __DIVF21
__PUTD1S 12
SUBI R19,-LOW(1)
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 8 TIMES, CODE SIZE REDUCTION:19 WORDS
SUBOPT_0x26:
__PUTD1S 12
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x27:
__GETD2S 4
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:8 WORDS
SUBOPT_0x28:
LDD R26,Y+8
LDD R27,Y+8+1
ADIW R26,1
STD Y+8,R26
STD Y+8+1,R27
SBIW R26,1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:8 WORDS
SUBOPT_0x29:
LDD R30,Y+8
LDD R31,Y+8+1
ADIW R30,1
STD Y+8,R30
STD Y+8+1,R31
SBIW R30,1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:31 WORDS
SUBOPT_0x2A:
ST -Y,R18
__GETW1SX 87
RCALL SUBOPT_0x0
MOVW R30,R28
ADIW R30,19
RCALL SUBOPT_0x0
RJMP __put_G4
;OPTIMIZER ADDED SUBROUTINE, CALLED 7 TIMES, CODE SIZE REDUCTION:40 WORDS
SUBOPT_0x2B:
MOVW R26,R28
SUBI R26,LOW(-(88))
SBCI R27,HIGH(-(88))
LD R30,X+
LD R31,X+
SBIW R30,4
ST -X,R31
ST -X,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:31 WORDS
SUBOPT_0x2C:
ST -Y,R30
__GETW1SX 87
RCALL SUBOPT_0x0
MOVW R30,R28
ADIW R30,19
RCALL SUBOPT_0x0
RJMP __put_G4
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x2D:
MOVW R30,R28
ADIW R30,20
STD Y+10,R30
STD Y+10+1,R31
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 6 TIMES, CODE SIZE REDUCTION:3 WORDS
SUBOPT_0x2E:
ADIW R30,4
MOVW R26,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0x2F:
__PUTD1S 6
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 4 TIMES, CODE SIZE REDUCTION:7 WORDS
SUBOPT_0x30:
__GETD1S 6
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 5 TIMES, CODE SIZE REDUCTION:2 WORDS
SUBOPT_0x31:
LDD R30,Y+10
LDD R31,Y+10+1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x32:
ADIW R30,1
STD Y+10,R30
STD Y+10+1,R31
SBIW R30,1
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:1 WORDS
SUBOPT_0x33:
RCALL SUBOPT_0x31
RCALL SUBOPT_0x0
RCALL _strlen
MOV R17,R30
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 3 TIMES, CODE SIZE REDUCTION:4 WORDS
SUBOPT_0x34:
__GETD2S 6
RET
;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES, CODE SIZE REDUCTION:13 WORDS
SUBOPT_0x35:
ANDI R16,LOW(251)
LDD R30,Y+19
ST -Y,R30
__GETW1SX 87
RCALL SUBOPT_0x0
MOVW R30,R28
SUBI R30,LOW(-(87))
SBCI R31,HIGH(-(87))
RCALL SUBOPT_0x0
RCALL __put_G4
CPI R21,0
RET
_isdigit:
ldi r30,1
ld r31,y+
cpi r31,'0'
brlo __isdigit0
cpi r31,'9'+1
brlo __isdigit1
__isdigit0:
clr r30
__isdigit1:
ret
_isspace:
ldi r30,1
ld r31,y+
cpi r31,' '
breq __isspace1
cpi r31,9
brlo __isspace0
cpi r31,14
brlo __isspace1
__isspace0:
clr r30
__isspace1:
ret
_isxdigit:
ldi r30,1
ld r31,y+
subi r31,0x30
brcs __isxdigit0
cpi r31,10
brcs __isxdigit1
andi r31,0x5f
subi r31,7
cpi r31,10
brcs __isxdigit0
cpi r31,16
brcs __isxdigit1
__isxdigit0:
clr r30
__isxdigit1:
ret
_strlen:
ld r26,y+
ld r27,y+
clr r30
clr r31
__strlen0:
ld r22,x+
tst r22
breq __strlen1
adiw r30,1
rjmp __strlen0
__strlen1:
ret
_strlenf:
clr r26
clr r27
ld r30,y+
ld r31,y+
__strlenf0:
lpm r0,z+
tst r0
breq __strlenf1
adiw r26,1
rjmp __strlenf0
__strlenf1:
movw r30,r26
ret
_delay_ms:
ld r30,y+
ld r31,y+
adiw r30,0
breq __delay_ms1
__delay_ms0:
__DELAY_USW 0x39A
wdr
sbiw r30,1
brne __delay_ms0
__delay_ms1:
ret
_w1_init:
clr r30
cbi __w1_port,__w1_bit
sbi __w1_port-1,__w1_bit
__DELAY_USW 0x1BA
cbi __w1_port-1,__w1_bit
__DELAY_USB 0x11
sbis __w1_port-2,__w1_bit
ret
__DELAY_USB 0x5D
sbis __w1_port-2,__w1_bit
inc r30
__DELAY_USW 0x167
ret
__w1_read_bit:
sbi __w1_port-1,__w1_bit
__DELAY_USB 0x2
cbi __w1_port-1,__w1_bit
__DELAY_USB 0xE
clc
sbic __w1_port-2,__w1_bit
sec
ror r30
__DELAY_USB 0x62
ret
__w1_write_bit:
clt
sbi __w1_port-1,__w1_bit
__DELAY_USB 0x2
sbrc r23,0
cbi __w1_port-1,__w1_bit
__DELAY_USB 0x10
sbic __w1_port-2,__w1_bit
rjmp __w1_write_bit0
sbrs r23,0
rjmp __w1_write_bit1
ret
__w1_write_bit0:
sbrs r23,0
ret
__w1_write_bit1:
__DELAY_USB 0x5C
cbi __w1_port-1,__w1_bit
__DELAY_USB 0x6
set
ret
_w1_read:
ldi r22,8
__w1_read0:
rcall __w1_read_bit
dec r22
brne __w1_read0
ret
_w1_write:
ldi r22,8
ld r23,y+
clr r30
__w1_write0:
rcall __w1_write_bit
brtc __w1_write1
ror r23
dec r22
brne __w1_write0
inc r30
__w1_write1:
ret
_w1_search:
push r20
push r21
clr r1
clr r20
ld r26,y
ldd r27,y+1
__w1_search0:
mov r0,r1
clr r1
rcall _w1_init
tst r30
breq __w1_search7
ldd r30,y+2
st -y,r30
rcall _w1_write
ldi r21,1
__w1_search1:
cp r21,r0
brsh __w1_search6
rcall __w1_read_bit
sbrc r30,7
rjmp __w1_search2
rcall __w1_read_bit
sbrc r30,7
rjmp __w1_search3
rcall __sel_bit
and r24,r25
brne __w1_search3
mov r1,r21
rjmp __w1_search3
__w1_search2:
rcall __w1_read_bit
__w1_search3:
rcall __sel_bit
and r24,r25
ldi r23,0
breq __w1_search5
__w1_search4:
ldi r23,1
__w1_search5:
rcall __w1_write_bit
rjmp __w1_search13
__w1_search6:
rcall __w1_read_bit
sbrs r30,7
rjmp __w1_search9
rcall __w1_read_bit
sbrs r30,7
rjmp __w1_search8
__w1_search7:
mov r30,r20
pop r21
pop r20
adiw r28,3
ret
__w1_search8:
set
rcall __set_bit
rjmp __w1_search4
__w1_search9:
rcall __w1_read_bit
sbrs r30,7
rjmp __w1_search10
rjmp __w1_search11
__w1_search10:
cp r21,r0
breq __w1_search12
mov r1,r21
__w1_search11:
clt
rcall __set_bit
clr r23
rcall __w1_write_bit
rjmp __w1_search13
__w1_search12:
set
rcall __set_bit
ldi r23,1
rcall __w1_write_bit
__w1_search13:
inc r21
cpi r21,65
brlt __w1_search1
rcall __w1_read_bit
rol r30
rol r30
andi r30,1
adiw r26,8
st x,r30
sbiw r26,8
inc r20
tst r1
breq __w1_search7
ldi r21,9
__w1_search14:
ld r30,x
adiw r26,9
st x,r30
sbiw r26,8
dec r21
brne __w1_search14
rjmp __w1_search0
__sel_bit:
mov r30,r21
dec r30
mov r22,r30
lsr r30
lsr r30
lsr r30
clr r31
add r30,r26
adc r31,r27
ld r24,z
ldi r25,1
andi r22,7
__sel_bit0:
breq __sel_bit1
lsl r25
dec r22
rjmp __sel_bit0
__sel_bit1:
ret
__set_bit:
rcall __sel_bit
brts __set_bit2
com r25
and r24,r25
rjmp __set_bit3
__set_bit2:
or r24,r25
__set_bit3:
st z,r24
ret
_w1_dow_crc8:
clr r30
ld r24,y
tst r24
breq __w1_dow_crc83
ldi r22,0x18
ldd r26,y+1
ldd r27,y+2
__w1_dow_crc80:
ldi r25,8
ld r31,x+
__w1_dow_crc81:
mov r23,r31
eor r23,r30
ror r23
brcc __w1_dow_crc82
eor r30,r22
__w1_dow_crc82:
ror r30
lsr r31
dec r25
brne __w1_dow_crc81
dec r24
brne __w1_dow_crc80
__w1_dow_crc83:
adiw r28,3
ret
__ftrunc:
ldd r23,y+3
ldd r22,y+2
ldd r31,y+1
ld r30,y
bst r23,7
lsl r23
sbrc r22,7
sbr r23,1
mov r25,r23
subi r25,0x7e
breq __ftrunc0
brcs __ftrunc0
cpi r25,24
brsh __ftrunc1
clr r26
clr r27
clr r24
__ftrunc2:
sec
ror r24
ror r27
ror r26
dec r25
brne __ftrunc2
and r30,r26
and r31,r27
and r22,r24
rjmp __ftrunc1
__ftrunc0:
clt
clr r23
clr r30
clr r31
clr r22
__ftrunc1:
cbr r22,0x80
lsr r23
brcc __ftrunc3
sbr r22,0x80
__ftrunc3:
bld r23,7
ld r26,y+
ld r27,y+
ld r24,y+
ld r25,y+
cp r30,r26
cpc r31,r27
cpc r22,r24
cpc r23,r25
bst r25,7
ret
_floor:
rcall __ftrunc
brne __floor1
__floor0:
ret
__floor1:
brtc __floor0
ldi r25,0xbf
__addfc:
clr r26
clr r27
ldi r24,0x80
rjmp __addf12
__ADDW2R15:
CLR R0
ADD R26,R15
ADC R27,R0
RET
__ANEGD1:
COM R31
COM R22
COM R23
NEG R30
SBCI R31,-1
SBCI R22,-1
SBCI R23,-1
RET
__LSLW2:
LSL R30
ROL R31
LSL R30
ROL R31
RET
__CBD1:
MOV R31,R30
ADD R31,R31
SBC R31,R31
MOV R22,R31
MOV R23,R31
RET
__CWD1:
MOV R22,R31
ADD R22,R22
SBC R22,R22
MOV R23,R22
RET
__LNEGB1:
TST R30
LDI R30,1
BREQ __LNEGB1F
CLR R30
__LNEGB1F:
RET
__DIVB21U:
CLR R0
LDI R25,8
__DIVB21U1:
LSL R26
ROL R0
SUB R0,R30
BRCC __DIVB21U2
ADD R0,R30
RJMP __DIVB21U3
__DIVB21U2:
SBR R26,1
__DIVB21U3:
DEC R25
BRNE __DIVB21U1
MOV R30,R26
MOV R26,R0
RET
__DIVB21:
RCALL __CHKSIGNB
RCALL __DIVB21U
BRTC __DIVB211
NEG R30
__DIVB211:
RET
__DIVD21U:
PUSH R19
PUSH R20
PUSH R21
CLR R0
CLR R1
CLR R20
CLR R21
LDI R19,32
__DIVD21U1:
LSL R26
ROL R27
ROL R24
ROL R25
ROL R0
ROL R1
ROL R20
ROL R21
SUB R0,R30
SBC R1,R31
SBC R20,R22
SBC R21,R23
BRCC __DIVD21U2
ADD R0,R30
ADC R1,R31
ADC R20,R22
ADC R21,R23
RJMP __DIVD21U3
__DIVD21U2:
SBR R26,1
__DIVD21U3:
DEC R19
BRNE __DIVD21U1
MOVW R30,R26
MOVW R22,R24
MOVW R26,R0
MOVW R24,R20
POP R21
POP R20
POP R19
RET
__MODB21:
CLT
SBRS R26,7
RJMP __MODB211
NEG R26
SET
__MODB211:
SBRC R30,7
NEG R30
RCALL __DIVB21U
MOV R30,R26
BRTC __MODB212
NEG R30
__MODB212:
RET
__MODD21U:
RCALL __DIVD21U
MOVW R30,R26
MOVW R22,R24
RET
__CHKSIGNB:
CLT
SBRS R30,7
RJMP __CHKSB1
NEG R30
SET
__CHKSB1:
SBRS R26,7
RJMP __CHKSB2
NEG R26
BLD R0,0
INC R0
BST R0,0
__CHKSB2:
RET
__GETW1P:
LD R30,X+
LD R31,X
SBIW R26,1
RET
__GETD1P:
LD R30,X+
LD R31,X+
LD R22,X+
LD R23,X
SBIW R26,3
RET
__GETW1PF:
LPM R0,Z+
LPM R31,Z
MOV R30,R0
RET
__GETD1PF:
LPM R0,Z+
LPM R1,Z+
LPM R22,Z+
LPM R23,Z
MOVW R30,R0
RET
__PUTPARD1:
ST -Y,R23
ST -Y,R22
ST -Y,R31
ST -Y,R30
RET
__SWAPD12:
MOV R1,R24
MOV R24,R22
MOV R22,R1
MOV R1,R25
MOV R25,R23
MOV R23,R1
__SWAPW12:
MOV R1,R27
MOV R27,R31
MOV R31,R1
__SWAPB12:
MOV R1,R26
MOV R26,R30
MOV R30,R1
RET
__ANEGF1:
SBIW R30,0
SBCI R22,0
SBCI R23,0
BREQ __ANEGF10
SUBI R23,0x80
__ANEGF10:
RET
__ROUND_REPACK:
TST R21
BRPL __REPACK
CPI R21,0x80
BRNE __ROUND_REPACK0
SBRS R30,0
RJMP __REPACK
__ROUND_REPACK0:
ADIW R30,1
ADC R22,R25
ADC R23,R25
BRVS __REPACK1
__REPACK:
LDI R21,0x80
EOR R21,R23
BRNE __REPACK0
PUSH R21
RJMP __ZERORES
__REPACK0:
CPI R21,0xFF
BREQ __REPACK1
LSL R22
LSL R0
ROR R21
ROR R22
MOV R23,R21
RET
__REPACK1:
PUSH R21
TST R0
BRMI __REPACK2
RJMP __MAXRES
__REPACK2:
RJMP __MINRES
__UNPACK:
LDI R21,0x80
MOV R1,R25
AND R1,R21
LSL R24
ROL R25
EOR R25,R21
LSL R21
ROR R24
__UNPACK1:
LDI R21,0x80
MOV R0,R23
AND R0,R21
LSL R22
ROL R23
EOR R23,R21
LSL R21
ROR R22
RET
__CFD1U:
SET
RJMP __CFD1U0
__CFD1:
CLT
__CFD1U0:
PUSH R21
RCALL __UNPACK1
CPI R23,0x80
BRLO __CFD10
CPI R23,0xFF
BRCC __CFD10
RJMP __ZERORES
__CFD10:
LDI R21,22
SUB R21,R23
BRPL __CFD11
NEG R21
CPI R21,8
BRTC __CFD19
CPI R21,9
__CFD19:
BRLO __CFD17
SER R30
SER R31
SER R22
LDI R23,0x7F
BLD R23,7
RJMP __CFD15
__CFD17:
CLR R23
TST R21
BREQ __CFD15
__CFD18:
LSL R30
ROL R31
ROL R22
ROL R23
DEC R21
BRNE __CFD18
RJMP __CFD15
__CFD11:
CLR R23
__CFD12:
CPI R21,8
BRLO __CFD13
MOV R30,R31
MOV R31,R22
MOV R22,R23
SUBI R21,8
RJMP __CFD12
__CFD13:
TST R21
BREQ __CFD15
__CFD14:
LSR R23
ROR R22
ROR R31
ROR R30
DEC R21
BRNE __CFD14
__CFD15:
TST R0
BRPL __CFD16
RCALL __ANEGD1
__CFD16:
POP R21
RET
__CDF1U:
SET
RJMP __CDF1U0
__CDF1:
CLT
__CDF1U0:
SBIW R30,0
SBCI R22,0
SBCI R23,0
BREQ __CDF10
CLR R0
BRTS __CDF11
TST R23
BRPL __CDF11
COM R0
RCALL __ANEGD1
__CDF11:
MOV R1,R23
LDI R23,30
TST R1
__CDF12:
BRMI __CDF13
DEC R23
LSL R30
ROL R31
ROL R22
ROL R1
RJMP __CDF12
__CDF13:
MOV R30,R31
MOV R31,R22
MOV R22,R1
PUSH R21
RCALL __REPACK
POP R21
__CDF10:
RET
__SWAPACC:
PUSH R20
MOVW R20,R30
MOVW R30,R26
MOVW R26,R20
MOVW R20,R22
MOVW R22,R24
MOVW R24,R20
MOV R20,R0
MOV R0,R1
MOV R1,R20
POP R20
RET
__UADD12:
ADD R30,R26
ADC R31,R27
ADC R22,R24
RET
__NEGMAN1:
COM R30
COM R31
COM R22
SUBI R30,-1
SBCI R31,-1
SBCI R22,-1
RET
__SUBF12:
PUSH R21
RCALL __UNPACK
CPI R25,0x80
BREQ __ADDF129
LDI R21,0x80
EOR R1,R21
RJMP __ADDF120
__ADDF12:
PUSH R21
RCALL __UNPACK
CPI R25,0x80
BREQ __ADDF129
__ADDF120:
CPI R23,0x80
BREQ __ADDF128
__ADDF121:
MOV R21,R23
SUB R21,R25
BRVS __ADDF129
BRPL __ADDF122
RCALL __SWAPACC
RJMP __ADDF121
__ADDF122:
CPI R21,24
BRLO __ADDF123
CLR R26
CLR R27
CLR R24
__ADDF123:
CPI R21,8
BRLO __ADDF124
MOV R26,R27
MOV R27,R24
CLR R24
SUBI R21,8
RJMP __ADDF123
__ADDF124:
TST R21
BREQ __ADDF126
__ADDF125:
LSR R24
ROR R27
ROR R26
DEC R21
BRNE __ADDF125
__ADDF126:
MOV R21,R0
EOR R21,R1
BRMI __ADDF127
RCALL __UADD12
BRCC __ADDF129
ROR R22
ROR R31
ROR R30
INC R23
BRVC __ADDF129
RJMP __MAXRES
__ADDF128:
RCALL __SWAPACC
__ADDF129:
RCALL __REPACK
POP R21
RET
__ADDF127:
SUB R30,R26
SBC R31,R27
SBC R22,R24
BREQ __ZERORES
BRCC __ADDF1210
COM R0
RCALL __NEGMAN1
__ADDF1210:
TST R22
BRMI __ADDF129
LSL R30
ROL R31
ROL R22
DEC R23
BRVC __ADDF1210
__ZERORES:
CLR R30
CLR R31
CLR R22
CLR R23
POP R21
RET
__MINRES:
SER R30
SER R31
LDI R22,0x7F
SER R23
POP R21
RET
__MAXRES:
SER R30
SER R31
LDI R22,0x7F
LDI R23,0x7F
POP R21
RET
__MULF12:
PUSH R21
RCALL __UNPACK
CPI R23,0x80
BREQ __ZERORES
CPI R25,0x80
BREQ __ZERORES
EOR R0,R1
SEC
ADC R23,R25
BRVC __MULF124
BRLT __ZERORES
__MULF125:
TST R0
BRMI __MINRES
RJMP __MAXRES
__MULF124:
PUSH R0
PUSH R17
PUSH R18
PUSH R19
PUSH R20
CLR R17
CLR R18
CLR R25
MUL R22,R24
MOVW R20,R0
MUL R24,R31
MOV R19,R0
ADD R20,R1
ADC R21,R25
MUL R22,R27
ADD R19,R0
ADC R20,R1
ADC R21,R25
MUL R24,R30
RCALL __MULF126
MUL R27,R31
RCALL __MULF126
MUL R22,R26
RCALL __MULF126
MUL R27,R30
RCALL __MULF127
MUL R26,R31
RCALL __MULF127
MUL R26,R30
ADD R17,R1
ADC R18,R25
ADC R19,R25
ADC R20,R25
ADC R21,R25
MOV R30,R19
MOV R31,R20
MOV R22,R21
MOV R21,R18
POP R20
POP R19
POP R18
POP R17
POP R0
TST R22
BRMI __MULF122
LSL R21
ROL R30
ROL R31
ROL R22
RJMP __MULF123
__MULF122:
INC R23
BRVS __MULF125
__MULF123:
RCALL __ROUND_REPACK
POP R21
RET
__MULF127:
ADD R17,R0
ADC R18,R1
ADC R19,R25
RJMP __MULF128
__MULF126:
ADD R18,R0
ADC R19,R1
__MULF128:
ADC R20,R25
ADC R21,R25
RET
__DIVF21:
PUSH R21
RCALL __UNPACK
CPI R23,0x80
BRNE __DIVF210
TST R1
__DIVF211:
BRPL __DIVF219
RJMP __MINRES
__DIVF219:
RJMP __MAXRES
__DIVF210:
CPI R25,0x80
BRNE __DIVF218
__DIVF217:
RJMP __ZERORES
__DIVF218:
EOR R0,R1
SEC
SBC R25,R23
BRVC __DIVF216
BRLT __DIVF217
TST R0
RJMP __DIVF211
__DIVF216:
MOV R23,R25
PUSH R17
PUSH R18
PUSH R19
PUSH R20
CLR R1
CLR R17
CLR R18
CLR R19
CLR R20
CLR R21
LDI R25,32
__DIVF212:
CP R26,R30
CPC R27,R31
CPC R24,R22
CPC R20,R17
BRLO __DIVF213
SUB R26,R30
SBC R27,R31
SBC R24,R22
SBC R20,R17
SEC
RJMP __DIVF214
__DIVF213:
CLC
__DIVF214:
ROL R21
ROL R18
ROL R19
ROL R1
ROL R26
ROL R27
ROL R24
ROL R20
DEC R25
BRNE __DIVF212
MOVW R30,R18
MOV R22,R1
POP R20
POP R19
POP R18
POP R17
TST R22
BRMI __DIVF215
LSL R21
ROL R30
ROL R31
ROL R22
DEC R23
BRVS __DIVF217
__DIVF215:
RCALL __ROUND_REPACK
POP R21
RET
__CMPF12:
TST R25
BRMI __CMPF120
TST R23
BRMI __CMPF121
CP R25,R23
BRLO __CMPF122
BRNE __CMPF121
CP R26,R30
CPC R27,R31
CPC R24,R22
BRLO __CMPF122
BREQ __CMPF123
__CMPF121:
CLZ
CLC
RET
__CMPF122:
CLZ
SEC
RET
__CMPF123:
SEZ
CLC
RET
__CMPF120:
TST R23
BRPL __CMPF122
CP R25,R23
BRLO __CMPF121
BRNE __CMPF122
CP R30,R26
CPC R31,R27
CPC R22,R24
BRLO __CMPF122
BREQ __CMPF123
RJMP __CMPF121
__CPD10:
SBIW R30,0
SBCI R22,0
SBCI R23,0
RET
__CPD20:
SBIW R26,0
SBCI R24,0
SBCI R25,0
RET
__SAVELOCR6:
ST -Y,R21
__SAVELOCR5:
ST -Y,R20
__SAVELOCR4:
ST -Y,R19
__SAVELOCR3:
ST -Y,R18
__SAVELOCR2:
ST -Y,R17
ST -Y,R16
RET
__LOADLOCR6:
LDD R21,Y+5
__LOADLOCR5:
LDD R20,Y+4
__LOADLOCR4:
LDD R19,Y+3
__LOADLOCR3:
LDD R18,Y+2
__LOADLOCR2:
LDD R17,Y+1
LD R16,Y
RET
;END OF CODE MARKER
__END_OF_CODE: