Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

serial

awit
-
-
Posty:1
Rejestracja:7 maja 2003, o 08:26
Lokalizacja:Kutno
serial

Postautor: awit » 2 lip 2003, o 11:24

może ktoś mi wytłumaczy dlaczego poniższy kawłek:

Enable Serial
Enable Interrupts
On Serial Rs232 Nosave

powoduje wykonywanie owej "rs232" bez względu na to czy jest + czy 0 na p3.0 i p3.1,
czy przerwanie nie powinno być wywoływane tylko gdy "coś" zostanie podane przez COM'a?
dzieje się tak w symulacji i w rzeczywistości z tym, że nie mam faktycznie podpiętego kompa.

Awatar użytkownika
ZbeeGin
-
-
Posty:170
Rejestracja:3 kwie 2003, o 10:10
Lokalizacja:Metropolia Katowice

Postautor: ZbeeGin » 3 lip 2003, o 10:15

Postaram się przedstawić wskazówki do skonstruowania procedur obsługi
przerwań dla sprzętowego RS-a. Jako, że program piszesz w BASCOM-ie; pokaże
co i jak zarówno dla 8051 jak i AVR, gdyż występują tu poważne róźnice.

** 8051 **

"Pięćdziesiątka jedynka" ma dość prosty UART. BASCOM 8051 traktuje
przerwanie jako jedno - SERIAL. W rzeczywistości są dwa jego źródła:
nadajnik i odbiornik. W procedurze przerwania musisz stwierdzić co wywołało
przerwanie testując flagi RI (odebrano znak) i TI (nadano znak). Ponadto sam
procesor wprowadza tu pewien "kruczek". Mianowicie flagi te, po przyjęciu
przerwania, nie są automatycznie zerowane, tak jak z TIMERów. Dlatego też na
początku procedury obsługi musisz flagę (flagi) skasować. Inaczej przerwanie
SERIAL będzie stale zgłaszane.

** AVR **

W AVR jest podobnie, z tą róźnicą że dochodzi jeszcze jedna flaga - pusty
bufor UDRE. Atmel wprowadził dodatkową flagę by umożliwić użytkownikowi
jakby podwójne buforowanie - kolejkę. Jeśli przykładowo nadajesz jakiś ciąg
danych to pierwszy bajt wysyłasz do bufora. UART natychmiast pobiera ten
bajt do rejestru przesuwającego, rozpoczyna transmisję i sygnalizuje, że
możesz już w tej chwili wpisać do bufora następny znak.
Właśnie dopiero po nadaniu ostatniego znaku z bufora, i po stwierdzeniu jego
opróźnienia ustawiana jest flaga TXC (transmisja zakończona).
Jest to trochę skomplikowane, ale widocznie komuś to było potrzebne. ;-)
I jeszcze jedno flagi UDRE nie da się(!!!) bezpośrednio skasować programowo.

Sterowanie odbiornikiem jest "prawie" takie samo jak w 8051. Jest jedna
flaga RXC ustawiana jeśli UART odebrał bajt. Przy odbieraniu znaków pomocne
stają się także specjalne flagi błędów:
OR - przepełnienie bufora. Ustawiany jeśli nie odczytałeś znaku z bufora
a UART odebrał już następny znak, który zamazał ten czekający w buforze,
FE - błąd ramki. Ustawia się jeśli szybkość transmisji w nadajniku i
odbiorniku jest nieco różna. (Bit stopu zakończył się wcześniej niż
przewidywano).
Jeśli zatem transmisja ma być wolna od błędów stan tych dwóch znaczików
trzeba uwzględniać. Flaga RXC jest ustawiana pomimo ustawienia jednego lub
obu flag OR i FE!!


UWAGA!! W procku 8051 bity w porcie P3 odpowiadające końcówkom RxD i TxD
muszą być ustawione. Wtedy P3.0 i P3.1 będą pełniły rolę funkcji
alternatywnych.
W AVR końcówki pełniące rolę RxD i TxD należy ustawić zgodnie ze spełnianą
funkcją. RxD jako WEJŚCIE a TxD jako WYJŚCIE.
Ostatnio zmieniony 30 lis 2008, o 11:38 przez ZbeeGin, łącznie zmieniany 1 raz.

bethon
-
-
Posty:7
Rejestracja:4 cze 2003, o 22:06
Lokalizacja:Poznań

Postautor: bethon » 19 mar 2004, o 11:44

Cześć.
ZbeeGin, wiesz może jak zmusić sprzętowego UART'a w 2313 do pracy z kontrolą parzystości? W Bascomie się tego nie da zrobić. A w asemblerze? Na 8051 potrafię ale AVR-y mają inną listę instrukcji i jakoś mi nie wychodzi.

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości