Gast
#263704
Also irgendwie bekomme ich meine serielle Verbindung über UART nicht am
Laufen. Ich benutze hier einen ATmega8, der extern von einem Oszillator
auf 4 MHz gebracht wird (werden soll).
Ich bin mir zunächst nicht sicher, ob die Fuses dafür richtig gesetzt
sind, deshalb der Dateianhang...
Stimmt das so? Der Oszillator ist über XTAL1 mit dem Mikrocontroller
verbunden.
Funktioniert UART eigentlich nur mit externer Taktung oder geht das
auch über die Internal Clock?
Zum Test der UART-Funktion habe ich folgendes Programm kompiliert und
hochgeladen:
.include "m8def.inc"
.def temp = r16
.equ CLOCK = 4000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
; Baudrate einstellen
ldi temp, LOW(UBRRVAL)
out UBRRL, temp
ldi temp, HIGH(UBRRVAL)
out UBRRH, temp
; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp
sbi UCSRB,TXEN ; TX aktivieren
loop: ldi temp, 'T'
rcall serout ; Unterprogramm aufrufen
ldi temp, 'e'
rcall serout ; Unterprogramm aufrufen
ldi temp, 's'
rcall serout ; ...
ldi temp, 't'
rcall serout
ldi temp, '!'
rcall serout
ldi temp, 10
rcall serout
ldi temp, 13
rcall serout
rjmp loop
serout:
sbis UCSRA,UDRE ; Warten bis UDR für das
nächste
; Byte bereit ist
rjmp serout
out UDR, temp
ret ; zurück zum Hauptprogramm
Da ist hoffentlich kein Fehler enthalten???
Danke schon mal für die Beantwortung meiner Fragen.
Um die Funktion zu testen arbeite ich übrigens mit HyperTerminal, was
problemlos klappen sollte oder?
