Już daje kawałek kodu. Narazie testuję bez przerwań:
Ujme to tak:
Kod: Zaznacz cały
INI_UART: ;inicjalizacja UARTa atmega8
ldi temp,0 ;ustawienie prędkości UARTa
out UBRRH,temp ;na 1200b/s, czyli UBBR=207
ldi temp,0xCF
out UBRRL,temp
To by sie zgadzalo, pod warunkiem ze Fosc=4MHz oraz nie stosujesz trybu x2. Przy okazji, jesli kozystasz z UARTU, stosuj kwarce, wewnetrzny osc jest malo dokladny, pozatym warto stosowac kwarce x*115200.
Kod: Zaznacz cały
ldi temp,0b00011000 ;wyłaczenie przerwań z UARTA
out UCSRB,temp ;i właczenie nad/odb
ldi temp,0b10100110 ;ustawienie ramki 8data,1stop bit,parzystośc
out UCSRC,temp
UCSRB ok, UCSRC tez ok. Na przyszlosc sugeruje notacje taka:
Kod: Zaznacz cały
ldi temp, (1<<RXEN)|(1<<TXEN)
out UCSRB, temp
ldi temp, (1<<URSEL)|(3<<UCSZ0)|(2<<UPM0)
out UCSRC, temp
Jest czytelniejszy.
Kod: Zaznacz cały
;----------------procedury nadawania z mega162-----------------------------
nadajRS:
rcall nadajRS1
ldi temp4,0x36
out udr1,temp4
ret
nadajRS1:sbis UCSR1A,udre1
rjmp nadajRS1
ret
Troszke tracisz krokow na tym rcall (mozna to napisac bez wywolania, sprawdzac w nadajRS), pozatym wyglada ok.
Kod: Zaznacz cały
;---------------------------------
start2: rcall odbRS ; w petli głównej co chwile sprawdzam czycoś nie odebrano
;...
rjmp start2
;-------
odbRS: sbis UCSRA,RXC ;czekamy na odbiór danej
ret ; nie ma danej
in danaM,UDR ;jest dana
ret
Tez wyglada ok.
Czy dobrze rozumie, że jak zrobione to bedzie na przerwaniach, to po przerwaniu że jest dana wystarczy tylko odczytać daną komenda IN i nic więcej.(czy jest coś istotnego na co mam zwrócic uwage)
A przy nadawaniu po przerwaniu że bufor pusty nadac rozkazem out ?
Podsumuwując: nie trzeba już ustawic jakiegoś bitu? wszytsko zrobi sie automatycznie?
Wlasciwie tak. Moje skromne doswiadczenie nie wskazuje tu na mozliwosc jakis pulapek. Choc osobiscie nie przypominam sobie bym robil nadawanie na przerwaniu, ale odbior robie praktycznie zawsze.
Co najlepiej sprawdzać ( czy zawsze trzeba sprawdzać fe, ov bity?)
wiem, że są pdf...ale dla niezbyt wprawnego programisty nie wszystko okazuje sie takie oczywiste ( tymbardziej że coś nie działa).
fe, ov ??
A w pdf masz przewaznie przyklady kodu w C i ASM, wystarczy przewaznie przepisac i uruchomic w Studio w symulatorze, by zobaczyc jak to dziala.