LABORATORIUM TECHNIKA MIKROPROCESOROWA Port transmisji szeregowej USART MCS'51 Opracował: Tomasz Miłosławski
1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się ze sposobami komunikacji mikrokontrolera rodziny MCS-51 przez wbudowany port szeregowy USART z komputerem PC oraz innymi urządzeniam posiadającymi synchroniczny lub asynchroniczny port szeregowy oraz jego konfiguracją i oprogramowaniem. 2. Charakterystyka portu szeregowego USART MCS-51 Wbudowany port szeregowy umożliwia przesyłanie informacji szeregowej w jednym z czterech trybów: tryb 0 półdupleksowa szeregowa transmisja synchroniczna 8-bitowych znaków z prędkością f S = 1/12 F XTAL, tryb 1 dupleksowa szeregowa transmisja asynchroniczna 8-bitowych znaków z prędkością ustalaną programowo, tryb 2 dupleksowa szeregowa transmisja asynchroniczna 9-bitowych znaków z prędkością f S = 1/32 F XTAL lub 1/64 F XTAL, tryb 3 dupleksowa szeregowa transmisja asynchroniczna 9-bitowych znaków z prędkością ustalaną programowo. O konfiguracji portu szeregowego decydują bity rejestru SCON znajdującego się w obszarze SFR wewnętrznej pamięci danych mikrokomputera (adres 98H). SCON.7 SM0 ustawienie trybu pracy, SCON.6 SM1 ustawienie trybu pracy, SCON.5 SM2 znacznik maskowania odbioru znaku, SCON.4 REN uaktywnienie odbiornika, SCON.3 TB8 dziewiąty bit wysyłanego znaku w trybie 2 i 3, SCON.2 RB8 dziewiąty bit odebranego znaku w trybie 2 i 3, SCON.1 TI wskaźnik wysłania znaku, znacznik zgłoszenia przerwania, SCON.0 RI wskaźnik odebrania znaku, znacznik zgłoszenia przerwania. Ustawienie trybu pracy zależne jest od stanu bitów SM0 i SM1, co przedstawia Tabela1: Tabela 1 SM0 SM1 TRYB 0 0 0 0 1 1 1 0 2 1 1 3 W celu wysłania znaku przez port szeregowy, po uprzednim określeniu trybu pracy i prędkości transmisji, należy zapisać go do rejestru wyjściowego, natomiast znaki odebrane znajdują się w rejestrze wejściowym. Oba te rejestry występują pod tą samą nazwą SBUF i adresem 99H w obszarze SFR wewnętrznej pamięci danych. 2
RxD dane wyj. D0 D1 D2 D3 D4 D5 D6 D7 TxD CLK Rys.1. Przebiegi czasowe portu szeregowego w trybie 0 nadawanie. µc 8051 RxD TxD X CLK SIPO Rys.2. Wykorzystanie portu szeregowego w trybie 0 - nadawanie. RxD dane wej. D0 D1 D2 D3 D4 D5 D6 D7 TxD CLK Rys. 3. Przebiegi czasowe portu szeregowego w trybie 0 odbiór. µc 8051 RxD TxD Y CLK PISO Rys. 4. Wykorzystanie portu szeregowego w trybie 0 odbiór. 3
START D0 D1 D2 D3 D4 D5 D6 D7 STOP Rys.5. Format danych w trybie 1. START D0 D1 D2 D3 D4 D5 D6 D7 D8 STOP Rys.6. Format danych w trybie 2 i 3. µc8051 RS232 Konwerter poziomów RS-232 TTL TxD RxD Rys. 7. Połączenie µc8051 z komputerem PC za pomocą interfejsu RS232C w trybie 1, 2 lub 3. 3. Określenie prędkości transmisji portu szeregowego USART MCS-51 w trybach 1 i 3 Do programowego określenia prędkości transmisji w trybie 1 i 3 wykorzystywany jest sygnał przepełnienia licznika T1 lub licznika T2 (np. w µc8052). W przypadku wykorzystania licznika T1 w trybie 2, częstotliwość przepełnienia licznika wynosi: stąd prędkość transmisji f T1 = F XTAL / (12 * (256-TH1)) f S = f T1 / 32 dla SMOD = 0, f S = f T1 / 16 dla SMOD = 1, SMOD bit sterujący w rejestrze PCON (adres 97H). 4
Wykorzystanie licznika T2 do określania prędkości transmisji wymaga w rejestrze T2CON ustawienia bitów sterujących RCLK (T2CON.5) dla odbiornika i TCLK (T2CON.4) dla nadajnika. Prędkość transmisji wynosi wówczas: f S = F XTAL / (2 * 16 * (65536 RLD)) gdzie RLD jest wartością początkową wpisaną do rejestrów RLDH i RLDL. 4. Ćwiczenia programowe Poniżej przedstawiono dwa przykładowe programy komunikacji modułu ABC-02 z komputerem PC za pomocą łącza pracującego w standardzie RS232 przez złącze COM1 lub COM2 z wykorzystaniem programu Hyper Terminal. Port szeregowy µc51 pracuje w trybie 1. Pierwszy z programów wysyła w pętli nieskończonej jeden znak alfanumeryczny do komputera PC. Działanie programu przedstawia następujący algorytm: START Konfiguracja portu szeregowego tryb 1 Wyzerowanie wskaźnika wysłania znaku Zapis znaku do rejestru SBUF Znak wysłany? N T Rys.8. Algorytm programu wysyłającego znak w pętli nieskończonej. 5
1; ;LISTING 4-1 2: ;Program wysyłania znaku. 8-bitowe znaki 'a' transmitowane są do komputera PC przez 3: ;port szeregowy COM1 lub COM2 i wyświetlane na monitorze pomocą programu Hyper 4: ;Terminal lub podobnego. 5: ;Do określenia prędkości transmisji wykorzystano licznik T1 pracujący w trybie 2. 6: ;Dla f S = 4800bit/s, przy F XTAL = 11.0592MHz, TH1 = 0FAH 7: 8: ORG 0000H 9: 10: mov SCON,#01010000b ;konfiguracja portu szeregowego 11: ;tryb 1, uaktywniony odbiornik 12: mov TMOD,#00100000b ;tryb 2 licznika T1, wykorzystanie licznika T1 13: ;do określenia prędkości transmisji 4800bit/s 14: mov TH1,#0FAH ;wartość początkowa dla licznika T1 15: setb TR1 ;uruchomienie licznika T1 16: 17: PETLA: 18: clr TI ;wyzerowanie wskaźnika wysłania znaku 19: mov SBUF,#'a' ;zapis znaku do rejestru SBUF 20: jnb TI,$ ;oczekiwanie na wysłąnie znaku 21: 22: sjmp PETLA ;przejście do wysłania następnego znaku 23: 24: END 6
Drugi program odbiera znaki transmitowane z komputera PC do modułu ABC-02 poprzez wpisywanie ich na klawiaturze w programie Hyper Terminal. Odebrany znak wyświetlany jest w postaci binarnej za pomocą diod LED sterowanych przez port P2. Algorytm programu przedstawiono poniżej: START Konfiguracja portu szeregowego tryb 1 Wyzerowanie wskaźnika odebrania znaku Znak odebrany? N T Odczyt znaku z rejestru SBUF i zapis do P2 Rys.9. Algorytm programu odbierającego znak. ;LISTING 4-2 1: ;Program odbioru znaku. 8-bitowe znaki 'a' transmitowane są z komputera PC przez 2: ;port szeregowy COM1 lub COM2 za pomocą programu Typer Terminal lub podobnego. 3: ;Odebrane znaki będą wyświetlane w postaci binarnej za pomocą diod LED podłączonych 4: ;do portu P2 modułu ABC-02. 5: ;Do określenia prędkości transmisji wykorzystano licznik T1 pracujący w trybie 2. 6: ;Dla f S = 4800bit/s, przy F XTAL = 11.0592MHz, TH1 = 0FAH 7: 8: org 0000H 9: 10: mov SCON,#01010000b ;konfiguracja portu szeregowego 11: ;tryb 1, uaktywniony odbiornik 12: mov TMOD,#00100000b ;tryb 2 licznika T1, wykorzystanie licznika T1 7
13: ;do określenia prędkości transmisji 4800bit/s 14: mov TH1,#0FAH ;wartość początkowa dla licznika T1 15: setb TR1 ;uruchomienie licznika T1 16: 17: PETLA: 18: clr RI ;wyzerowanie wskaźnika odebrania znaku 19: jnb RI,$ ;oczekiwanie na odebranie znaku 20: mov P2,SBUF ;odczyt znaku i zapis do portu P2 21: sjmp PETLA ;przejście do oczekiwania na następny znak 22: 23: end ZADANIE 1 Napisać program odbierający pojedynczy znak z terminala komputera PC i odsyłający ten sam znak z powrotem do terminala, tzw. echo. Prędkość transmisji 2400bit/s, tryb 1 portu szeregowego. Do wysyłania znaków z klawiatury komputera PC należy wykorzystać program Hyper Terminal. ZADANIE 2 Napisać program dekodujący znaki będące kodami ASCII przycisków 0, 1, 2, 3, 4, 5, 6, 7 klawiatury komputera PC przesyłane za pomocą łącza RS-232 do modułu ABC-02. Stan wciśniętego przycisku powinien być sygnalizowany za pomocą odpowiedniej diody LED podłączonej do portu P2 (0 - P2.0, 1 - P2.1, 2 - P2.2, 3 - P2.3, 4 - P2.4, 5 - P2.5, 6 - P2.6, 7 - P2.7) w module ABC-02. Prędkość transmisji 4800bit/s, tryb 1 portu szeregowego. ZADANIE 3 Napisać program odbierający i wysyłający komunikat wieloznakowy na zasadzie echa z sumą kontrolną EX-OR. Komunikat powinien mieć następujący format: $abc*[chsh][chsl][cr][lf] gdzie: $ - jeden znak ASCII, znacznik początku komunikatu abc - trzy znaków ASCII, treść komunikatu, * - jeden znak ASCII, znacznik końca treści komunikatu [CHSH][CHSL] - dwa znaki ASCII reprezentujące 8-bitową liczbę zapisaną w kodzie heksadecymalnym, bądącą suma kontrolną EX-OR, [CR] - pierwszy znacznik końca komunikatu, [LF] - drugi znacznik końca komunikatu. Suma kontrolna liczona jest w następujący sposób: CHS = 0 xor a xor b xor c. Do wysyłania komunikatu należy wykorzystać program Hyper Terminal wysyłanie pliku. Prędkość transmisji 4800bit/s, tryb 1 portu szeregowego. 8
5. Przewód łączeniowy komputera PC i modułu ABC-02 Do komputera PC 5 1 9 6 4 2 8 7 3 3 7 8 2 4 6 9 1 5 Do modułu ABC-02 DB9F DB9F Rys.10. Przewód łączeniowy do transmisji danych bez kontroli sprzętowej. Pełny opis sygnałów gniazda DB9 łącza RS232: 1 DCD - Data Carrier Detected - sygnał wykrycia nośnej 2 RXD - Receive Data - odbiór danych 3 TXD - Transmit Data - transmisja danych 4 DTR - Data Terminal Ready - przetworzono dane (gotowość odbioru) 5 GND - Signal Ground - masa 6 DSR - Data Set Ready - wypełniony bufor (gotowość transmisji) 7 RTS - Request to Send Data - żądanie wysyłania 8 CTS - Clear to Send Data - gotowość wysyłania 9 RI - Ring indicator - wskaźnik dzwonka Uwaga W celu transmisji danych za pomocą łącza RS232 do i z modułu ABC-02, należy w module ABC-02 zewrzeć styki złącza JP1-1 z JP1-2 i JP2-1 z JP2-2. 9
6. Tablica kodów ASCII (American Standard Code for Information Interchange) Tablica kodów ASCII rozszerzona Źródło: www.lookuptables.com Źródło: www.lookuptables.com 10