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
Es geht eigentlich fast immer schief mit dem internen Oszillator, sobald man das Board vom Schreibtisch in die harte Realität bewegt :-) Der Tiny2313 hat aber noch die DIV8-Fuse, die im Auslieferungszustand gesetzt ist. Also Oszillator 8MHz, CPU-Clk 1MHz.
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.