Witam!
Próbuję uruchomić UARTA w trybie asynchronicznym w asemblerze.
Debbuguję program i po wykonaniu linii:
zmienia mi się stan rejestru UBRRH z 0x00 na 0x26. Pytanie - dlaczego?
Poniżej strzępki moich asemblerowskich myśli
Pozdrawiam,
Adam Pyka
Próbuję uruchomić UARTA w trybie asynchronicznym w asemblerze.
Debbuguję program i po wykonaniu linii:
out UCSRC, R16zmienia mi się stan rejestru UBRRH z 0x00 na 0x26. Pytanie - dlaczego?
Poniżej strzępki moich asemblerowskich myśli
.INCLUDE "tn2313def.inc"
; kwarc 8MHz
.equ BAUD=51 ;predkosc transmisji szeregowej 9600bps
.list
.cseg
;inicjalizacja stosu
cli ;wylacz globalna obsluge przerwan
ldi R16, RAMEND ;laduje rejestr roboczy adresu konca pamieci SRAM
out SPL, R16 ;inicjalizuje wskaznik stosu
sei ;przywroc przerwania
Inicjacja: ;inicjacja interfejsu USART w trybie asynchroniznym
cli ;wylacz globalna obsluge przerwan
ldi R17, high(BAUD) ;laduje MSB do rejestru pomocniczego
ldi R16, low(BAUD) ;laduje LSB do rej. pomocn.
out UBRRH, R17 ;laduje wartosci do rejestrow
out UBRRL, R16 ;dla predkosci 9600bps
clr R16
out UCSRA, R16 ;zeruje wartosc rejestru funkcyjnego USART Control Status Register A
ldi R16, (1<<UCSZ1)|(1<<UCSZ0)
out UCSRC, R16 ;ustawienia ramki - slowo 8-bitowe, brak bitu parzystosci, 1 bit stopu
ldi R16, (1<<RXEN)|(1<<TXEN)|(1<<UDRIE)
out UCSRB, R16 ;wlacz nadajnik i odbornik i zezwol na przerwania od rejestru UDR
sei ;przywraca globalna obsluge przerwan
Gotowosc_nadania: ;sprawdza gotowosc USARTu do nadawania
sbis UCSRA, UDRE ;pomija nastepny rozkaz, jesli flaga UDRE ustawiona (bufor nadawczy zajety)
rjmp Gotowosc_nadania ;czeka na wyzerowanie flagi
Nadaj: ;nadaje slowo przez USART
ldi R16, 0xAB ;laduje rejestr pomocniczy wartoscia do nadania
out UDR,R16 ;i transmituje slowo
Petla:
rjmp Petla ;nieskonczona petla
Pozdrawiam,
Adam Pyka