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
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
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
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 ****************
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
Eine eigene Frage?
Dieser Thread ist über 23 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.