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
(jeste pro rychlost 4,8kb si vystacis s UBRRL - hodnota “143”)
Po vymene enum za cisla to chodi jak vitr, akorat zas musim po celym programu komentovat, co jsem to vlastne proved (u enumu je to pri spravnych nazvech jasny…)
muzes ti to nastavit klidne na 2 Mbit/s, kdyz to budou umet obe komunikujici strany, bude to dostatecne blizko a pouzijes kabel odpovidajici kvality