Hallo zusammen Ich bin Anfänger. Warum kann ich mit dem Terminalprogramm nichts auf das Port B ausgeben? Möchte dies über Interrupt machen. Baudrate und Taktfrequenz müsste stimmen. So wie auch im Terminal. MfG Peter .include "8515def.inc" .equ CLOCK = 6000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 .def temp = r16 rjmp Reset ;Reset vector reti ;Ext Int 0 reti ;Ext Int 1 reti ;Timer 1 Capt reti ;Timer 1 CompA reti ;Timer 1 CompB reti ;Timer 1 OVF reti ;Timer 0 OVF reti ;Serial Transfer Complete rjmp retiint_rxc ;UART Rx Complete reti ;UART Data register empty reti ;UART Tx Complete reti ;Analog Comparator Reset: ldi temp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, temp sbi UCR,TXEN ;TXEN = 1 (Transmitter Enable) sbi UCR,RXEN ;RXEN = 1 (Reciever Enable) ldi temp,UBRRVAL ;Baud out UBRR,temp ldi temp,0xFF out DDRB, temp ;Datenrichtung von Port B einstellen, 1 = Ausgang ldi temp, 0xFF out PORTB, temp ;Leds ausschalten Main: ;Hier könnte Hauptprogramm sein rjmp Main retiint_rxc: push temp ;temp auf dem Stack sichern in temp, UDR out PORTB, temp pop temp ;temp wiederherstellen reti
"Möchte dies über Interrupt machen." Dann solltest Du sie auch freigeben. Peter
Hallo auch peter In bin noch Anfänger aber ich habe jetzt eingefügt aber ohne erfolg sbi UCR, RXEN sbi UCR, RXCIE ;sbi UCSRB, TXEN ldi temp,UBRRVAL ;Baudrate einstellen out UBRR,temp Guss Peter
@Peter Bisher hast Du nur die Interrupt-Bits gesetzt aber noch nicht die Interrupts freigegeben. sbi UCR, RXEN sbi UCR, RXCIE sei Gruß Jörg
Hallo Jörg Und wie mache ich das? Ich bin Anfänger und habe es nicht herausgefunden. Ich bin allen dankbar, aber warum kann man wenn man es schon weiss ein Beispiel hinschreiben? Wie stoppe ich diese Interrupts und wie starte ich diese? MfG Peter
Hat Jörg doch schon geschrieben: SEI = alle Interrupts an CLI = alle Interrupts aus Steht auch im Datenblatt (mit dem Zaunpfahl wink) ;)
Sorry war total genervt da heute überhaupt nichts funktiniert. habe es nachträgelich gesehen. Hier mein geändertets Programm aber dieses sche... läuft nicht. Wer sieht den Fehler? .include "8515def.inc" .equ CLOCK = 6000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 .def temp = r16 rjmp Reset ;Reset vector reti ;Ext Int 0 reti ;Ext Int 1 reti ;Timer 1 Capt reti ;Timer 1 CompA reti ;Timer 1 CompB reti ;Timer 1 OVF reti ;Timer 0 OVF reti ;Serial Transfer Complete rjmp int_rxc;UART Rx Complete reti ;UART Data register empty reti ;UART Tx Complete reti ;Analog Comparator sei Reset: ldi temp,LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp,HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, temp ldi temp,UBRRVAL ;Baudrate einstellen out UBRR,temp sbi UCR, RXEN sbi UCR, RXCIE ldi temp,0xFF out DDRB, temp ;Datenrichtung von Port B einstellen, 1 = Ausgang Main: ;Hier könnte Hauptprogramm sein out PORTB,temp ;r16 ausgabe an PORTB ROR temp ;Rotiert r16 nach links Zeit: ;Marke für Zeitverzögerung inc r17 ;erhöht den Registerinhalt um +1 brne Zeit ;wenn r17<255 dann wird inc r18 ;erhöht den Registerinhalt um +1 brne Zeit rjmp Main ;**************** Empfangen **************** int_rxc: in temp,SREG ;CPU-Status sichern push temp ;temp auf dem Stack sichern ;in temp, UDR ;später Wert ausgeben ldi temp, PORTB inc temp out PORTB, temp pop temp ;temp aus dem Stack wieder herstellen reti ;Interrupt beenden ;**************** Empfangen ****************
Der SEI Befehl wird so niemals abgearbeitet. Setze ihn in das Hauptprogramm. Gruß, Frank
bzw in die reset routine. direkt unter die freigabe deiner einzelnen UART-Interrupt freigaben. sei ist für die globale interrupt freigabe ab da werden also mögliche interrupt ausgeführt, sofern sie zusätzlich einzeln zB mit RXCIE freigeschaltet 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.