Ahoj, tak jsem se zas pustil dál do studování AVR, tentokrát UART.
Zkompiloval jsem to, nalil do kontroléru, a jak jíinak, než katastrofa. V terminálu se zobrazuje všecko možný, jen ne to, co tam má být.
Předem díky, že se mi kouknete na zdroják. Popravdě netuším kde může být zrada, dokonce jsem to celé i odsimuloval, a zdálo se že to jede vpořádku.
[code]
.NOLIST
.INCLUDE "m8def.inc"
.LIST
;******************************************************************************
; MUJ PRVNI TEST RS232
;
; Vyšle text “Hello world!”
;
; 115200-8N1
;
; Baudrate = 115200bps
; Xtal = 11.0592MHz
;
;
;******************************************************************************
.equ XTAL = 11059200
.equ BAUDRATE = 115200
.equ UBRR = XTAL/16/BAUDRATE-1
.CSEG
.ORG 0x000
rjmp Start
.ORG 0x030
Start: ldi R16, low(RAMEND) ;Nastaveni stacku
out SPL, R16
ldi R16, high(RAMEND)
out SPH, R16
;INICIALIZACE UARTU 115200-8N1
ldi R16, 0b00100000 ;U2X=0
out UCSRA, R16
ldi R16, 0b00001000 ;Transmitter enable
out UCSRB, R16
ldi R16, 0b10000110 ;ASYNchronous mode, parity None, 1 stopbit, 8 databits,
out UCSRC, R16
ldi R16, low(UBRR)
out UBRRL, R16
ldi R16, high(UBRR) | (1<<URSEL)
out UBRRH, R16
;ODESLANI "Hello world!"
ldi R16, 'H' ;Vyšli znak "H"
rcall UART_send
ldi R16, 'e' ;Vyšli znak "e"
rcall UART_send
ldi R16, 'l' ;Vyšli znak "l"
rcall UART_send
ldi R16, 'l' ;Vyšli znak "l"
rcall UART_send
ldi R16, 'o' ;Vyšli znak "o"
rcall UART_send
ldi R16, ' ' ;Vyšli znak " "
rcall UART_send
ldi R16, 'w' ;Vyšli znak "w"
rcall UART_send
ldi R16, 'o' ;Vyšli znak "o"
rcall UART_send
ldi R16, 'r' ;Vyšli znak "r"
rcall UART_send
ldi R16, 'l' ;Vyšli znak "l"
rcall UART_send
ldi R16, 'd' ;Vyšli znak "d"
rcall UART_send
ldi R16, '!' ;Vyšli znak "!"
rcall UART_send
sem: rjmp sem ;Nekonečná smyčka
;Odešle znak po UARTU
UART_send: sbis UCSRA, UDRE ;Počkáme na prázdný UDR
rjmp UART_send
out UDR, R16
ret
[/code]w