Mach ich!
Muss euch aber warnen, mir wurde schon öfter gesagt das ich einen katastrophalen Programmierstil hab.

Code:
;***************************************************************************** 
;* 
;* DATEINAME: entlader.asm 
;* TITEL   : 
;* DATUM   : 16.6.08 
;* AUTOR   : STK 
;* VERSION   : 1.0 
;* 
;* 
;***************************************************************************** 

.include "m8515def.inc" 

;--KONSTANTENDEKLARATION--------------------------------------------- 
   ; status register bits 
.equ CarryFlag      = 0 
.equ ZeroFlag       = 1 
.equ NegativeFlag   = 2 
.equ TwosFlag       = 3 
.equ SignFlag       = 4 
.equ HalfCarryFlag   = 5 
.equ TransferFlag   = 6 
.equ GlobalFlag     = 7 
.equ Frequenz   	= 4000000
.equ Teiler 	    = 4000

;--VARIABLENDEKLARATION---------------------------------------- 
.def tmp = R16                  ;Temp. Variable 
.def tmp2 = R17
.def sek_zaehler = R18               
.def spg = R19
.def entprell = R20






.CSEG            
.org 0x0000        

rjmp MAIN         		;Reset
rjmp UnusedInt_ISR 		;Ext. Int0
rjmp UnusedInt_ISR		;Ext. Int1 
rjmp UnusedInt_ISR 		;Timer1 Capture Event
rjmp timer		        ;Timer1 Compare Match A
rjmp UnusedInt_ISR 		;Timer1 Compare Match B
rjmp UnusedInt_ISR 		;Timer1 Overflow 
rjmp UnusedInt_ISR 		;Timer0 Overflow
rjmp UnusedInt_ISR 		;Serial Transfer Complete
rjmp UnusedInt_ISR 		;USART Rx Complete
rjmp UnusedInt_ISR 		;USART Data Reg. Empty
rjmp UnusedInt_ISR 		;USART Tx Complete
rjmp UnusedInt_ISR 		;Analog Comperator
rjmp UnusedInt_ISR 		;Ext. Int Request 2
rjmp pause 		;Timer0 Compare Match
rjmp UnusedInt_ISR 		;EEPRom Ready
rjmp UnusedInt_ISR 		;Store Program memory ready
UnusedInt_ISR:   reti 

  
;--Hauptprogramm------------------------------------------------
MAIN: 
   ;Stackpointer initialisieren 
   ldi   tmp,low (RAMEND)         ; RAMEND ist eine im include file vorgegebene Konstante, 
   out   SPL,tmp 
   ldi tmp, high(RAMEND)    
   out   SPH,tmp 

rjmp init                      
                            
Main_loop: 
;Hauptprogramm
	;Akku angesteckt?
		in tmp2, pina
		ldi tmp, 0b01001101  ;Akku erkennung ab 3V
		;Akku ist angeschloßen
		cp tmp2,tmp
		brsh akku_an
		;Akku ist nicht angeschloßen
		cp tmp2, tmp
		brlo akku_ab

rjmp Main_loop; 



;--Unterprogramme----------------------------------------------------- 


akku_ab:
	;Ausgabe auf Display
		;"Akku"
		;"anhängen"
rjmp main_loop

akku_an:
	;Ausgabe auf Display
		;SPG:x,xx
		;Entl:x,x 
	;Warte auf Start-Taste
	in tmp2, pind			;Liest Eingangsport ab
	andi tmp2, 0b00000001  ;Nur das Start-tasten-Bit einlesen
	ldi tmp, 0b00000001
	cp tmp2,tmp
	breq start				;Ist Bit gesetzt, Spring in die Start- Fkt.
	
	;Warte auf Entladespg senken:
	
	;Warte auf Entladespg erhöhen
rjmp main_loop

