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.