;-----------------------------------
;AVR DISASSEMBLER LISTING
;Label  Instruction
;-----------------------------------
.include  			"C:\Gamla IBM\C\Program\Atmel\AVR Studio\Appnotes\tn26def.inc"
.org	$000
	RJMP L1				;Reset
	RETI				;	
	RETI				;
	RETI				;
	RETI				;	
	RJMP L2				;Avbrott för  Timer 1 overflow 
	RETI
	RETI
	RETI
	RETI
	RETI
	RJMP L3				;ADC
L1:	
	CLR R1				;Start
	OUT SREG,R1
	LDI R17,$00
	LDI XL,$6C			;Nolla ram med start på 6C Hex
	LDI XH,$00				
	RJMP L4				
L5:	
	ST X+,R1
L4:	
	CPI XL,$AF			;Stopp på AF
	CPC XH,R17
	BRNE L5
	LDI YL,$DE
	LDI YH,$00
	OUT SP,YL			;Sätt stack peckare 
	LDI R20,$01
	LDI R21,$00
	LDI R22,$00
	LDI R23,$00
	MOV R24,YL
	MOV R25,YH
	ADD R24,R20
	ADC R25,R21
	RCALL L6
	LDD R24,Y+1			;Läs kalibrering ossilator från EEDATA  
	CLR R25
	OUT OSCCAL,R24		; Var B4 hex i från leverans
	LDI R24,$F8
	OUT PORTA,R24
	LDI R24,$18
	LDI R25,$00
	LDI R18,$09
	IN R0,SREG
	BCLR 7				; Förhindra avbrott
	WDR
	OUT WDTCR,R24
	OUT SREG,R0
	OUT WDTCR,R18
	LDI R24,$82
	STS $00AE,R24
	LDI R24,$8E		;Initsera ADC	
	OUT ADCSR,R24
	CBI PORTB,4
	LDI R24,$7F		
	OUT DDRB,R24	; Sätt PB0-6 som utgångar	
	LDI R24,$28		;Int ram
	STS $00AB,R24
	LDI R24,$0C
	STS $00AC,R24	; 	
	LDI R24,$03		; Vart att start skrivning LCD var $06 
	STS $00AD,R24
	RCALL L7
	LDI R20,$00		; Int LCD
	LDI R22,$30
	MOV R24,R20
	RCALL L8
	RCALL L7
	LDI R20,$00
	LDI R22,$30
	MOV R24,R20
	RCALL L8
	RCALL L7
	LDI R20,$00
	LDI R22,$30
	MOV R24,R20
	RCALL L8
	RCALL L7
	LDI R20,$00
	LDS R22,$00AB
	MOV R24,R20
	RCALL L8
	LDS R24,$00AB
	RCALL L9
	LDS R24,$00AC
	RCALL L9
	LDI R24,$01
	RCALL L9
	RCALL L7
	LDS R24,$00AD
	RCALL L9
	BSET 7
	LDI XL,$60				;Spara undan  " JP EL-BIKE " i minne 
	LDI XH,$00				; Början på 60H skrivs på LCD	
	LDI R16,' '   
	ST X+,R16
	LDI R16,'J'
	ST X+,R16
	LDI R16,'P'
	ST X+,R16
	LDI R16,' '
	ST X+,R16
	LDI R16,' '
	ST X+,R16
	LDI R16,'E'
	ST X+,R16
	LDI R16,'-'
	ST X+,R16
	LDI R16,'B'
	ST X+,R16
	LDI R16,'I'
	ST X+,R16
	LDI R16,'K'
	ST X+,R16
	LDI R16,'E'
	ST X+,R16
	LDI R16,' '
	ST X+,R16
	LDI R16,' '   		; Lägg till ett blanksteg
	ST X+,R16
	LDI R24,$FF
	STS $0086,R24
	STS $0087,R24
	LDI R16,$0D			; Hur många byten stt skriva $0B tidare
	LDI R18,$60
	LDI R19,$00
	LDI R24,$82
	RCALL L10			; Skriv ut start LCD

	LDI	R16,$20	
Visa_2s:
	RCALL L7			; Vänta 0,1s
	DEC	R16
	BRNE  Visa_2s		
