Hallo Leute, habe mir nen Counter erstellt doch dieser will nicht so ganz hat einer eine Idee wieso nicht hier mein Sourecode, ich hoffe ihr findet meinen Fehler, ich verzweifel! Auch so kleine Beschreibung wie es mal laufen sollte Taster wird 3 mal gedrückt bei falender Flanke löst ein Interrupt Port B aus (LED). Vielen Dank! .include "8515def.inc" .def temp = r16 .equ start = 256 - 3 rjmp reset ; Reset Handler reti ; IRQ0 Handler reti ; IRQ1 Handler reti ; Timer1 Capture Handler reti ; Timer1 compare Handler reti ; Timer1 Overflow Handler rjmp counter0 ; Timer0 Overflow Handler reti ; SPI Transfer Complete Handler reti ; UART RX Complete Handler : RXCIE reti ; UDR Empty Handler reti ; UART TX Complete Handler reti ; ADC Conversion Complete Interrupt Handler reti ; EEPROM Ready Handler reti ; Analog Comparator Handler reset: ldi temp, RAMEND out SPL, temp ; set stack pointer ldi temp, 0x00 out DDRD, temp ; PORTD configured for input ldi temp, 0xFF out DDRB, temp ; PORTB configured for output ldi temp, 0xFF out PORTB, temp ; LEDs ausschalten ldi temp, 1<<TOIE0 ; 0000 0010 out TIMSK, temp ; timer 0 interrupt ein ldi temp, start out TCNT0, temp ; Startwert des Counters ldi temp, 0b00000111 out TCCR0, temp ; Counter inkrementiert bei fallender Flanke an Pin T0 (Pin 4 von Port D) sei ; interrupts generell aktivieren main: loop: rjmp loop ;-------------------------------------------------- counter0: ldi temp, 0x00 out PORTB, temp ; wait ca. 1 seconds ldi r17, 0 ldi r18, 0 ldi r19, 35 delay: dec r17 brne delay dec r18 brne delay dec r19 brne delay ldi temp, 0xFF out PORTB, temp ldi temp, start out TCNT0, temp ; Startwert des Counters neu einstellen reti
Oh diese Zeilen aus dem Code bitte nicht beachten main: loop: rjmp loop Mfg Andreas
musst du vielleicht auch mal die Antworten auf deine diversen crossposts wenigstens lesen. Wie du siehst, ist das nicht sonderlich beliebt :-(
"Kann mir dann keiner Helfen?" 1. Beschreibung der anwendung 2. Beschreibung des Programms 3. welche Funktion geht anders als erwartet 4. wie geht sie anders als erwartet 5. wie sollte es sein, wenns richtig wäre Je ausführlicher, umso größer die Chance, daß jemand einen Blick riskiert. So aber, ohne alles, wirds wohl kaum einer tun. Peter
Ich habe mich erbarmt und das Programm durch den Simulator gejagt. Das erste Problem ist offenbar, dass T0 eben NICHT auf "Pin 4 von Port D" liegt, sondern auf PB0, also Pin 0 von PortB. Ausserdem wird der Counter mit Belegung 111 im TCCR0-Register bei STEIGENDER Flanke inkrementiert, die richtige Belegung wäre 110. Zweitens hast das Programm offenbar mehr oder weniger 1:1 aus dem "Wie sag ich's meinem AVR" entnommen, aber dort ist das Programm für den 4433, nicht für den 8515 - da sind die Probleme natürlich vorprogrammiert, wenn man nicht aufpasst. Zum einen solltest Du schon mal ldi temp, RAMEND out SPL, temp ersetzen durch ldi temp, HIGH(RAMEND) out SPH, temp ldi temp, LOW(RAMEND) out SPL, temp zum anderen solltest Du die Interrupt-Tabelle am Anfang ersetzen durch rjmp reset .org OVF0addr rjmp counter0 denn ansonsten wird nicht einmal der richtige Interrupt aufgerufen. Da Dein Eingabepin nun also aber auf PortB liegt, nicht auf PortD, musst Du natürlich auch die ganzen PORTB und PORTDs in Deinem Code vertauschen etc. Im Anhang findest Du eine Version, in der die genannten Fehler korrigiert sind.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.