Servus

Ich wieder Folgende Aufgabe gilt es zu lösen (ist gelöst, ich such nur den Fehler ): Die LEDs solen Binär zählen und zwar per 10bit geteiltem 16bit Timer1, Zeit einstellbar (0...255 entsprechen dann 2,22 bis 5,xms). Geschrieben haben wir folgenden Code

Code:
	.nolist							; include-file nicht in Listing
	.include	"m128def.inc"		; Definitionen für ATmega 128 einbinden


	.list							; Listing erstellen


	.def	akku		= r16		; r16 als Rechenregister "akku" definieren
	.def	msTimer		= r23		; r23 als Zeit-Einstellungsregister
			; r24 als Zählregister
	.def	templ		= r17		; Zwischenspeicher 1
	.def	temp2		= r18		; Zwischenspeicher 2
	.def	PulsCounter	= r19
	.equ	key_pin		= PINA		; Tasterpins
	.equ	key_port	= PORTA		; Datenregister (Taster)
	.equ	key_ddr		= DDRA		; Datenrichtungsregister (Taster)

	.equ	led_port	= PORTB		; Datenregister (LED)
	.equ	led_pin		= PINB
	.equ	led_ddr		= DDRB		; Datenrichtungsregister (LED)


	.cseg

;-------Adress Tabelle für Interrupt-Vektoren-----------------------------

	.org		0x0000				; Interrupt-Vektor für RESET
	rjmp		Init
	
	.org		0x0002				; Interrupt-Vektor für externen Interrupt 1
	rjmp		Extint1

	.org		0x0018				; Interrupt-Vektor für Timer/Counter-0-Interrupt
	rjmp		TC1int

	.org		0x0045				; Ende der Interrupt-Vektor-Tabelle

;-------Macros-------------------------------------------------------------
; Pin Toggeln
.macro TogPin
	SBIS		@0,@1				; Wenn Bit (@1) in I/O-Reg. (@2) gesetzt, überspringe nächsten Befehl
	rjmp		SetPin
ClrPin:
	cbi			@0,@1
	rjmp		TogPinx
SetPin:
	SBI			@0,@1
TogPinx:
.endmacro
;--------------------------------------------------------------------------
	
Init:							; Beginn des Hauptprogrammes

	ldi			r16,LOW(RAMEND)		; Stack Initialisieren
	out			SPL,r16
	ldi			r16,HIGH(RAMEND)
	out			SPH,r16

	ser			akku				; Alle Bits in Akku setzen
	out			DDRB,akku			; PORTB als Ausgang (alle Bits 1)

	ldi			msTimer,0x99
	out			OCR1AL,msTimer

	ldi			templ,0
	out			OCR1AH,templ	

	ldi			templ,0x0
	out			TCNT1L,templ

	ldi			templ,0x0
	out			TCNT1H,templ

	ldi			akku,0b00011000
	out			TIMSK,akku

	ldi			akku,0b00000100
	out			TCCR1B,akku			; Übertrage auf Timer Counter Control Register

	
	ldi			PulsCounter,255


	

Prog:
	
	in			templ,TIFR
	SBRC		templ,4
	rcall		Count
	rjmp		Prog


;-------Unterprogramme----------------------------------------------------
Extint1:							; ISR für externen Interrupt 1

	reti

Count:
	TogPin		led_port,0

	ret

TC1int:								; ISR für Timer/Counter 1 Interrupt	
	
	reti
.exit
Der tuts aber nicht! Wenn ich den Makro Aufruf statt in Count in TC1int schreibe funktioniert alles Tadellos, die LED wird umgeschaltet.. .Ich gehe damit davon aus das der Timer sowie die einstellung von OCR funktionieren.

Wenn ich den eigentlichen Zähl Code
Code:
	dec PulsCounter
	out led_port,PulsCounter
irgendwohin, also entweder in Count, die Programmschleife selbst (das Dekrementieren dann hinter den SBRC Befehl) oder in den Interrupt selbst packe funktioniert es auch nicht.
Die LED sind Low Aktiv.

Die überprüfung des Bits im TIFR Register hat der ING genauso in der Musterlösung, bei ihm soll es funktionieren (ebenfalls Mega12.

Weder der LaborING noch mein Laborpartner noch ich wissen was wirklih los ist ...


Findet jemand den Fehler?


Grüße