;	RCALL L7
;	RCALL L7
;	RCALL L7
;	RCALL L7
;	RCALL L7
;	RCALL L7
	LDI R20,$07
	LDI R21,$00
	LDI R22,$01
	LDI R23,$00
	LDI R24,$6C
	LDI R25,$00
	ADIW R25:R24,10
	RCALL L6
	LDI R20,$07
	LDI R21,$00
	LDI R22,$08
	LDI R23,$00
	LDI R24,$6C
	LDI R25,$00
	ADIW R25:R24,17
	RCALL L6
	LDI R24,$7C
	OUT OCR1C,R24			;Initsira timer
	LDI R24,$C7
	OUT TCCR1B,R24
	IN R24,TIMSK
	ORI R24,$04
	OUT TIMSK,R24
L11:
	LDS R24,$009A
	TST R24				;KOLLA OM NOLL ELLER MINUS
	BREQ L11
	STS $009A,R1
	LDI R25,$6C
	MOV R14,R25
	LDI R25,$00
	MOV R15,R25
	LDI R17,$41
	STS $00A1,R17
	LDI R24,$56
	MOV R13,R24
	STS $00AA,R13
	LDI R18,$02
	LDI R20,$06
	LDS R22,$0088
	LDS R23,$0089
	MOV R25,R15
	MOV R24,R14
	ADIW R25:R24,47
	RCALL L12
	LDI R18,$02
	LDI R20,$08
	LDS R22,$0084
	LDS R23,$0085
	MOV R25,R15
	MOV R24,R14
	ADIW R25:R24,54
	RCALL L12
	LDI R16,$10
	MOV R19,R15
	MOV R18,R14
	SUBI R18,$D1
	SBCI R19,$FF
	LDI R24,$80
	RCALL L10
	LDI R18,$57
	STS $00AA,R18
	LDS R24,$0098
	CLR R25
	CPI R24,$02
	CPC R25,R1
	BREQ L13
	CPI R24,$03
	CPC R25,R1
	BRGE L14
	SBIW R25:R24,0
	BREQ L15
	SBIW R25:R24,1
	BREQ L16
	RJMP L17
L14:
	CPI R24,$03
	CPC R25,R1
	BREQ L18
	SBIW R25:R24,4
	BREQ L19
	RJMP L17
L15:
	STS $00A1,R17
	LDI R24,$68
	STS $00A2,R24
	LDI R18,$03
	LDI R20,$06
	LDS R22,$008E
	LDS R23,$008F
	RJMP L20
L16:
	STS $00A1,R18
	LDI R24,$68
	STS $00A2,R24
	LDI R18,$01
	LDI R20,$06
	LDS R22,$0096
	LDS R23,$0097
	RJMP L20
L13:
	STS $00A1,R17
	LDI R24,$70
	STS $00A2,R24
	LDI R18,$02
	LDI R20,$06
	LDS R22,$008A
	LDS R23,$008B
	RJMP L20
L18:
	STS $00A1,R13
	LDI R24,$6D
	STS $00A2,R24
	LDI R18,$02
	LDI R20,$06
	LDS R22,$0086
	LDS R23,$0087
	RJMP L20
L19:
	STS $00A1,R18
	LDI R24,$70
	STS $00A2,R24
	LDI R18,$01
	LDI R20,$06
	LDS R22,$0092
	LDS R23,$0093
L20:
	MOV R25,R15
	MOV R24,R14
	ADIW R25:R24,47
	RCALL L12
L17:
	LDI R18,$01
	LDI R20,$07
	LDS R22,$0090
	LDS R23,$0091
	LDI R24,$A3
	LDI R25,$00
	RCALL L12
	LDI R16,$10
	LDI R18,$9B
	LDI R19,$00
	LDI R24,$C0
	RCALL L10
	LDS R24,$0099
	SUBI R24,$FF
	MOV ZH,R15
	MOV ZL,R14
	STD Z+45,R24
	CPI R24,$05
	BRCC L21
	RJMP L11
L21:
	STD Z+45,R1
	LDS R24,$0098
	SUBI R24,$FF
	STD Z+44,R24
	CPI R24,$05
	BRCC L22
	RJMP L11
L22:
	STD Z+44,R1
	RJMP L11

L2:					; Timer overflow avbrott
	BSET 7
	PUSH R1
	PUSH R0
	IN R0,SREG
	PUSH R0
	CLR R1
	PUSH R14
	PUSH R15
	PUSH R16
	PUSH R17
	PUSH R18
	PUSH R19
	PUSH R20
	PUSH R21
	PUSH R22
	PUSH R23
	PUSH R24
	PUSH R25
	PUSH XL
	PUSH XH
	PUSH YL
	PUSH YH
	PUSH ZL
	PUSH ZH
	WDR
	LDI R16,$76
	LDI R17,$00
	MOV YH,R17
	MOV YL,R16
	SBIW YH:YL,10   ; 
	LDI R18,$01
	MOV R14,R18
