Servus
Ich wiederFolgende 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
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.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
Wenn ich den eigentlichen Zähl Code
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.Code:dec PulsCounter out led_port,PulsCounter
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







Zitieren

Lesezeichen