Gast
#2479546
Moin,
Mein USART mit dem tiny2313 funktioniert nicht! Es kommen zwar Signale
ins terminal, jedoch die falschen. Arbeite gewöhnlich mit dem Atmega8,
daher befürchte ich ein Bit falsch gesetzt zu haben oder soetwas. Code
unten. Ich habe keinen externen Quarz angeschlossen. Ist dies ein muss?
.include "tn2313def.inc"
.def A = r16
.equ F_CPU = 8000000 ; 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
.org 0x0000
rjmp Start
;---------------------------------------------------
Start: ldi r16, HIGH(UBRR_VAL)
out UBRRH, r16
ldi r16, LOW(UBRR_VAL)
out UBRRL, r16
ldi r16, (1<<UCSZ1)|(1<<UCSZ0)
out UCSRC, r16
sbi UCSRB,RXEN
sbi UCSRB,TXEN
ldi A, LOW(RAMEND)
out SPL,A
;-------------------------------------
Main: ldi A,'A'
rcall senden
rjmp Main
;-------------------------------------
Get_RX: sbis UCSRA,RXC
rjmp Get_RX
in A,UDR
ret
senden: sbis UCSRA,UDRE
rjmp senden
out UDR,A
ret