L25:
	MOV ZH,R17
	MOV ZL,R16
	LD R25,Z
	LDS R24,$00AE
	CP R25,R24
	BREQ L23
	STS $00AE,R25
	OUT ADMUX,R25
	RCALL L24

L23:
	RCALL L24
	MOV R18,R24
	MOV R19,R25
	CLR R20
	CLR R21
	LDD R24,Y+2
	LDD R25,Y+3
	LDD XL,Y+4
	LDD XH,Y+5
	ADD R24,R18
	ADC R25,R19
	ADC XL,R20
	ADC XH,R21
	STD Y+2,R24
	STD Y+3,R25
	STD Y+4,XL
	STD Y+5,XH
	DEC R14
	ADIW YH:YL,4
	SUBI R16,$F9
	SBCI R17,$FF
	SBRS R14,7
	RJMP L25
	LDS R24,$006C
	LDS R25,$006D
	ADIW R25:R24,1
	STS $006D,R25
	STS	$006C,R24			; Prov med detta
;	IN R24,$010                  
;	.DW $006C ;UNRECOGNIZED		Här är det fel		
	SUBI R24,$90
	SBCI R25,$01
	BREQ L26
	RJMP L27
L26:
	STS $006D,R1
	STS $006C,R1
	LDI R22,$01
	LDI R24,$6C
	LDI R25,$00
	RCALL L28
	MOV R18,R24
	MOV R19,R25
	STS $0085,R25
	STS $0084,R24
	LDS R24,$0086
	LDS R25,$0087
	CP R18,R24
	CPC R19,R25
	BRCC L29
	STS $0087,R19
	STS $0086,R18
L29:
	LDI R22,$00
	LDI R24,$6C
	LDI R25,$00
	RCALL L28
	STS $0089,R25
	STS $0088,R24
	LDS ZL,$008C
	LDS ZH,$008D
	ADD ZL,R24
	ADC ZH,R25
	STS $008D,ZH
	STS $008C,ZL
	LDI R18,$03
	CPI ZL,$84
	CPC ZH,R18
	BRCS L30
	MOV R24,ZL
	MOV R25,ZH
	LDI R22,$84
	LDI R23,$03
	RCALL L31
	LDS R24,$008E
	LDS R25,$008F
	ADD R24,R22
	ADC R25,R23
	STS $008F,R25
	STS $008E,R24
	MOV R24,ZL
	MOV R25,ZH
	LDI R22,$84
	LDI R23,$03
	RCALL L31
	STS $008D,R25
	STS $008C,R24
L30:
	LDS R18,$0088
	LDS R19,$0089
	LDS R24,$008A
	LDS R25,$008B
	CP R24,R18
	CPC R25,R19
	BRCC L32
	STS $008B,R19
	STS $008A,R18
L32:
	MOV R14,R18
	MOV R15,R19
	CLR R16
	CLR R17
	LDS R24,$0084
	LDS R25,$0085
	CLR XL
	CLR XH
	MOV R18,R24
	MOV R19,R25
	MOV R20,XL
	MOV R21,XH
	MOV R25,R17
	MOV R24,R16
	MOV R23,R15
	MOV R22,R14
	RCALL L33
	MOV XH,R25
	MOV XL,R24
	MOV R25,R23
	MOV R24,R22
	MOV R22,R24
	MOV R23,R25
	MOV R24,XL
	MOV R25,XH
	LDI R18,$E8
	LDI R19,$03
	LDI R20,$00
	LDI R21,$00
	RCALL L34
	STS $0091,R19
	STS $0090,R18
	LDS ZL,$0094
	LDS ZH,$0095
	ADD ZL,R18
	ADC ZH,R19
	STS $0095,ZH
	STS $0094,ZL
	LDI R24,$23
	CPI ZL,$28
	CPC ZH,R24
	BRCS L35
	MOV R24,ZL
	MOV R25,ZH
	LDI R22,$28
	LDI R23,$23
	RCALL L31
	LDS R24,$0096
	LDS R25,$0097
	ADD R24,R22
	ADC R25,R23
	STS $0097,R25
	STS $0096,R24
	MOV R24,ZL
	MOV R25,ZH
	LDI R22,$28
	LDI R23,$23
	RCALL L31
	STS $0095,R25
	STS $0094,R24
L35:
	LDS R18,$0090
	LDS R19,$0091
	LDS R24,$0092
	LDS R25,$0093
	CP R24,R18
	CPC R25,R19
	BRCC L36
	STS $0093,R19
	STS $0092,R18
