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.
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
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.
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.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 44 gości