start:
;Akku wurde erkannt und die Starttaste gedrückt
	;Start-Taste entprellen
	clr entprell
	wh1:
		ldi tmp, 0b00000010
		cp entprell, tmp
	brlo wh1
	clr sek_zaehler
	;Entladevorgang starten	
rjmp entladen_ein


entladen_ein:
	;Kontrolle ob der Akku noch angeschloßen ist
	;Wenn nicht ins Startmenü zurück springen
	
	in tmp, pinc
	ori tmp, 0b00000001 ;Relais aktivieren
	out portc, tmp
	
	;in tmp2, pina
	;ldi tmp, 0b01001101  ;Akku erkennung ab 3V
	;cp tmp2, tmp
	;brlo entladen_aus
	
	;Akkuspg. überwachen
	;Wenn zu niedrig Entladevorgang abbrechen
	in tmp2, pina
	ldi tmp, 0b10000000
	cp tmp2, tmp
	brlo entladen_aus
	
	;Warte auf Stop-Taste
	in tmp2, pind			;Liest Eingangsport ab
	andi tmp2, 0b00000001  ;Nur das Start-tasten-Bit einlesen
	ldi tmp, 0b00000001
	cp tmp2,tmp
	breq entladen_stop				;Ist Bit gesetzt, Spring in die Start- Fkt.

	;Ausgabe auf Display
	;A: x,xx
	;00:00
rjmp entladen_ein


entladen_aus:
;Entladevorgang stoppen weil die Akkuspannung unter
;einem bestimmter Wert gefallen ist
	in tmp, pinc
	andi tmp, 0b11111110
	out portc, tmp
	clr sek_zaehler
	rcall automatik
rjmp akku_an

automatik:
;Nach 30 Sekunden soll der Entladevorgang erneut
;gestartet werden
	ldi tmp, 0b00011110
	cp sek_zaehler,tmp
	brsh start
	
	;Schreibe auf Display
	;Beendet
	;WH in xx

	;Warte auf Stop-Taste
	in tmp2, pind			;Liest Eingangsport ab
	andi tmp2, 0b00000001  ;Nur das Start-tasten-Bit einlesen
	ldi tmp, 0b00000001
	cp tmp2,tmp
	breq akku_an

	in tmp2, pina
	ldi tmp, 0b01001101  ;Akku erkennung ab 3V
	;Akku ist nicht angeschloßen
	cp tmp2, tmp
	brlo main_loop

rjmp automatik

entladen_stop:

	clr entprell
	wh2:
	ldi tmp, 0b00000010
	cp entprell, tmp
	brlo wh2


	;Entladevorgang abbrechen
	in tmp, pinc
	ldi tmp2, 0b00000001
	sub tmp, tmp2
	out portc, tmp

rjmp main_loop



init: 
	ldi spg, 0b01010000 ;vorderen 4 Bit vor Komma, hinteren 4 Bit nach Komma

	clr sek_zaehler
	
	;Ausgänge setzen
	ser tmp 
   	out ddrc, tmp

	;Eingänge setzen
	clr tmp
	out ddra, tmp
	out ddrd, tmp


;Timer1 setzen
	clr tmp
	out tccr1a, tmp
	ldi tmp, 0b00001001 ;nur zu Testzwecken (normal 0b00001101)
	out tccr1b, tmp

	ldi tmp, 0b01100001		;Timer Einstellungen
	out tIMSK, tmp

	
	ldi tmp, HIGH(Frequenz / Teiler)
	out ocr1ah, tmp
	
	ldi tmp, LOW(Frequenz / Teiler)
	out ocr1al, tmp
;Timer0 setzen
	ldi tmp, 0b00000001  ;nur zu Testzwecken (normal 0b00000101)
	out tccr0, tmp
	ldi tmp, 0b01001110
	out ocr0, tmp

	sei   
rjmp main_loop 

;*********Interrupt***********
;Zähler für die Sekundenzählung
timer:
	inc sek_zaehler
reti
;Zähler für die Entprellung
pause:
	inc entprell
reti
Danke
Stefan