L36:
	LDI R24,$08
	LDI ZL,$6E
	LDI ZH,$00
L37:
	ST Z+,R1
	DEC R24
	BRNE L37
	LDI R24,$01
	STS $009A,R24
L27:
	POP ZH
	POP ZL
	POP YH
	POP YL
	POP XH
	POP XL
	POP R25
	POP R24
	POP R23
	POP R22
	POP R21
	POP R20
	POP R19
	POP R18
	POP R17
	POP R16
	POP R15
	POP R14
	POP R0
	OUT SREG,R0
	POP R0
	POP R1
	RETI
L28:
	MOV R18,R24
	MOV R19,R25
	MOV ZL,R22
	CLR ZH
	MOV R16,ZL
	MOV R17,ZH
	LDI R25,$03
L38:
	LSL R16
	ROL R17
	DEC R25
	BRNE L38
	SUB R16,ZL
	SBC R17,ZH
	ADD R16,R18
	ADC R17,R19
	SUBI R16,$F6
	SBCI R17,$FF
	LSL ZL
	ROL ZH
	LSL ZL
	ROL ZH
	ADD ZL,R18
	ADC ZH,R19
	LDD R12,Z+2
	LDD R13,Z+3
	LDD R14,Z+4
	LDD R15,Z+5
	MOV ZH,R17
	MOV ZL,R16
	LDD R24,Z+1
	LDD R25,Z+2
	MOV R18,R24
	MOV R19,R25
	CLR R20
	CLR R21
	CP R12,R18
	CPC R13,R19
	CPC R14,R20
	CPC R15,R21
	BRCS L39
	SUB R12,R18
	SBC R13,R19
	SBC R14,R20
	SBC R15,R21
	MOV R21,R15
	MOV R20,R14
	MOV R19,R13
	MOV R18,R12
	RJMP L40
L39:
	LDI R18,$00
	LDI R19,$00
	LDI R20,$00
	LDI R21,$00
L40:
	MOV R12,R18
	MOV R13,R19
	MOV R14,R20
	MOV R15,R21
	MOV ZH,R17
	MOV ZL,R16
	LDD R24,Z+3
	LDD R25,Z+4
	CLR XL
	CLR XH
	MOV R18,R24
	MOV R19,R25
	MOV R20,XL
	MOV R21,XH
	MOV R25,R15
	MOV R24,R14
	MOV R23,R13
	MOV R22,R12
	RCALL L33
	MOV R12,R22
	MOV R13,R23
	MOV R14,R24
	MOV R15,R25
	MOV ZH,R17
	MOV ZL,R16
	LDD R24,Z+5
	LDD R25,Z+6
	MOV R18,R24
	MOV R19,R25
	CLR R20
	CLR R21
	MOV R25,R15
	MOV R24,R14
	MOV R23,R13
	MOV R22,R12
	RCALL L34
	MOV R25,R19
	MOV R24,R18
	RET
L12:
	MOV YH,R23
	MOV YL,R22
	MOV ZH,R25
	MOV ZL,R24
	ADD ZL,R20
	ADC ZH,R1
	LDI R19,$2E
L46:
	MOV R24,YL
	MOV R25,YH
	LDI R22,$0A
	LDI R23,$00
	RCALL L31
	SUBI R24,$D0
	ST -Z,R24
	MOV R24,YL
	MOV R25,YH
	LDI R22,$0A
	LDI R23,$00
	RCALL L31
	MOV YH,R23
	MOV YL,R22
	SUBI R20,$01
	CPI R18,$01
	BRNE L41
	ST -Z,R19
	SUBI R20,$01
	RJMP L42
L41:
	TST R18
	BREQ L43
L42:
	SUBI R18,$01
	RJMP L44
L43:
	OR R22,R23
	BREQ L45
L44:
	TST R20
	BRNE L46
L45:
	TST R20
	BREQ L47
	LDI R24,$20
L48:
	ST -Z,R24
	SUBI R20,$01
	BRNE L48
L47:
	RET
L10:				;LCD läs ur ram 
	MOV YH,R19
	MOV YL,R18
	RCALL L9
	SUBI R16,$01	; Räkna ner antal byten	
	CPI R16,$FF
	BREQ L49
L51:
	LD R18,Y+
	LDI R24,$5A
	LDI R25,$00
L50:
	SBIW R25:R24,1
	BRNE L50
	LDI R20,$01
	MOV R22,R18
	MOV R24,R20
	RCALL L8
	SUBI R16,$01
	BRCC L51
L49:
	RET
