Hallo,
ich bin gerad beim Kapitel Uart des AVR-Tutorials.
Leider habe ich ein Problem mit dem ersten Programm, das einen an den µX
gesendeten Zahlenwert über LEDs ausgeben soll.
Ich habe 6 LEDs angeschlossen und zwar an PD0 bis PD5. OK PD0 kann
nichts anzeigen, weil RTX (read) aktiviert ist aber auch sonst tut sich
nicht viel.
Hier nochmal das proggi aus Tutorial:
.include "m8def.inc"
.def temp = R16
.equ F_CPU = 4000000 ; Systemtakt in Hz
.equ BAUD = 9600 ; Baudrate
; Berechnungen
.equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden
.equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille
Fehler
.error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit
zu hoch!"
.endif
; Stackpointer initialisieren
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, LOW(RAMEND)
out SPL, temp
; Port D = Ausgang
ldi temp, 0xFF
out DDRD, temp
; Baudrate einstellen
ldi temp, HIGH(UBRR_VAL)
out UBRRH, temp
ldi temp, LOW(UBRR_VAL)
out UBRRL, temp
; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
out UCSRC, temp
sbi UCSRB, RXEN ; RX (Empfang) aktivieren
receive_loop:
sbis UCSRA, RXC ; warten bis ein Byte
angekommen ist
rjmp receive_loop
in temp, UDR ; empfangenes Byte nach temp
kopieren
out PORTD, temp ; und an Port D ausgeben.
rjmp receive_loop ; zurück zum Hauptprogramm
Ich nutze, weil ich gerad nichts anderes zur Verfügung habe, den
internen Takt von 4MHz. Die Baudrate liegt bei 9600.
Ich nutze am PC Hterm sind die Einstellungen so korrekt oder muss dort
noch etwas beachtet werden?
ich wollte "0110" also die Zahl 6 übertragen! Dann müssten doch die LEDs
1 und 2 leuchten (LED0 bis LED5 werden verwendet).
Ich musss doch bei Hterm nur verbinden und auf Asend klicken etc.?