L9:	MOV R18,R24
	LDI R24,$5A
	LDI R25,$00
L52:
	SBIW R25:R24,1
	BRNE L52
	LDI R20,$01
	MOV R22,R18
	LDI R24,$00
	RCALL L8
	RET
L8:	
	TST R24					;LCD 
	BREQ L53
	SBI PORTB,6
	RJMP L54
L53:
	CBI PORTB,6
L54:	
	CBI PORTB,5
	IN R24,PORTB			;
	ANDI R24,$F0
	OUT PORTB,R24
	SBI PORTB,4
	MOV R25,R22
	SWAP R25
	ANDI R25,$0F
	IN R24,PORTB
	OR R24,R25
	OUT PORTB,R24
	NOP
	CBI PORTB,4
	TST R20
	BREQ L55
	IN R24,PORTB
	ANDI R24,$F0
	OUT PORTB,R24
	SBI PORTB,4
	ANDI R22,$0F
	IN R24,PORTB
	OR R24,R22
	OUT PORTB,R24
	NOP
	CBI PORTB,4
L55:
	RET
L24:
;	LDI R24,$20			; Starta ad convertering när cpu är i sleep mode 
;	OUT MCUCR,R24		; för att redusera brus
;	SLEEP				;
	SBI	ADCSR,ADSC		; Starta AD konvertering
ADC_KLAR:						; Kolla om klar
	SBIC ADCSR,ADSC
	RJMP ADC_KLAR	
	IN R24,ADCL
	MOV R18,R24
	CLR R19
	IN R24,ADCH
	CLR R25
	MOV R25,R24
	CLR R24
	OR R24,R18
	OR R25,R19
	RET
L3:
	RETI
L6:				;Läs ur EEDATA
	CP R20,R1
	CPC R21,R1
	BREQ L56
	MOV XL,R24
	MOV XH,R25
L57:
	SBIC EECR,EEWE
	RJMP L57
L58:
	OUT EEAR,R22
	SBI EECR,EERE
	SUBI R22,$FF
	SBCI R23,$FF
	IN R0,EEDR
	ST X+,R0
	SUBI R20,$01
	SBCI R21,$00
	BRNE L58
L56:
	RET
L33:
	CLR ZH
	CLR ZL
	CLR XH
	CLR XL
L60:
	SBRS R22,0
	RJMP L59
	ADD XL,R18
	ADC XH,R19
	ADC ZL,R20
	ADC ZH,R21
L59:
	LSL R18
	ROL R19
	ROL R20
	ROL R21
	LSR R25
	ROR R24
	ROR R23
	ROR R22
	BRNE L60
	SBIW R25:R24,0
	CPC R23,R22
	BRNE L60
	MOV R25,ZH
	MOV R24,ZL
	MOV R23,XH
	MOV R22,XL
	RET
L31:
	SUB XL,XL
	SUB XH,XH
	LDI R21,$11
	RJMP L61
L62:
	ROL XL
	ROL XH
	CP XL,R22
	CPC XH,R23
	BRCS L61
	SUB XL,R22
	SBC XH,R23
L61:
	ROL R24
	ROL R25
	DEC R21
	BRNE L62
	COM R24
	COM R25
	MOV R22,R24
	MOV R23,R25
	MOV R24,XL
	MOV R25,XH
	RET
L34:				; Räkna fram svar ser ut som mull
	LDI XL,$21
	MOV R1,XL
	SUB XL,XL
	SUB XH,XH
	MOV ZL,XL
	MOV ZH,XH
	RJMP L63
L64:
	ROL XL
	ROL XH
	ROL ZL
	ROL ZH
	CP XL,R18
	CPC XH,R19
	CPC ZL,R20
	CPC ZH,R21
	BRCS L63
	SUB XL,R18
	SBC XH,R19
	SBC ZL,R20
	SBC ZH,R21
L63:
	ROL R22
	ROL R23
	ROL R24
	ROL R25
	DEC R1
	BRNE L64
	COM R22
	COM R23
	COM R24
	COM R25
	MOV R18,R22
	MOV R19,R23
	MOV R20,R24
	MOV R21,R25
	MOV R22,XL
	MOV R23,XH
	MOV R24,ZL
	MOV R25,ZH
	RET
L7:
	LDI R24,$00          ; Nolla och vänta 114688us ca 114 mS
	LDI R25,$00
L65:	WDR
	NOP
	NOP
	SBIW R25:R24,1
	BRNE L65
	RET
	
;.org.	$07F0
Kalibering:
;	.db		$07F	

.INCLUDE "EE_WATT_DATA.inc"
