Andrzej Rydzewski Mikrokomputery jednoukładowe rodziny MCS-51 Wydanie trzecie Warszawa Wydawnictwa Naukowo-Techniczne Spis treści 1. WSIe? 7 1.1. Charakterystyka ogólna rodziny MCS-51 ........ 7 1.2. Dane katalogowe .................... 9 1.2.1. Opis końcówek układu ............. 9 1.2.2. Parametry sygnałów............... 12 1.2.3. Lista rozkazów ................. 21 1.2.4. Zestawienie słów sterujących i kontrolnych z grupy SFR ................... 28 2. Architektura wewnętrzna mikrokomputerów 8051/52 37 2.1. Pamięć programu, licznik rozkazów ........... 37 2.2. Pamięć danych, rejestry uniwersalne i specjalne, stos ... 39 2.3. Jednostka arytmetyczno-logiczna, akumulator, słowo stanu ...................... 44 2.4. Zegar systemowy, cykl rozkazowy ............ 47 2.5. Wejście-wyjście..................... 50 2.5.1. Konfiguracja wejścia-wyjścia........... 50 2.5.2. Struktura wewnętrzna portów .......... 52 2.5.3. Komunikacja programowa ............ 54 2.6. Układ czasowo-licznikowy ............... 55 2.6.1. Liczniki TO, Tl ................. 56 2.6.2. Licznik T2 (tylko 8052/32) ............ 61 Z7. Port szeregowy ..................... 65 2.7.1. Tryb O..................... 66 2.7.2. Tryby l, 2, 3 ................... 69 2.7.3. Szybkość transmisji............... 74 2.7.4. Komunikacja w systemie wieloprocesorowym... 76 6 Spbtntfd 2.8. System przerwań................... 2.8.1. Organizacja systemu .............. 2.8.2. Przyjęcie przerwania .............. 2.8.3. Przerwania zewnętrzne............. 2.9. Inicjowanie systemu .................. 2.10. Stany z obniżonym poborem mocy .......... 110.1. Układy HMOS ................ 2.10.2. Układy CHMOS . .............. 2.11. Praca z zewnętrzną pamięcią programu ........ 2.12. Programowanie, weryfikacja, kasowanie pamięci EPROM ................... 3. Rozbudowa systemu 3.1. Rozbudowa pamięci................. 3.1.1. Komunikacja z pamięcią zewnętrzną ...... 3.1.2. Dołączanie zewnętrznej pamięci programu i danych .................... 3.1.3. Wspólna zewnętrzna pamięć programu i danych .................... 3.1.4. Dołączanie zewnętrznej pamięci danych .... 3.2. Rozbudowa wejścia-wyjścia .............. 3.3. Rozbudowa systemu przerwań............ 4. Lista rozkazów 4.1. Tryby adresowania.................. 4.2. Opis rozkazów.................... 1. WSTĘP 1.1. CHARAKTERYSTYKA OGÓLNA RODZINY MCS-51 Rodzina mikrokomputerów jedno-układowych MCS-51 powstała w firmie Intel Corporation. Architektura układów do niej należących jest podobna do architektury MCS-48 - wcześniejszej rodziny mikrokomputerów jednoukładowych firmy Intel. Jest jednak w stosunku do niej znacznie rozbudowana i unowocześniona. Podstawowymi układami rodziny MCS-51 są: mikrokomputer 8051, od którego pochodzi nazwa rodziny, oraz nieco rozbudowany mikrokomputer 8052. Funkcjonalny schemat blokowy jednoukładowego mikrokomputera 8051, podstawowego układu w rodzinie MCS-51, przedstawiono na rys. 1.1. Poniżej omówiono główne bloki funkcjonalne mikrokomputera. RYS. 1.1. Schemat funkcjonalny mikrokomputera 8051 Ośmiobitowa jednostka centralna może wykonywać 111 rozkazów (49 jedno-, 45 dwu- i 17 trzybajtowych) umożliwiających łatwą i efektywną realizację wszelkiego rodzaju algorytmów sterów (również wymagających złożonych obliczeń). Lista rozkazów zav m.in. rozkazy arytmetyczne (w tym mnożenie i dzielenie) i logii rozkazy dotyczące operacji logicznych na bitach (procesor boolo^ oraz rozbudowane grupy rozkazów skoków warunkowych i wej wyjścia. Prawie wszystkie rozkazy wykonują się w czasie jeden lub dwóch cykli maszynowych. Wyjątek stanowi tu mnożenie i dziel wymagające czterech cykli. Zegar taktujący jest stabilizowany zewnętrznym rezonatt kwarcowym, o częstotliwości maksymalnej 12 MHz. Czas cyklu m; nowego jest więc równy 1 fis. Wewnętrzna pamięć programu, typu ROM, ma pojemność (4K) słów 8-bitowych. Może być rozszerzona do 64K bajtów ] dołączenie pamięci zewnętrznej. Wewnętrzna pamięć danych, typu RAM, ma pojemność 128 ba Możliwe jest dołączenie zewnętrznej pamięci danych o pojemnoś' 64K słów (w ramach osobnej przestrzeni adresowej). Układ czasowo-licznikowy zawiera dwa 16-bitowe liczniki, l mogą zliczać wewnętrzne impulsy zegarowe lub impulsy zewnęt Oba liczniki mogą pracować w jednym z czterech, ustawianyd dywidualnie, trybów. Linie wejścia-wyjścia, których jest 32, są zorganizowane w c 8-bitowe porty. Część z tych linii (zwłaszcza linie portu P3) moż< wykorzystana do realizacji specjalnych funkcji. Port szeregowy umożliwia niezależne nadawanie i odbie transmisji szeregowej. Może pracować w czterech trybach. Układ przerwań (dwupoziomowy) może obsługiwać dwa rwania zewnętrzne i dwa z układu czasowo-licznikowego oraz rwanie z układu szeregowego wejścia-wyjścia (razem 5). Mikrokomputer 8052 jest wersją układu 8051 o nieco po> szonych zasobach, a mianowicie: - wewnętrzna pamięć programu jest powiększona do 8K bajtów - wewnętrzna pamięć danych jest powiększona do 256 bajtów, - układ czasowo-licznikowy zawiera dodatkowy 16-bitowy li( impulsów zegarowych lub zewnętrznych. Mikrokomputery tworzące rodzinę MCS-51, produkowane ] firmę Intel, zestawiono w tablicy 1.1. Układy te są różnymi, Bloki funkcyjne 9 względem technologu wykonania i rodzaju wewnętrznej pamięci programu, wersjami układów 8051 i 8052. TABLICA 1.1. Zestawienie mikrokomputerów rodziny MCS-51 Typ układu (firma Intel) Wewnętrzna pamięć programu Wewnętrzna pamięć danych CHMOS HMOS 80C51 8051AH 8751H 80C31 8031AH 8052 8032 4K x 8 ROM 4K x 8 EPROM 8K x 8 ROM 128 x 8 RAM 128 x 8 RAM 128 x 8 RAM 256 x 8 RAM 256 x 8 RAM Mikrokomputery rodziny MCS-51 są obecnie najpopularniejszymi układami na świecie w klasie 8-bitowych mikrokomputerów jedno-układowych. Odpowiedniki układów wymienionych w tablicy 1.1 są produkowane przez takie firmy jak: Siemens, Signetics/Philips, AMD, Fujitsu i inne. Zazwyczaj są one oznaczane takim samym symbolem cyfrowym. Ponadto, wiele firm produkuje inne, bazowane na 8051, wersje układów, różniące się technologią wykonania lub rozbudowane o dodatkowe specjalizowane bloki funkcjonalne, przeznaczone do konkretnego zastosowania. Orientacyjne ceny hurtowe układów z rodziny MCS-51 kształtowały się w Europie Zachodniej następująco (dane z 1990 r): 8051 - 2,30 $, 8751 - 32$, 80C51 - 3,00$, 87C51 - 44$, 8052 - 2,95$, 8752 - 40$, 80C52 - 4,40$, wersja 8052 z pamięcią EEPROM - 70 $. 1.2. DANE KATALOGOWE 1.2.1. OPIS KOŃCÓWEK UKŁADU Na rysunku 1.2a pokazano symbol logiczny podstawowych w rodzinie MCS-51 układów 8051/52. Rozkład sygnałów RYS. 13.. Układ 8051: a) symbol logiczny; b) rozkład sygnałów na końcó Na rysunku 1.2b przedstawiono rozkład sygnałów na ko obudowy. Ich funkcje opisano poniżej. Numer końcówki Funkcja PO.O-P0.7 (Port 0) 8-bitowy, dwukierunkowy port wejścia-wyjścia (wyjście z otwartym kolektorem, wejście o dużej impedancji); przy pracy z zewnętrzną pamięcią programu lub danych: multipleksowana magistrala adresów-danych Wejście lub wyjście danych przy programowaniu i weryfikacji pamięci EPROM P1.0-P1.7 (Port l) 8-bitowy port wejścia-wyjścia P l.O - T2; wejście zegarowe P 1.1 - T2EX; wejście wyzwalające licznika T2 Przy programowaniu i weryfikacji pamięci EPROM: wejście sygnałów adresowych AO...A7 • l Funkcje sygnałów Sygnał Numer końcówki Funkcja P2.0-P2.7 (Port 2) 21-28 8-bitowy port wejścia-wyjścia; przy pracy z zewnętrzną pamięcią programu: wyjście ośmiu bardziej znaczących bitów magistrali adresowej Wejście bitów 8-11 adresu i sygnałów sterujących przy programowaniu i weryfikacji pamięci EPROM P3.0-P3.7 10-17 8-bitowy port wejścia-wyjścia; (Port 3) funkcje dodatkowe (alternatywne) poszczególnych bitów: P3.0 - RXD: wejście szeregowe P3.1 - TXD: wyjście szeregowe P3.2 - INTO 1 wejścia przerwań P3.3 - INT1 J zewnętrznych P3.4 - TOt wejścia zegarowe P3.5 - Tlj układu czasowo- __ -licznikowego P3.6 - WR: wyjście sterujące; zapisywanie do zewnętrznej pamięci danych P3.7 - RD: wyjście sterujące; odczytywanie z zewnętrznej pamięci danych PSEN (Program storę enable) 29 Wyjście sterujące; odczytywanie z zewnętrznej pamięci programu ALE (Address latch enable) 30 Wyjście sygnału zegarowego o częstotliwości 6(TAL/6; przy pracy z pamięcią zewnętrzną: wyjście sterujące - sygnał strobujący adres wysłany do portu PO Wejście impulsu programującego przy programowaniu pamięci EPROM RST/YPD (Reset) Wejście sygnału zerującego (aktywny poziom niski) Wejście zasilania w stanie obniżonego poboru mocy Funkcje sygnałów Sygnał Numer końcówki Funkcja Układy EA (External access) 31 Wejście wymuszające pobieranie wszystkich rozkazów z zewnętrznej pamięci programu (aktywny poziom niski) Wejście napięcia zasilania +21 V przy programowaniu pamięci EPROM 8751 XTAL1 19 Pierwsza końcówka do dołączenia oscylatora kwarcowego Wejście zewnętrznego sygnału taktującego CHMOS XTAL2 18 Druga końcówka do dołączenia oscylatora kwarcowego Wejście zewnętrznego sygnału taktującego HMOS Ucc 40 + 5 V - zasilanie Uss 20 0 V - masa 1.2.2. PARAMETRY SYGNAŁÓW Podane niżej parametry statyczne i dynamiczne sygnałów zestawiono na podstawie katalogu firmy Inte Corporation. Parametry układów innych firm mogą się od nid nieznacznie różnić. Parametry dopuszczalne - temperatura pracy: 0-70°C - temperatura przechowywania: -65 150°C - napięcie na każdej końcówce względem Uss -0,5-7,0 V - moc rozpraszana l W Parametry sygnałowe dla układów HMOS przy IA = 0-70°C -CHMOS przy IA = 0-70°C Ucc= + 5 V ± 10%, Uss = O V - Ucc = + 5 V ± 20%, Uss = O V Parametry charakterystyczne statyczne dla układów HMOS 13 Symbol Parametr Wielkość Jednostka min. maks. UIL Napięcie wejściowe w stanie niskim -0,5 0,8 V UIH Napięcie wejściowe w stanie wysokim, z wyjątkiem RST/VPD i XTAL2 2,0 Ucc + 0,5 V UlHl Napięcie wejściowe w stanie wysokim dla RST/VPD (zerowanie) i XTAL2 2,5 Ucc + 0,5 XTAL1 = Uss V UPD Napięcie zasilania na RST/VPD w trybie obniżonego poboru mocy 4,5 5,5 Ucc-O V v UOL Napięcie wyjściowe w stanie niskim dla wyjść Pl, P2, P3 0,45 IOL = 1,6 V reA UOLI Napięcie wyjściowe w stanie niskim dla PO, ALE, PSEN 0,45 IOL - 3,2 V mA UOH Napięcie wyjściowe w stanie wysokim dla wyjść Pl, P2, P3 2,4 IOH - - 80 V li\ UOHI Napięcie wyjściowe w stanie wysokim 2,4 IOH - -400 V <-A dla PO, ALE, PSEN IlL Prąd wejściowy w stanie niskim dla wejść Pl, P2, P3 -800 U. = 0,45 fiA. v IIL2 Prąd wejściowy w stanie niskim dla wejścia XTAL2 -2,5 XTAL) - Uss Ul - 0,45 mA v ILI Prąd upiywności wejść PO, EA ±10 0,45 < U] < Ucc ^A v 500 Ul = Ucc - 1,5 IlHl Prąd wejściowy w stanie wysokim dla wejścia RST/VPD (przy zerowaniu) lec Prąd zasilania z Ucc 125 mA 10 Ucc=0 mA v IPD Prąd zasilania z RST/VPD w trybie obniżonego poboru mocy 10 fc^ l pF MHz Cło Pojemność pasożytnicza buforów wejścia-wyjścia Uwaga! Jeżeli pojemności pasożytnicze linii portów PO i P2 są duże (> 100 pF), to w czasie wysyłania przez te porty adresu lub danych przy dostępie do pamięci zewnętrznej, może wystąpić zakłócenie na liniach portów Pl, P3 i ALE, objawiające się chwilowym wzrostem napięcia w stanie niskim do 0,8 V. Dotyczy to układów HMOS i CHMOS. 14 Parametry lygoałów Parametry charakterystyczne statyczne dla układów CHMOS Symbol Panu metr Wielkość Jednostka min. maks. UlL Napięcie wejściowe w stanie niskim -0,5 0,8 Ucc > 4,5 -0,5 0,5 Ucc < 4,5 V v V v UlH Napięcie wejściowe w stanie wysokim z wyjątkiem wejść RST, XTAL1 i XTAL2 2,0 Ucc Ucc > 5,5 2,5 Ucc Uoc<5,5 V v V v UlHl Napięcie wejściowe w dla wejścia RST stanie wysokim 3,0 Ucc Ucc > 5,5 3,5 Ucc Ucc<5^ V v V v UIH2 Napięcie wejściowe w dla XTAL1i XTAL2 stanie wysokim 0,8Ucc Ucc V UPD Napięcie zasilania w t poboru mocy rybie obniżonego 2,0 6,0 v UOL Napięcie wyjściowe w dla wyjść Pl, P2, P3 stanie niskim 0,45 łoi - lj6 v IDĄ UOLI Napięcie wyjściowe w stanie niskim dla 0,45 IOL - 3,2 v mA PO. ALE, PSEN UOH Napięcie wyjściowe w dla wyjść Pl, P2, P3 stanie wysokim 0,9Ucc IOH- -10 2,4 IOH- -80 Ucc-5 V ±10% V HA V fA UOHI Napięcie wyjściowe w stanie wysokim dla wyjść PO. ALE, PSEN 0,9Ucc IOH- -10 2,4 IOH- -400 Ucc-5V±10% V «A V fA In, Prąd wejściowy w stal dla wejść Pl, P2, P3 lie wysokim -50 Ul - 0.45 ł*A v lu Prąd uptywności wejść ±10 Parametry sygnałów 15 Symbol Parametr Wielkość min. mak s. Jednostka lec Prąd zasilania przy normalnej pracy Wszystkie wyjścia nie dołączone, czas narastania i opadania impulsów zegara < 10 ns, Ucc = 5 V 24 mA fitTAL - 12 MHz 2,4 mA (CTAL - 1,2 MHZ leci Prąd zasilania w ttybie jałowym 3,0 mA fitTAL - 12 MHz 0,3 mA ECTAL - 1,2 MHz ICC2 Prąd zasilania w trybie obniżonego 50 liA poboru mocy Ucc-2,0 v RRST Rezystancja między wejściem RST a masą 4 kn Cio Pojemność pasożytnicza buforów 10 pF wejścia-wyjśda fc-l MHz Parametry zewnętrznego sygnału zegarowego (rył. 1.3): XTAL2 - w układach HMOS XTAL1 - w układach CHMOS Symbol Nazwa Częste fitTAL = itliwoś U- ć 12 MHz Jednostka min. maks. te Okres 83,3 833,3 ns tCH Czas stanu wysokiego 20 ns to. Czas stanu niskiego 20 ns tr Czas narastania 20 ns tf Czas opadania 20 ns 16 Piunetry sygnałów RYS. 13. Zewnętrzny sygnał zegarowy Parametry dynamiczne sygnałów w cyklu pobrania z zewnętrznej pamięci programu (rys. l .4) Symbol Wartość Nazwa ! l f-- J- i :'*- «RO --- \ i r^i 1 i«OR-- < '"•-'La-i-»•; ': --» t Bdr«« 00 - :a7 ^------\ \ , <; ^ : D*rr z p«mląci \ h- : --»;tflFRL<- ; "t DFR "*- CJalna P2 ZflPISYHftNIE PO ZEHN^TBZNEJ PflMIĘ.CI DflNYCH PSEN 7 - t ML--^ \ r •<-tLfl-^*--- -t HO --- ^ Odr«« ao - ft7 J^ 0*n« do zapił•nią X 'J •k f r>UY DC Adr«« ft7 - A15 lub r»Jw»tr «p«cJ*lnu P2 RYS. 1.5. Definicja parametrów dynamicznych sygnałów w cyklach odczytu i zapisu zewnętrznej pamięci danych 18 Parametry sygnałów Parametry dynamiczne sygnałów w cyklach odczytywania i a|iiyn-te x lik do sewetrznej pamięci danych (rys. 1.5) Symb< Wartość d Ifazwa f(tc)dla J^0- ficTAL = 1,2,- 12 MHZ feAL = 12 MHz min. maks. min. maks. tRR Długość impulsu RD 6t-100 400 ns tww Długość impulsu WR 6t-100 400 ns tLA Czas podtrzymania adresu po ALEJ. ta - 35 48 ns tRD Opóźnienie danych wejściowych względem RDi 5tc-165 250 ns tOR Czas podtrzymania danych wejściowych po RDf 0 0 ns tDFR Opóźnienie trzeciego stanu na PO względem RDf 2tc-70 97 ns tLD Opóźnienie danych wejściowych względem ALEi 8tc -150 517 ns UD Czas wyprzedzenia adresu względem danych wejściowych 9tc -165 585 ns tLW Opóźnienie impulsu sterującego ^ (WR) względem ALE i 3tc-50 3tc+50 200 300 ns tAW Czas wyprzedzenia adresu względem RDi lub WR1 4tc-130 203 ns tWL Opóźnienie ALEf względem RDT lub WRf ta-40 ta+40 43 123 ns towx Czas wyprzedzenia danych wyjściowych względem WK.1 to - 60 23 ns tow Czas wyprzedzenia danych wyjściowych względem WRf 7to - 150 433 ns two Czas podtrzymania danych wyjściowych po WRf ta-50 33 ns tAra Czas wyprzedzenia trzeciego stanu na PO względem KD[ 0 0 ns XTAL2 ALE ; S4 ; SS ; S6 ; Sl ; 52 i 53 ; 54 ; SS : ; Pl : P2 ł Pl \ P2 : Pl ; P2 ; Pl ; P2 : Pl : P2 ^ Pl : P2 : Pl ; P2 i Pl \ P2 : JTJnJTrLriJlJlJTJ-lJZrLrTJ^J~LrZJZrLrL CYKL POBRONIO Z PAMIĘCI PROgROMU PSEN ________ l T -i do z»un»,trzn«J p»«»u.- •0-P1.7 ---\ .0-P2.3 \ P1.0-P1. P2.0-P2.3 -^ D •n* do ^D--- / 0»n« \ \ "'•"-° Ti odczytań* / i.^H. ^M , ^HP.I r tMB » "pp ••---•• Eft / f tpy . \ tDEL-- ^EDF ALE C PRÓG} \ L-J f P2.7 CENBBLE5 if \ •- łEVPP RYS. 1.7. Przebiegi czasowe sygnałów przy programowaniu i weryfikacji pamięci EPROM 1.23. LISTA ROZKAZÓW W zestawieniach rozkazów poszczególnych mikrokomputerów przyjęto oznaczenia rejestrów: A, ACC - akumulator B - rejestr B Rr - rejestr roboczy, r == O,..., 7 Ri - rejestr roboczy - wskaźnik danych, i = O, l DPTR - wskaźnik danych (DPH.DPL) PC - licznik rozkazów SP - wskaźnik stosu C, CY - znacznik przeniesienia AC - znacznik przeniesienia pomocniczego OV - znacznik nadmiaru ad - 8-bitowy adres bezpośredni n - 8-bitowy argument bezpośredni nn - 16-bitowy argument bezpośredni bit - 8-bitowy adres bitu w RAM lub SFR adr 11 - adres 11-bitowy adr 16 - adres 16-bitowy d - 8-bitowe przesunięcie o wartościach z przedziału < -128,127> @ - w mnemoniki! poprzedza adres pośredni + - w mnemoniki! poprzedza argument bezpośredni X - w zapisie operaq'i oznacza zawartość rejestru X (X) - w zapisie operacji oznacza zawartość pamięci o adresie X 22 Zestawienie rozkazów Zestawienie rozkazów mikrokomputerów 8051, 8031, 8751, 8052, 8032 pograpowanyc funkcjonalnie Kod Bajty/ Mnemonik Operacja szesnast- /cykle Uwagi kowy (nex) Przesłania MOV A,Rr A <- Rr E8-EF 1/1 Rr - rejestr RO-R7 MOV A,ad A <- (ad) E5 2/1 Ri - rejestr RO-R1 MOV A,@Ri A <- (Ri) E6,E7 1/1 ad - 8-bitowy adres MOVA,#n A «- n 74 2/1 bezpośredni MOV Rr,A Rr <- A F8-FF 1/1 n - 8-bitowy MOV Rr,ad Rr «- (ad) A8-AF 2/2 argument MOV Rr,*n Rr <- n 78-7F 2/1 bezpośredni MOV ad,A (ad) - A F5 2/1 MOV ad,Rr (ad) <- Rr 88-8F 2/2 MOV adl,ad2 (adi) <- (ad2) 85 3/2 MOV ad,@Ri (ad) <- (Ri) 86,87 2/2 MOV ad,* a (ad) <- n 75 3/2 MOV @Ri,A (Ri) <- A F6,F7 1/1 MOV @Ri,ad (Ri) *- (ad) A6,A7 2/2 MOV @Ri,#n (Ri) <- n 76,77 2/1 MOV DPTR, #nn DPTR «- nn 90 3/2 nn - 16-bitowy XCH A,Rr A <-> Rr C8-CF 1/1 argument XCH A,ad A <-* (ad) C5 2/1 bezpośredni XCH A,@Ri A *-» (Ri) C6,C7 1/1 XCHD A,@Ri AM <-» (Ri)M D6,D7 1/1 MOVX A,@Ri A *- (Ri) E2,E3 1/2 MOVX @Ri,A (Ri) *- A F2,F3 l/^ zewnętrznej J 8-bit. MOVX A,@DPTR A <- pPTR) EO 1/2 {dotyczy 1 adres pamięci 1 adres MOVX @DPTR,A (DPTR) *- A FO 1/2 danych J16-biŁ MOVC A,@A+DPTR A <- (A + DPTR) 93 1/2 [ dotyczy MOVCA,@A+PC A ^- (A+PC) 83 1/2 J pamięci programu Operacje arytmetyczno-logiczne ADD A,Rr A ^- A + Rr 28-2F 1/1 ADD A,ad A<-A+(ad) 25 2/1 ADD A,@Ri A<- A+(Ri) 26,27 1/1 ADDA,#n A «- A+n 24 2/1 ADDC A,Rr A<- A+Rr+CY 38-3F 1/1 ADDC A,ad A<-A+(ad)+CY 35 2/1 Rr - rejestr RO-R7 ADDC A,@Ri A*- A+(Ri)+CY 36,37 1/1 Ri - rejestr RO-R1 ADDC A,* n A »- A + n + CY 34 2/1 ad - 8-bitowy adres SUBB A,Rr A<- A-Rr-CY 98-9F 1/1 bezpośredni Zestawienie rozkazów 23 Mnemonik Operacja Kod szesnast-kowy (hex) Bajty/ /cykle Uwagi SUBB A,ad A <- A - (ad) - CY 95 2/1 n - 8-bitowy SUBB A,@Ri A «- A - (Ri) - CY 96,97 1/1 argument SUBB A,#n A <- A - n - CY 94 2/1 bezpośredni INCA A <-A+1 04 1/1 INCRr Rr <- Rr+1 08-OF 1/1 INCad (ad) <- (ad)+l 05 2/1 INC@Ri (Ri) <- (Ri)+l 06,07 1/1 INC DPTR DPTR <- DPTR +1 A3 1/2 DĘĆ A A *- A-l 14 1/1 DECRr Rr <- Rr-1 18-1F 1/1 DĘĆ ad (ad) <- (ad)-l 15 2/1 DĘĆ @Ri (Ri) <- (Ri)-l 16,17 1/1 MULAB B.A <- A x B A4 1/4 DIVAB A <- [A/B] 84 1/4 DA A Korekcja dzies. A D4 1/1 ANL A,Rr A «- AA Rr 58-5F 1/1 ANL A,ad A «- A A (ad) 55 2/1 ANL A,@Ri A <- A A (Ri) 56,57 1/1 ANL A, # n A <- AA n 54 2/1 ANL ad,A (ad) <- (ad) A A 52 2/1 ANL ad,=ł=n (ad) «- (ad) A n 53 3/2 ORL A,Rr A <- A v Rr 48-4F 1/1 ORL A,ad A «- A v (ad) 45 2/1 ORL A,@Ri A <- A v (Ri) 46,47 1/1 ORL A,#n A«-Avn 44 2/1 ORL ad,A (ad) <- (ad) v A 42 2/1 ORL ad, # n (ad) «- (ad) v n 43 3/2 XRL A,Rr A <- A©Rr 68-6F 1/1 XRL A,ad A <- A©(ad) 65 2/1 XRL A,@Ri A <- A©(Ri) 66,67 1/1 XRL A, # n A <- A® n 64 2/1 XRL ad,A (ad) <- (ad)® A 62 2/1 XRL ad,#n (ad) <- (ad)® n 63 3/2 CLRA A *- 0 E4 1/1 CPLA A <- A F4 1/1 SWAPA Aa-o «-> A?-4 C4 1/1 RLA 23 1/1 L|7-AokJ RLCA 33 1/1 HCY |- 7<-A 0 [J Zestawienie rozkazów K'r>d JC^-UU Mnemonik Operacja szesnast-kowy (hex) Bajty/ /cykle Uwagi RRA 03 1/1 L|7A^ RRCA 13 1/1 l l LfcY~|-<| 7 A-»0|J Operacje na bitach CLRC CY <- 0 C3 1/1 CLR bit (bit) <- 0 C2 2/1 bit - 8-bitowy adres SETBC CY <- l D3 1/1 bitu w RAM lub SFR SETB bit (bit) ^ l D2 2/1 CPLC CY <- CY B3 1/1 CPL bit (bit) *- (bit) B2 2/1 ANL C,bit CY <- CYA(bit) 82 2/2 ANL C,/bit CY <- CYA(bit) BO 2/2 ORL C,bit CY »- CYv(bit) 72 2/2 ORL C,/bit CY <- CYv(bit) AO 2/2 MOV C,bit CY <- (bit) A2 2/1 MOV bit,C (bit) «- CY 92 2/2 Skoki i rozkazy sterujące AJMP adrl! PC IM «- adrl l 01,21 2/2 41,61 adrl! - adres 81,A1 11-bitowy C1,E1 LJMP adrl6 PC *- adrl6 02 3/2 adrl6 - adres SJMPd PC «- PC+d 80 2/2 16-bitowy JMP @A + DPTR PC <- A + DPTR 73 1/2 d - 8-bitowe JCd Gdy CY = l to 40 2/2 przesunięcie PC <- PC+d JNCd Gdy CY = 0 to 50 2/2 PC *- PC+d JZd Gdy A = 0 to 60 2/2 PC »- PC+d JNZd Gdy A ^ 0 to 70 2/2 PC <- PC+d JB bit,d Gdy (bit) = l to 20 3/2 PC «- PC+d JNB bit,d Gdy (bit) = 0 to 30 3/2 PC <- PC+d Zestaw rienie rozkazó w 25 Mnemonik Operacja Kod szesnast-kowy (hex) Bajty/ /cykle Uwagi JBC bit,d Gdy (bit) = l to 10 3/2 PC .- PC+d (bit) <- 0 CJNE A,ad,d Gdy A ^ (ad) to B5 3/2 PC <- PC+d CJNEA,#n,d Gdy A ^ n to B4 3/2 PC «- PC+d CJNE Rr,*n,d Gdy Rr ^ n to B8-BF 3/2 PC »- PC+d CJNE @Ri,*n,d Gdy (Ri) + n to B6,B7 3/2 PC <- PC+d | DJNZ Rr,d Rr <- Rr-1 D8-DF 2/2 l i gdy Rr ^ 0 to PC <- PC+d l DJNZad,d (ad) <- (ad)-l D5 3/2 [' i gdy (ad) ^ 0 to PC <- PC+d NOP Nic nie rób 00 1/1 ' Podprogramy i operacje na stosie l ACALL adrl! SP «- SP+1 11,31 2/2 i (SP) <- PC7-0 51,71 SP <- SP+1 91,B1 (SP) *- PCl5-« D1,F1 PC 10-0 <- adrl l ; LCALL adrl6 SP «- SP+1 12 3/2 S (SP) <- PC7-0 SP <- SP+1 (SP) <- PCl5-« PC <- adrl6 RET PCl5-« <- (SP) 22 1/2 powrót z podprogramu SP <- SP-1 PC7-0 .- (SP) SP <- SP-1 RETI PClS-8 <- (SP) 32 1/2 powrót z przerwania SP <- SP-1 PC7-0 <- (SP) SP <- SP-1 PUSH ad SP <- SP+1 CO 2/2 (SP) «- (ad) POP ad (ad) <- (SP) DO 2/2 SP <- SP-1 kod hex 00 01 mnemonik NOP AJMP adrii kod hex 20 21 Zestawie mnemonik JBbit,d AJMP adrii nie n kod hex 40 41 azkazów mikrok< mnemonik JCd AJMP adrii impul kod hex 60 61 :erów 8051, 8031 mnemonik JZd AJMP adrii 02 LJMP adrl6 22 RET 42 ORL ad,A 62 XRL ad,A 03 RRA 23 RLA 43 ORL ad, # n 63 XRL ad,* n 04 INCA 24 ADD A#n 44 ORLA,* n 64 XRL A,#n 05 INCad 25 ADD A,ad 45 ORL A,ad 65 XRL A,ad 06 INC @RO 26 ADD A,@RO 46 ORL A,@RO 66 XRL A,@RO 07 INC @R1 27 ADD A,@R1 47 ORL A,@R1 67 XRL A,@R1 08 INCRO 28 ADD A,RO 48 ORL A,RO 68 XRL A,RO 09 INCR1 29 ADD A,R1 49 ORL A,R1 69 XRL A,R1 OA INCR2 2A ADD A,R2 4A ORL A,R2 6A XRL A,R2 OB INCR3 2B ADD A,R3 4B ORL A,R3 6B XRL A,R3 OC INCR4 2C ADD A,R4 4C ORL A,R4 6C XRL A,R4 OD INCR5 2D ADD A,R5 4D ORL A,R5 6D XRL A,R5 OE INCR6 2E ADD A,R6 4E ORL A,R6 6E XRL A,R6 OF INCR7 2F ADD A,R7 4F ORL A,TR 6F XRL A,R7 10 JBC bit,d 30 JNB bit,d 50 JNCd 70 JNZd 11 ACALL adrii 31 ACALL adrii 51 ACALL adrii 71 ACALL adrii 12 LCALL adrl6 32 RETI 52 ANL ad,A 72 ORL C,bit 13 RRCA 33 RLCA 53 ANL ad,* n 73 JMP @A+DPTI 14 DĘĆ A 34 ADDC A,* n 54 ANL A, # n 74 MOVA,#n 15 DĘĆ ad 35 ADDC A,ad 55 ANL A,ad 75 MOV ad,* n 16 DĘĆ @RO 36 ADDC A,@RO 56 ANL A,@RO 76 MOV @RO,#i 17 DĘĆ @R1 37 ADDC A,@R1 57 ANL A,@R1 77 MOV @Rl,#i 18 DECRO 38 ADDC A,RO 58 ANL A,RO 78 MOV R0,#n 19 DECR1 39 ADDC A,R1 59 ANL A,R1 79 MOV Rl,*n 1A DECR2 3A ADDC A.R2 5A ANL A,R2 7A MOV R2,#n 1B DECR3 3B ADDC A,R3 5B ANL A,R3 7B MOV R3,#n 1C DECR4 3C ADDC A,R4 5C ANL A,R4 7C MOV R4,#n 1D DĘĆ RS 3D ADDC A,R5 5D ANL A,R5 7D MOV R5,#n 1E DECR6 3E ADDC A,R6 5E ANL A,R6 7E MOV R6,#n 1F DECR7 3F ADDC A,R7 5F ANL A,R7 7F MOV R7,*n Rozkazy ustawiające znaczniki CY, AC i OV Znaczniki Znaczniki Znaczniki Roztoz CY AC OV Rozkaz CY AC OV Rozkaz CY AC 0 ADD t t t ADDC t t I SUBB I f t MUL 0 - t DIV 0 - t DA t - - RRC 1 - -RLC I - -CJNE t - -SETBC l CLRC 0 - -CPLC t - - ANLC,bit t ANLC,/bit f ORLC,bit t ORLC,/bit t MOV C,bit I 8751,8052,8032 w kolejności numerycznej kod hex mnemonik kod hex mnemonik kod hex mnemonik kod hex mnemonik 80 SJMPd AO ORL C,/bit CO PUSH ad EO MOVXA,@DPTR 81 AJMP adrii Al AJMP adrii Cl AJMP adrii El AJMP adrii 82 ANL C,bit A2 MOV C,bit C2 CLRad E2 MOVX A,@RO 83 MOVCA,@A+PC A3 INC DPTR C3 CLRC E3 MOVX A,@R1 84 DIVAB A4 MULAB C4 SWAPA E4 CLRA 85 MOV ad,ad A5 - C5 XCH A,ad E5 MOV A,ad 86 MOV ad,@RO A6 MOV @RO,ad C6 XCH A,@RO E6 MOV A,@RO 87 MOV ad,@Rl A7 MOV @Rl,ad C7 XCH A,@R1 E7 MOV A,@R1 88 MOV ad, RO A8 MOV RO, ad C8 XCH A,RO E8 MOV A,RO 89 MOV ad, Rl A9 MOV Rl, ad C9 XCH A.R1 E9 MOV A,R1 8A MOV ad, R2 AA MOV R2, ad CA XCH A,R2 EA MOV A,R2 8B MOV ad, R3 AB MOV R3, ad CB XCH A,R3 EB MOV A,R3 8C MOV ad, R4 AC MOV R4, ad CC XCH A,R4 EC MOV A,R4 8D MOV ad, R5 AD MOV R5, ad CD XCH A,R5 ED MOV A,R5 8E MOV ad, R6 AE MOV R6, ad CE XCH A,R6 EE MOV A,R6 8F MOV ad, R7 AF MOV R7, ad CF XCH A,R7 EF MOV A,R7 90 MOV DPTR,#nn BO ANL C,/bit DO POP ad FO MOVX @DPTR,A 91 ACALL adrii Bl ACALL adrii Dl ACALL adrii Fl ACALL adrii 92 MOV bit,C B2 CPL bit D2 SETB bit F2 MOVX @RO,A 93 MOVCA,@A+DPTR B3 CPLC D3 SETBC F3 MOVX @R1,A 94 SUBB A,#n B4 CJNEA,#n,d D4 DA A F4 CPL A ^ SUBB A,ad B5 CJNE A,ad,d D5 DJNZ ad,d F5 MOV ad,A 96 SUBB A,@RO B6 CJNE@RO,*n,d D6 XCHD A,@RO F6 MOV @RO,A J97 SUBB A,@R1 B7 CWE@Rl,*a,d D7 XCHD A,@R1 F7 MOV @R1,A .98 SUBB A,RO B8 CJNERO,#n,d D8 DJNZ R0,d F8 MOV RO,A '99 SUBB A,R1 B9 CJNE Rl,*n,d D9 DJNZ Rl,d F9 MOV R1,A ,9A SUBB A,R2 BA CJNE R2,#n,d DA DJNZ R2,d FA MOV R2,A 9B SUBB A,R3 BB CJNER3,*n,d DB DJNZ R3,d FB MOV R3,A 9C SUBB A,R4 BC CJNER4,*n,d DC DJNZ R4,d FC MOV R4,A 9D SUBB A,R5 BD CJNER5,*n,d DD DJNZ R5,d FD MOV R5,A 9E SUBB A,R6 BE CJNER6,#n,d DE DJNZ R6,d FE MOV R6,A 9F SUBB A,R7 BF CJNER7,#n,d DF DJNZ R7,d FF MOV R7,A i - znacznik ustawiany zgodnie z wynikiem operacji l - znacznik zerowany . - znacznik ustawiony - - znacznik nie zmieniany •g l Słowa sterujące i kontrolne - SFR TMOD - słowo określające tryb pracy układu czasowo-licznil licznikTl licznik TO adres (hex): 89 GATE C/T Ml MO GATE C/T Ml MO GATE (bit sterujący) - uaktywnienie bramkowania Służy do uaktywnienia zewnętrznego kowania licznika: GATE = O - licznik Ti pracuje, gdy TRi = l; ___ GATE = l - licznik Ti pracuje, gdy TRi = l i INTi = l. C/T (bit sterujący) - wybór funkcji Określa funkcję realizowaną przez liczni C/T = O - czasomierz taktowany wewnętrznym sygnałen rowym fxrAi,/12; C/T = l - licznik impulsów zewnętrznych z wejścia Ti. Ml, MO (bity sterujące) - wybór trybu Oreślają tryb pracy licznika Ti: Ml MO = 00 - tryb 0: 8-bitowy licznik THi taktowany r 5-bitowy dzielnik TLi; Ml MO = 01 - tryb l: 16-bitowy licznik THi-TLi; Ml MO = 10 - tryb 2: 8-bitowy licznik TLi z automat) wpisywaniem wartości początkowej z TH Ml M0== 11 - tryb 3: licznik TO - dwa niezależne 8-liczniki: TŁO (sterowany za pomocą bitów cych licznika TO) i THO (sterowany za ] bitów sterujących licznika T l); licznik trzymany. 30 Słowa sterujące i k TCON - słowo sterujące układ rwaniami zewnętrznyn adres bitu (hex): 8F 8E 8D adres (hex): 88 |TFl|TRl|fFO^ (MSB) TF1 (TCON.7) - znacznik przepełn Ustawiany sprzęte nika Tl; jest sygnałem znoszenia prz przerwania. TRI (TCON.6) - bit sterujący zliczs Zmieniany próg (TRI = l) lub odłączenie (TRI = 0: licznika Tl. TFO (TCON5) - znacznik przepełn Ustawiany sprzęt< nika TO; jest sygnałem zgłoszenia pra przerwania. TRO (TCON.4) - bit sterujący zliczi Zmieniany próg: (TRO = l) lub odłączenie (TRO = 0: licznika TO. IE1 (TCONJ) - znacznik zgłoszeni. Ustawiany sprzęta wania zewnętrznego na wejściu I przerwania. m (TCON2) - bit sterujący zgłosa Zmieniany prograi przerwania zewnętrznego na INT1, tz opadającym zboczem (IT1 = l) sygn; IEO (TCON.l) - znacznik zgłoszeni, Ustawiany sprzętom nią zewnętrznego na wejściu INTO; ze ITO (TCON.O) - bit sterujący zgłoś-" Zmieniany prograi przerwania zewnętrznego na INTO, tz opadającym zboczem (ITO = l) sygn Słowa sterujące i kontrolne - SFR 31 IE - maska przerwań adres bitu (hex): AF AE AD AC AB AA A9 A8 adres (hex): A8 |EA|-|ET2|ES|ETl|EXl|ETO|EXO| DE (MSB) (LSB) EA (IE.7) - bit maski systemu przerwań EA = O - wszystkie przerwania zablokowane; EA = l - odblokowane te przerwania, których bit maski jest jedynką. - (IE.6) - rezerwa ET2 (IE.5) - bit maski przerwania z licznika-czasomierza T2 ES (IE.4) - bit maski przerwania z portu szeregowego ET1 (HL3) - bit maski przerwania z licznika-czasomierza T l EX1 (IE.2) - bit maski przerwania zewnętrznego INT1 ETO (IE.I) - bit maski przerwania z licznika-czasomierza TO EXO (IE.O) - bit maski przerwania zewnętrznego INTO Dla bitów od IE.O do IE.5: IE.i = O - przerwanie zablokowane, IE.i = l - przerwanie odblokowane. 32 Słowa sterujące i kontrolne - SFR IP - słowo sterujące priorytetem przerwań adres bitu (hex): BF BE BD BC BB BA B9 B8 adres (hex): B8J- |-|PT2|PS|PT1 |PX1 JPTO |PXO | IP (MSB) (LSB) - (IP-7) - rezerwa - (IP.6) - rezerwa PT2 (IP.5) - bit priorytetu przerwania z licznika-czasomierza T2 PS (IP.4) - bit priorytetu przerwania z portu szeregowego PTI (IP.3) - bit priorytetu przerwania z licznika-czasomierza T l PX1 (IP.2) - bit priorytetu przerwania zewnętrznego INT1 PTO (IP.l) - bit priorytetu przerwania z licznika-czasomierza TO PXO (IP.O) - bit priorytetu przerwania zewnętrznego INTO Dla bitów od IP.O do IP.5: IP.i == O - przerwanie umieszczone na niższym poziomie priol tetu, IP.i = l - przerwanie umieszczone na wyższym poziomie pri rytetu. Słowa sterujące i kontrolne - SFR 33 99 98 SCON - słowo sterujące portem szeregowym adres bitu (hex): 9F 9E 9D 9C 9B 9A adres (hex): 98 SMOJSM1 SM2|REN TB8 RB8 JTI | RI | SCON (MSB) (LSB) SMO (SCON.7) SM1 (SCON.6) - bity sterujące; tryb pracy Określają tryb pracy portu szeregowego: SMO SM1 = 00 - tryb 0; transmisja synchroniczna; znaki 8-bito- we; taktowane zegarem f\TAL/12; SMO SM1 = 01 - tryb l; transmisja asynchroniczna; znaki 8-bito- we; szybkość określona programowo; SMO SM 1=10- tryb 2; transmisja asynchroniczna; znaki 9-bito- we; szybkość fxTAL/64 lub fxTAL/32; SMO SM1 = 11 - tryb 3; transmisja asynchroniczna; znaki 9-bito- we; szybkość określona programowo. SM2 (SCON.5) - bit sterujący; maskowanie odbioru znaku Zmieniany programowo; jeśli SM2 = l, to są ignorowane (nie jest ustawiany znacznik RI) odebrane znaki, w których w trybie 2 i 3 dziewiąty bit (DB8) danych jest zerem, a w trybie l nie został wykryty bit stopu; w trybie O powinno być SM2 = 0. REN (SCON.4) - bit sterujący; uaktywnienie odbioru Zmieniany programowo dla uaktywnienia (REN = l) i zablokowania (REN = 0) odbiornika. TB8 (SCON.3) - dziewiąty bit nadawanego znaku Zmieniany programowo; jest dziewiątym bitem (DB8) znaku wysyłanego w trybie 2 i 3. RB8 (SCON.2) - dziewiąty bit odebranego znaku Miejsce wpisywania dziewiątego bitu (DB8) znaku odebranego w trybie 2 i 3; w trybie l do RB8 jest wpisywany bit stopu; w trybie O bit RB8 nie jest używany. TI (SCON.l) - znacznik wysłania znaku Ustawiany sprzętowo po zakończeniu wysyłania znaku; zerowany tylko programowo; jest sygnałem zgłoszenia przerwania. RI (SCON.O) - znacznik odebrania znaku Ustawiany sprzętowo po odebraniu znaku; zerowany tylko programowo; jest sygnałem zgłoszenia przerwania. 34 Słowa sterujące i kontrolne - SFR PCON - słowo sterujące zasilaniem adres (bex): 871 SMOD| GF1 GFO PDJIDL PCOIS (MSB) (LSB) SMOD - bit sterujący; podwojenie szybkości transmisji Ustawiany programowo, w celu podwojenia (g( SMOD = l) szybkości transmisji portu szeregowego prac jącego w trybie 2 oraz w trybie l i 3, jeżeli port jest taktował licznikiem T l. GF1, GFO - znaczniki programowe ogólnego przeznaczenia (tyli układy CHMOS) PD - bit sterujący; obniżony pobór mocy (tylko układy CHMOS Ustawiany programowo w celu wprowadzenia układu w sti obniżonego poboru mocy; zerowany tylko przy zerowan mikrokomputera. IDL - bit sterujący; stan jałowy (tylko układy CHMOS) Ustawiany programowo w celu wprowadzenia układu w tn pracy jałowej; zerowany przy przyjęciu przerwania i zerowan mikrokomputera. Słowa sterujące i kontrolne - SFR 35 T2CON - słowo sterujące licznikiem T2 (tylko w 8052/32) adres bitu (hex): CF CE CD CC CB CA C9 C8 adres (hex):C8|rF2|EXF2[RCLK|TCLK|EXEN2trR2|C/T2|CP/RL2|T2CON (MSB) TF2 (T2CON.7) EXF2 (T2CON.6) RCLK (T2CON.5) TCLK CT2CON^) EXEN2 (T2CON J) (LSB) - znacznik przepełnienia licznika T2 Ustawiany sprzętowo przez sygnał przepełnienia licznika T2; zerowany tylko programowo; jest sygnałem zgłoszenia przerwania; nie jest ustawiany, jeżeli RCLK = l lub TCLK == l. znacznik sygnału zewnętrznego na T2EX Ustawiany po wykryciu opadającego zbocza sygnału na wejściu T2EX (Pl.l) tylko wtedy, kiedy EXEN2 = l; zerowany tylko programowo; jest sygnałem zgłoszenia przerwania. bit sterujący zegarem odbiornika portu szeregowego Zmieniany programowo; jeśli RCLK = l, to odbiornik portu szeregowego w trybie l i 3 jest taktowany sygnałem przepełnienia licznika T2. bit sterujący zegarem nadajnika portu szeregowego Zmieniany programowo; jeśli TCLK = l, to nadajnik portu szeregowego w trybie l i 3 jest taktowany sygnałem przepełnienia licznika T2. bit sterujący; uaktywnienie wejścia T2EX Zmieniany programowo; jeśli EXEN2 = l, to opadające zbocze sygnału na wejściu T2EX (Pl.l) powoduje ustawienia znacznika EXF2 oraz wpisanie do licznika T2 wartości początkowej z rejestru RLD lub zapisanie do RLD zawartości T2 (zgodnie z wartością bitu 36 Słowa sterujące i kontrolne - SFR TR2 (T2CON.2) CP/RL2); jeśli EXEN2 = O, to wszelkie zmiął na T2EX są ignorowane. bit sterujący zliczaniem licznika T2 Zmieniany programowo; zapewnia dołączeń (TR2 = l) lub odłączenie (TR2 = 0) sygna: zliczanego od licznika T2. C/n (T2CON.1) - bit sterujący wyborem funkcji licznika T2 Zmieniany programowo; określa funkcję rea] zowaną przez T2: C/T2 = O - czasomierz taktowany sygnałem zegarowym fxTAL/l C/T2 = l - licznik impulsów zewnętrznych z wejścia T2 (P 1.0). CP/RL2 (T2CON.O) - bit sterujący wyborem trybu Zmieniany programowo; określa tryb prac licznika T2: CP/RL2 = O CP/RL2 = l 16-bitowy licznik z automatycznym ładowaniei wartości początkowej z RLD przy przepełnieni lub opadającym zboczu sygnału na T2EX, 16-bitowy licznik mód 216 z zapisywaniem zawarte ści do RLD przy opadającym zboczu sygnału n T2EX; jeżeli RCLK = l lub TCLK = l, to bit je; nieaktywny, a T2 pracuje z w trybie automatyca nego ładowania wartości początkowej z RLD prz przepełnieniu. ARCHITEKTURA WEWNĘTRZNA MIKROKOMPUTERÓW 8051/52 l ta Wewnętrzny schemat blokowy mik rokomputera 8051 pokazano na rys. 2.1. Dotyczy on, podobnie ja zamieszczony dalej dokładny opis poszczególnych zespołów funkcjonał nych, całej rodziny MCS-51, czyli układów 8051,8031,8751,8052 i 803; 2.1. PAMIĘĆ PROGRAMU, LICZNIK ROZKAZÓW Pamięć programu (ang. program mc mory) mikrokomuterów 8051/52 może mieć maksymalną pojemność 641 słów 8-bitowych. Organizacyjnie jest ona podzielona na strony (an{ pages) po 2K słów (rys. 2.2). Część pamięci programu jest zawart wewnątrz układu mikrokomputera i stanowi wewnętrzną pamięć progra mu (ang. resident program memory lub internal program memory). Jest ti zawsze pamięć stalą (typu ROM lub EPROM). Wielkości i typ wewnętrznej pamięci programu dla różnych układów rodziny MCS-5 zestawiono w tablicy 1.1. Pozostała część przestrzeni adresowej (do łączne pojemności 64K) może być wykorzystana po dołączeniu do układ' zewnętrznej pamięci programu (ang. external program memory). Może ti być pamięć dowolnego typu, ale w praktycznych systemach stosuje się n ogół wyłącznie pamięć EPROM. Sposób dołączenia zewnętrznej pamię< programu opisano w punkcie 3.1. Podział pamięci programu na częś wewnętrzną i zewnętrzną jest niezauważalny od strony programowej W pamięci programu są wyróżnione miejsca o następującyd adresach: O - od którego rozpoczyna się wykonywanie programu po wyzerowa niu mikrokomputera (RESET), 3, 11, 19, 27, 35, 43 (03H, OBH, 13H, 1BH, 23H, 2BH) - od któryci rozpoczyna się wykonywanie programów obsługi przerwań, przy czyn kolejność przerwań jest następująca: Pl.O - P1.7 P2.0 - P2.7 0 ^ PO.O - PO.7 ft nętrzny schemat blo mputera 8051 P l P2 Cstłrounik^ Cstłrouruk) PO C»t»rounik5 ^ I r-"- 0 0 ^ RłUłstr-adrł^ouy RAM =^ Parni «.d dariuct^ 128 R«M Pamięć programu 4K ROM <= ReJastr' łd>~»SOt->U ROM Pl P2 C bufora C but Ol" 3 PO Cbufoi-5 JL 1 r 0 0 ^ ^ ^ 0 ^ ^ ^r" ^ ^ \ .^ /1-Js •M-V /i-^ '^-v /LJS \r-^ ReJłitr ARumul •tor B ftCC Bufor MłkJinik stosu SP Bufor KTflLI --- XTftL2 --- AL Rejestr DPTR Licznik Bufor ALU ----Ą . OLE -«-- EA --l RST --l Układ • />-------- l l Ą stanu PSM ii PC \ryu RYS. 2.1. Wew kowy mikroko R«J«str " Z\ rozkttzóu J L, ^ 0 0 IE T MÓD SCON e '> P3 24 CISH^ 23 C17H3 16 C10H:) 1S COFhO 8 (08H:> 7 C07h0 Obszar adresowany bi-touo WEWNĘTRZNA PAMIĘĆ DANYCH SFR Zbló ZbiA RO R7 RO R7 RO Zbić Zbló RQ RYS. 2.3. Organizacja wewnętrznej pamięci danych mikrokomputera 8051 W pamięci użytkowej słowa o adresach 0-7, 8-15, 16-23 i 24-3: stanowią cztery zbiory uniwersalnych rejestrów roboczych (ang. workim registers) RO...R7. Słowa te są dostępne programowo jako rejestr: adresowane przez nazwę (np. MOV A,R1). W danej chwili są dostępni rejestry tylko z jednego zbioru, wskazanego przez dwubitowy wskaźnil zbioru rejestrów (ang. register bank switch) - RS, zawarty w słowie stani Rejestry specjalne 41 programu PSW (patrz punkt 2.3). Stan wskaźnika zbioru rejestrów może być zmieniany programowo. Drugi i dalsze zbiory rejestrów mogą być używane jako rozszerzenie pierwszego. Mogą być także przeznaczone do wykorzystania w programach obsługi przerwań lub podprogramach, kiedy istotne jest zachowanie zawartości rejestrów zbioru pierwszego, używanych w programie głównym. Drugi z powyższych sposobów jest korzystny z tego powodu, że wskaźnik zbioru jest częścią słowa stanu, a słowo stanu jest zwykle zapisywane na stosie w programach obsługi przerwań. Odtworzenie (zdjęcie ze stosu) słowa stanu przed powrotem z przerwania automatycznie przywraca aktywny zbiór rejestrów w programie głównym. Rejestry RO i R l z aktywnego zbioru pełnią funkcję wskaźników danych (ang. data pointers) do adresowania pośredniego zawartością rejestru pamięci danych, tzn. wewnętrznej (np. MOV @R1,A) oraz zewnętrznej (np. MOVX A, @RO). W wewnętrznej pamięci danych za pomocą tych wskaźników jest możliwe adresowanie tylko obszaru pamięci użytkowej (adresy 0-7FH). Cała wewnętrzna pamięć danych może być też adresowana bezpośrednio, tzn. przez podanie 8-bitowego adresu w treści rozkazu (np. MOV A,25). W ramach wewnętrznej pamięci danych, w obszarze o adresach 128-255 (80H-OFFH) jest umieszczona grupa rejestrów specjalnych (ang. special function registers) SFR. Rejestry te przedstawiono w tablicy 2.1. Ich funkcje omówiono dalej, w rozdziałach poświęconych odpowiednim blokom funkcjonalnym. Dostęp do obszaru SFR pamięci jest możliwy wyłącznie za pomocą adresowania bezpośredniego. Tylko do niektórych z rejestrów specjalnych (akumulator A oraz rejestry B i DPTR) można się także odwoływać jako do rejestrów - przez nazwę. Należy zwrócić uwagę, że wśród rejestrów specjalnych znajdują się m.in. porty wejścia-wyjścia oraz rejestry sterujące pracą bloków funkcjonalnych mikrokomputera. Dzięki umieszczeniu ich w przestrzeni adresowej wewnętrznej pamięci danych, jest możliwy łatwy i jednolity dostęp programowy do tych rejestrów za pomocą rozkazów przesłań, operacji logicznych oraz operacji na bitach. Na rysunku 2.4 pokazano organizację wewnętrznej pamięci danych mikrokomputera 8052. Obszar pamięci użytkowej jest tu zwiększony do 256 słów. Uzyskano to, dzięki umieszczeniu w przestrzeni o adresach od 128 do 255 (80H-OFFH) zarówno pamięci użytkowej, jak i zespołu 42 Rejestry specjabe TABUCA 2.1. Zestawienie rejestrów specjalnych Adres (hex) Oznaczenie Nazwa Miejsce opisu EO* ACC Akumulator punkt 2.3 FO* B Rejestr B DO* PSW Stówo stanu programu 81 SP Wskaźnik stosu punkt 2.2 83 82 DPH DPL bity 8-15 1 wskaźnik danych bity 0-7 j DPTR punkt 4.1 80* PO PortO punkt 2.5 90* Pl Port l AO* P2 Port 2 BO* P3 Port 3 B8* IP Stówo sterujące do ustawiania priorytetów przerwań punkt 2.8 A8* IE Stówo sterujące pracą systemu przerwań 88* TCON Słowo sterujące i kontrolne układu czasowo-licznikowego i systemu przerwań punkt 2.6.1 i 2.8.3 89 TMOD Słowo sterujące do ustawiania trybu pracy liczników w układzie czasowo-licznikowym punkt 2.6.1 8C 8A THO TŁO bity 8-15 1 16-bitowy bity 0-7 J licznik TO 8D 8B TH1 TLI bity 8-15 1 16-bitowy bity 0-7 j licznik T l C8* T2CON Słowo sterujące licznika 2 punkt 2.6.2 CD CC TH2 TL2 bity 8-15 t 16-bitowy bity 0-7 J licznik T2 CB CA RLDH RLDL bity 8-15 t Słowo ładowane bity 0-7 j do licznika T2 98* SCON Słowo sterujące portu szeregowego punkt 2.7 99 SBUF Bufor portu szeregowego 87 PCON Słowo sterujące zasilania punkt 2.10.2 Rejestry specjalne 43 rejestrów specjalnych SFR. Należy przy tym pamiętać, że dostęp do tej części pamięci użytkowej jest możliwy tylko za pomocą adresowania wskaźnikiem danych RO lub Rl, natomiast do rejestrów specjalnych -jak poprzednio, tzn. za pomocą adresowania bezpośredniego. Organizacja obszaru o adresach od O do 127 (0-7FH) jest taka sama, jak wspomniana wcześniej. Obszar ten może być adresowany w obu trybach. ObtZT pamląci u±Wtkou*J MEMNE.TRZNA PAMIĘĆ DANYCH UKŁftDU 8052 255 --^\ 0 (.OOH1 Ky& 2.4. Organizacja wewnętrznej pamięci danych mikrokomputera 8052 Mikrokomputery 8051/52 zawierają procesor boolowski, umożliwiający operacje na pojedynczych bitach. W części wewnętrznej pamięci danych, tzn. w obszarze pamięci użytkowej o adresach 20H-2FH oraz w niektórych rejestrach specjalnych (oznaczonych gwiazdką w tablicy 2.1), jest możliwe adresowanie poszczególnych bitów stów (adresowanie bezpośrednie - np. w rozkazie MOV C,22). Mapę adresów bitów pokazano na rys. 4.2. Większość asemblerów dopuszcza w rozkazach z adresem bezpośrednim, dotyczących zawartości rejestrów specjalnych lub ich bitów, podanie nazwy rejestru w polu adresowym rozkazu (np. MOV R2,P1 zamiast MOV R2,90H) oraz nazwy rejestru z numerem bitu lub nazwy bitu (np. MOV C,ACC.3 zamiast MOV C,OE3H czy SETB TCON.6 lub SETB TRI zamiast'SETB 8EH). Taka notacja będzie też stosowana w dalszej części niniejszego opracowania. W wewnętrznej pamięci danych (w obszarze pamięci użytkowej) może być umieszczony stos (ang. stać k) o dowolnej wielkości (ograniczonej pojemnością pamięci), adresowany przez 8-bitowy wskaźnik stosu (ang. stack pointer) SP (SFR adres 81H), wskazujący jego wierzchołek. Wskaźnik ten jest przed każdym zapisywaniem na stos zwiększany o l, a po każdym odczytywaniu ze stosu - zmniejszany o l. Na stosie w czasie wykonywania rozkazu skoku do podprogramu (CALL) oraz przy przyjęciu przerwania jest zapisywana automatycznie 44 ALU, akumulator, słowo stanu zawartość licznika rozkazów (2 bajty). Ponadto, za pomocą rozkazi: PUSH może być tam także zapisana zawartość dowolnej - adresowane bezpośrednio - komórki wewnętrznej pamięci danych (również rejest rów specjalnych). Zdejmowanie informacji ze stosu następuje w wyniku wykonani; rozkazów powrotu RET lub RETI, powodujących odtworzenie stani licznika rozkazów, oraz rozkazu POP, powodującego wpisanie zdej mowanych danych pod wskazany adres bezpośredni w pamięci. 2.3. JEDNOSTKA ARYTMETYCZNO-LOGICZNA, AKUMULATOR, SŁOWO STANI Jednostka arytmetyczno-logiczi (ang. arithmetic-logie unit)-ALU -mikrokomputerów rodziny MCS-; działa na słowach 8-bitowych. Może wykonywać następujące operac arytmetyczne: - dodawanie argumentów, dodawanie z przeniesieniem, odejmować z pożyczką; pierwszy z argumentów (składnik, odjemna) jest umies czony w akumulatorze, a drugi (składnik, odjemnik) - w wewnętrzr pamięci danych lub jako argument bezpośredni rozkazu; wynik je wpisywany do akumulatora; w słowie stanu PSW są ustawia (zgodnie z wynikiem operacji) znaczniki przeniesienia CY i nadmia OV, sygnalizujące przekroczenie zakresu liczb 8-bitowych, odpowie nio bez znaku i ze znakiem; - mnożenie 8-bitowych liczb bez znaku, umieszczonych w akumulat rżę i rejestrze B; 16-bitowy wynik jest wpisywany do akumulatora mniej znaczących bitów) i rejestru B (8 bardziej znaczących bitóv dzielenie 8-bitowych liczb bez znaku dzielnej z akumulatora prz dzielnik z rejestru B; część całkowita ilorazu jest wpisywana i akumulatora, a reszta do rejestru B; - zwiększanie i zmniejszanie o l zawartości akumulatora lub dowoli komórki wewnętrznej pamięci danych; - korekcja dziesiętna wyniku dodawania zapisanego w akumulator; ALU, akumulator, słowo stanu 45 ALU może wykonywać także następujące operacje logiczne: - iloczyn (AND), suma (OR), różnica symetryczna (EXOR); argumenty operacji są umieszczone jak przy dodawaniu lub jeden z nich i wynik operacji są umieszczone w wewnętrznej pamięci danych (adresowanej bezpośrednio), a drugi stanowi zawartość akumulatora lub argument bezpośredni rozkazu; - negacja (NOT) zawartości akumulatora; - przesuwanie cykliczne zawartości akumulatora w lewo i w prawo. Ośmiobitowy akumulator (ang. accumulator) - A -jest jednym z najważniejszych rejestrów procesora, współpracującym z jednostką arytm-metyczno-logiczną. Jest on miejscem, z którego zostaje pobrany argument (lub jeden z argumentów) i do którego wpisuje się wynik większości operacji. Ponadto, akumulator jest rejestrem przesunięcia dodawanego do adresu bazowego przy pobieraniu danych z pamięci programu oraz przy skoku pośrednim. Jest on jednym z rejestrów specjalnych (SFR adres OEOH, adresowany bitowo). Jest dostępny programowo na dwa sposoby: jako rejestr adresowany przez nazwę A oraz jako rejestr specjalny adresowany bezpośrednio. W tym drugim przypadku jest oznaczany symbolem ACC. Dostęp za pomocą adresowania bezpośredniego wykorzystuje się przede wszystkim przy przesyłaniu zawartości akumulatora na stos. Drugim ważnym rejestrem (związanym z ALU) jest rejestr B (SFR - adres OFOH). Przy wykonywaniu operacji mnożenia i dzielenia jest używany tak, jak opisano wyżej. Poza tym może być wykorzystywany w sposób dowolny jako rejestr uniwersalny. Słowo stanu programu (ang. program status word) - PSW - jest 8-bitowym rejestrem (SFR adres ODOH, adresowany bitowo), złożonym z pojedynczych znaczników informujących o przebiegu oraz wyniku operacji arytmetycznych i logicznych (rys. 2.5). Znaczenie poszczególnych bitów słowa stanu jest następujące: PSW.O (P) - znacznik parzystości (ang. parity flag), ustawiany w każdym cyklu maszynowym; wskazuje parzystą (P = 0) lub nieparzystą (P == l) liczbę jedynek w akumulatorze; PSW. l - nie używany; 46 ALU, akumulator, słowo stanu PSW.2 (OV) - znacznik nadmiaru (ang. overflow flag), do której przy wykonywaniu operacji dodawania (rozkaa ADD, ADDC) i odejmowania (rozkaz SUBB) wpisi je się różnica symetryczna przeniesień lub pożyczę z bitów 6 i 7; wskazuje (OV = l) przekroczeń: zakresu liczb w kodzie uzupełnień do 2; przy operac dzielenia (DIV) wskazuje próbę dzielenia przez zeń PSW.3, PSW.4 (RSO, RS l) - wskaźnik zbioru rejestrów roboczyc (ang. working register bank switch), zmieniany prc gramowo, przy czym: RS l RSO = 00 - zbiór O, RS1 RSO = 01 - zbiór l, RS l RSO = 10 - zbiór 2, RS1 RSO = 11 - zbiór 3 (patrz punkt 2.2); PSW.5 (FO) - znacznik programowy (ang. user controlled flag} ustawiany, zerowany i testowany programowo; służ; do przekazywania informacji dwójkowej miedz] różnymi fragmentami programu; PSW.6 (AC) - znacznik przeniesienia pomocniczego (ang. auxiliar) carryflag), do którego w czasie wykonywania operacji dodawania (ADD, ADDC) i odejmowania (SUBB) jest wpisywane przeniesienie lub pożyczka z bitu 3; wykorzystywany przy korekcji dziesiętnej (DA A); PSW.7 (CY) - znacznik przeniesienia (ang. carryflag), do którego wpisuje się przeniesienie z najbardziej znaczącego bitu; ustawiany w wyniku wykonania operacji arytmetycznych oraz przesunięć; wskazuje (CY = l) przekroczenie zakresu liczb w naturalnym kodzie dwójkowym; przy wykonywaniu operacji logicznych na bitach pełni funkcję akumulatora w procesorze boolowskim; jest dostępny programowo również przez nazwę C. RYS. 25. Sowo stanu programu Poszczególne bity słowa stanu mogą być testowane w programie np. za pomocą rozkazów skoków warunkowych. 2.4. ZEGAR SYSTEMOWY, CYKL ROZKAZOWY Mikrokomputery 8051/52 zawierają wewnątrz układu generator, który - po dołączeniu zewnętrznego rezonatora do wejść XTAL -wytwarza sygnał zegarowy taktujący układ sterowania. Rezonator zewnętrzny określa częstotliwość sygnału zegarowego, której wartość powinna wynosić od 1,2 do 12 MHz. Może być także użyty dowolny rezonator, np. ceramiczny. Jedynie w przypadku, kiedy jest wymagana duża dokładność częstotliwości zegara, należy użyć rezonatora kwarcowego. Zalecany sposób dołączenia rezonatora pokazano na rys. 2.6a. RYS. 2.6. Sposób dołączenia do 8051/52: a) rezonatora; b) zewnętrznego sygnału zegarowego (układy HMOS); c) zewnętrznego sygnału zegarowego (układy CHMOS) Jest też możliwe wykorzystanie zewnętrznego sygnału zegarowego o takiej częstotliwości, jak poprzednio. Dołącza się go do wejść XTAL, przy czym inaczej dla układów HMOS (rys. 2.6b), a inaczej dla CHMOS (rys. 2.6c). Nie ma specjalnych wymagań co do wypełnienia sygnału 48 Zegar systemowy, cykl rozkazowy zegara zewnętrznego, poza wymaganiem minimalnego czasu trwani (20 ns) stanu niskiego i wysokiego (patrz punkt 1.2.2). Z sygnału zegarowego o częstotliwości IXTAL (zewnętrznego lu wewnętrznego) jest wytwarzany właściwy dwufazowy sygnał taktując procesor o częstotliwości dwukrotnie mniejszej. Sygnał ten nie je; dostępny na zewnątrz układu. Cykl ma^zyno^u Cykl maszynouy Sl : S2 : S2 ; S4 ; SS : S6 ; Sl i S2 : S3 ; S4 ; SS '; S6 : Sl : P l P2 'P l P2 ip l P2 'f l P2 :P l P2 ;P l P2 ;P l P2 'P i P2 ;P l P2 ip l P2 ;P l. P2 ;P l P2 :P l P2 ; "'umnJmnnimmmJuumiu^^ RET 5 t t t t t Sl S2 53 S4 55 S6 Sl S2 S3 S4 SS S6 Sl ; Pobrani* trzeci»90 Pobr .bł^tu nałt^pr l ^49^W9)l odu (Pobrai-tit H drusiłoo LbaJtu 3baJty,2 cykl. 51 S2 53 S4 SS S6 Sl S2 S3 S4 SS S6 f> l MOVX l (lb«jt,2CMkI. rPobranił kodu ["Pobrani 9 kodu ni« m* Lrozkazu r-\ n»»-tĄpnł90 rozkazu i pobrania i Pobranie ^• |_^J^ou«5 l ______l n««t«;ion«gc |) rozkazu n\f m« BLE l i Cgoutdrnł: ł<~~^ ł T Sl S2 S3 S4 SS S6 Sl S2 S3 S4 SS S6 Sl ; ADR : D^NE ^ Doitąio do ZtUnĄ-trilfJ parni •ci danuch RYS. 2.7. Cykl maszynowy: a) sygnały zegarowe; b - f) schematy wykonywania kłodowych rozkazów Zegar systemowy, cykl rozkazowy Cykl maszynowy (ang. machinę cycle) składa się z s (ang. states). Stan - z kolei - dzieli się na dwie fazy (ai jednym takcie zegara każda. Cykl maszynowy jest więc w czasie 12 taktów (faz) numerowanych od S l P l (stan l, fi (stan 6, faza 2). Podział cyklu maszynowego pokazane uwzględniając dostępne na zewnątrz układu sygnały: zegi oraz ALE, wysyłany dwukrotnie w każdym cyklu. W każdym stanie cyklu maszynowego wykonują i mentarne operacje, przy czym w stanach S l i S4 jes odczytywanie pamięci programu (ang. fetch). Zazwy S l jest pobierany (z komórki o adresie zawartym w liczn kod rozkazu (ang. instruction code fetch). W stanie S2jes rozkaz oraz zwiększana o l zawartość licznika rozkazów stanach wykonują się operacje wynikające z treści r wykonanie rozkazu wymaga odczytania z pamięci ] argumentu lub adresu bezpośredniego, to odbywa si( S4 - w innym przypadku odczytanie w stanie S4 je wykorzystane). Dzięki dwukrotnemu czytaniu z pamięci programu w maszynowym, prawie wszystkie rozkazy (również tr wykonywane w czasie jednego lub dwóch cykli. Wyj rozkazy mnożenia MUL i dzielenia DIV, wykonywane w cykli. Widać to na rys. 2.7, na którym pokazano schem; przykładowych rozkazów z różnych grup. Tylko spos' rozkazów MOVXjest nieco odmienny od pozostałych. \^ ku, w drugim cyklu maszynowym jest realizowany dostę nej pamięci danych - nie ma więc pobierania z pamięci ] jest też wytwarzany sygnał ALE. Podczas wykonywania cykli maszynowych są gener sterujące do współpracy mikrokomputera z zewnętrzr pamięci (rys. 2.8). Są to: ALE - wspomniany już sygnał wysyłany dwukroi cyklu maszynowym, będący sygnałem stro wysłany do portu PO przy każdym odczytyy rznej pamięci programu oraz przy komunik; na pamięcią danych (w czasie wykonyw; MOVX); w obu przypadkach w chwili opad 50 PSEŃ Zegar systemowy, cykl rozkazowy sygnału ALE adres jest obecny na porcie PO i dotyczy najbliższego przesłania; - sygnał odczytywania z zewnętrznej pamięci programu, wytwarzany przy każdym pobraniu (z tej pamięci) kodu rozkazu lub argumentu; RD, WR - sygnały odczytywania i zapisywania do zewnętrznej pamięci danych, wytwarzane w czasie wykonywania rozkazów MOVX. Cykl m««zunouu t : Sl : S2 : S3 : S4 ; S5 : S6 ; Sl ; 52 ; S3 \ 54 ; SS : S6 : iPl Pzipi fi'fl P2'Pl Pzipi P2'ft Pzipi P2:P1. P2';P1 PZiPI P2;Pl P2:Pl P2: 1 n r~ -C r uytuarzany przy d o x«unCt-SB > Rys. 2.10L Słowo sterujące TMOD Słowo TMOD (rys. 2.10) służy do ustawiania trybu pracy i funkcji realizowanej przez licznik. Znaczenie bitów słowa jest następujące: Ml, MO - ustawienie trybu pracy, przy czym: MIMO =00-tryb O, MIMO =01 -tryb l, Ml M0= 10-tryb 2, MIMO =11-tryb 3; c/r GATE ustawienie realizowanej funkcji, _przy czym C/T = O oznacza funkcję czasomierza, a C/T = l - funkcję licznika impulsów zewnętrzych; uaktywnienie bramkowania zliczania zewnętrznym syg nałem z wejścia INTi (i = O, l). Rdr>« bitu Ch«x5: BF 8E 90 aC TF1 TRI TFO TRO IEI IT1 IEO ITO RYS. 2.11. Słowo sterujące TCON W słowie TCON (rys. 2.11) do kontroli i sterowania prac liczników służą: TCON.7 (TF1) i TCON.5 (TFO) - znaczniki przepełnienia UcznikÓM LicnrikiTO.Tl .., TCON.6 (TRI) i TCON.4 (TRO) - bity sterujące zliczaniem, tzn TRi = O (i = O, l) powoduje za trzymanie licznika Ti, TRi = l (i == O, l) powoduje pracę licznika Pozostałe bity słowa TCON są przeznaczone do sterowania pracą systemu przerwań i będą omówione w punkcie 2.8. Jeżeli jest realizowana funkcja czasomierza (tzn. w słowie TMOI jest C/T równe 0), to zawartość licznika jest zwiększana o l w każdyru cyklu maszynowym. Cykl jest wykonywany w ciągu 12 taktów zegara. Częstotliwość sygnału zegarowego taktującego licznik wynosi zatem fr = fxTAL/12 (fxTAL - częstotliwość rezonatora). Podczas realizacji funkcji licznika impulsów zewnętrznych (tzn. kied> w słowie TMOD jest C/T równe l) odpowiednie wejście TO lub T l jes1 próbkowane w stanie S5P2 każdego cyklu maszynowego. Jeżeli prz> dwóch kolejnych próbkach zostanie wykryta zmiana l na O na wejściu (opadające zbocze impulsu), to w stanie S3P1 następnego cyklu maszynowego nastąpi zwiększenie zawartości licznika o l. Do wykrycia zmiany na wejściu są potrzebne dwa cykle maszynowe, a zatem maksymalna częstotliwość zliczanych impulsów wynosi fcNTmax == fxTAL/24 Ponadto, aby wszystko przebiegało poprawnie, każdy stan logiczna zliczanych impulsów musi trwać co najmniej przez czas jednego cyklu maszynowego - jest to jedyny warunek na wypełnienie impulsów. Liczniki pracują tak samo, bez względu na realizowaną funkcję Różne jest tylko źródło zliczanych impulsów. Uruchomienie licznika T (i = O, l) następuje po wpisaniu l do bitu TRi w słowie TCON. Wtedy jeśli w słowie TMOD jest GATE = O, to do wejścia zegarowego licznika (rys. 2.12) zostaje dołączone wejście Ti mikrokomputera (gdy C/T == l lub wewnętrzny sygnał zegarowy (gdy C/T = 0). Uruchomiony licznik pracuje w sposób ciągły, zgodnie z ustawionym trybem. Zatrzymanie zliczania (czyli odłączenie źródła impulsów od wejścia zegarowego licznika) następuje wyłącznie w wyniku wyzerowania bitu TRi. Jeśl w słowie TMOD jest GATE równe l, to zewnętrzne lub wewnętrzni impulsy zegarowe licznika są dodatkowo bramkowane zewnętrznyir sygnałem z wejścia INTL W tym przypadku, po programowym uruchomieniu licznika (wpisaniu jedynki do TRi), zliczanie może być sterowane zewnętrznie - licznik pracuje tylko wtedy, kiedy INTi = 0. IBgJO 0§9f •ZJ9IUIOSBZ3 0-5[Br^ireMAłS-(ZJO'5[AM 3TOZtM9ZJ[d lS3f ^Jł ^ -maź po 9u^Monu^iuo-5[ isafaniszoii (i^u^pafaures) fan J psoł-reM np5iu9tiso OJ •E'}(IUZOI[ faMoyfezood psoutMTO po l '(fep^unJ feuoiAW(sn z anipoSz) Asindmi 3irez3i[z ts (i = rgJ, i) B'5[iuz3i[ nuraluloiptun oj •XUBMOJOUSI ;>Xq uaroiMod i •(sarsiu iqJ, nJisafar ^-o /AOfią u^is 'ni. nJisafal (qo^3teE3Buz tioSid) ^-c Moiiq i IHI nJisafaJ Moiiq niuiso z ^nozop •?[itiz3ii ^{Bizp 9iqXJi ui^i ^ •o 3iqAr( M oSgofefnotJd 'IJ, Z3-B-5[iuz3ii AMO-5[Oiq iBui3q3s oirezf5[od ^y-3 n^uns^J BN •^UZOJ łsar Ł q^Jl nqo ^ip auzo^iuapT ts ^ 11 'o ^q^JJ. 'i.lb^unJ faireMoziitai po 1 "lI GOWJ. ai^ois M tp^ i op^ ^oiiq ireis zazid vp^uo\s9r3[o •3J31Z3 Z UlXup3f M O^MOOBJd 3ZOUI AO'5[roZ3II Z ^pZt^ ^h^io-Ą uiKJSoid nipaiModpo ofezsid 'oaizpiMazJd 5f3tniXs 3N •B5[iuz3ii •(feq ^otzoBuz f3TzpJBq żis luamiz tU3nrełXz3 [p v ai^upat" XzpSno ^p3i'5[ 'np5{q op BzpBMOJdop pio^ z )T[ psoi-reM^z fauzoJ y(zJd 91^ '^ifeq tMp 3UBJ3Tqod 3ŻiA tg ignJp I o39ZSMJ3ld UI9IUBJqod ^ZpÓlUI Z9IUMOJ l O BtreZS5[3IMZ MI ^SOIJBABZ 'ZJ3IUIOSTOO oiiBf ogaofefnoBJd ^•5[inzoii M0tfeq A" mireAY^zopo ^ZJd aż 'żS^An ;>poJAZ -sfeupaf ^za[^ •PIU3Z3II S990Jd A ni B5(iuzoii ogaoferno^Jd psou^ABz TO TfoBJado iiaTAp^raTyf A UlXZ3 ^ZJd 'UIIUp3JSodZ9q UI3IUBAOS3JpB Z AOZ^5[ZOJ q3^U M^zn 35lA BUZOOI MO-5|TUZ3II qOBpSOHBABZ BU BIUB^IZp 0(J :1 Biinizoii łreq X3fezoBuz falatn - (nas sarpt - ^J§) ni B-spuzoii ifBq ^ofezoBUZ faizpJBq - (HG8 ^P18 - VdS) IHI )J. B-)[iuz3i[ ifeq ^3te3BUZ f3iuui - (HV8 saJpB - ^js) (ni B-5(TUZ31I lfeq ^OfezOBUZ f3IZpJBq - (H38 S9JpB - ^JS) OH1 :9U(Br33dS ^JlSafaJ OT(Vf OMOlUTBJSOJd 'S 039AVO-5ITUZOII-OMOS13Z3 npB^n I'5[TUZOII 3A01iq01SBUS3ZS Dar nzB'3pOJ fesomod BZ 'u 'oMoure-rgoJd ^ireMoisał SRSIM^ZOO za-t ;>^q azoui wiś oSsf 9TUZ3^lBOIOinB lS3f T J J. -5(TUZ3BUZ (g-^ •(•Spmd ZJ-(Bd) BUreMJ iptZJd •5(3łn^S BN 'II PZJalUlOSBZO-ElIlUZOII Z o39UZJlSnMaA d Biu9zsoi3z ai3(tn3^s 3TS[V\ o\ isaf 'N031 3iAO{s M IJJ, op B^u^pafBUBM^sidA łS3r'(psouBABz f9U[tinAs'5(Bui oSaf i o AŻ Od) IJ. B1ITOZOTI tm3Hq9d9ZJd 3[3in')IS VU 'OMOZBJOpZt'3 TI '01 '3c"»n 8S Liczniki TO, Tl T T r-Mb rvb 0 l TLi 5 8 bitÓU b J. t ów THi 8 bttau RYS. 2.11 Schemat blokowy liczników TO i Tl w trybie O i l podobna do występującej w mikrokomputerze 8048, tzn. 8-bitowy licznik THi jest taktowany zegarem systemowym poprzez dzielnik częstotliwości przez 32 - TLi. Jeśli nie jest wymagana duża rozdzielczość pomiaru, to układ może być użyty do odmierzania opóźnień i generowania przerwań zegarowych. W trybie l struktura licznika-czasomierza jest taka sama, jak w trybie O z tym, że pracuje cały 16-bitowy licznik. W trybie l układ jest wykorzystywany zarówno jako czasomierz, jak i jako licznik impulsów zewnętrznych. Przy użyciu funkcji czasomierza do generowania przerwań zegarowych konieczne jest -po każdym przerwaniu -programowe ładowanie do licznika wartości początkowej, określającej częstotliwość przerwań. Ponieważ czas od chwili przepełnienia licznika (zgłoszenia przerwania) do momentu jego przyjęcia jest różny (zależny od organizacji oprogramowania i często nieznany, zwykle kilka lub kilkanaście cykli maszynowych), a licznik pracuje cały czas, to załadowanie wartości początkowej do mniej znaczącego bajtu kasuje naliczoną wartość. To z kolei powoduje wystąpienie pewnego błędu w odmierzaniu okresu przerwań. Aby go uniknąć, przy wpisywaniu wartości początkowej mniej znaczącego bajtu - o ile nie jest ona zerowa - należy uwzględnić (dodać) bieżącą zawartość licznika. W wielu przypadkach można to zrobić za pomocą rozkazu sumy logicznej. Na przykład, przy odmierzaniu okresu 40 ms w systemie z zegarem 12 MHz (czas cyklu l p&) wartością początkową licznika jest liczba 64COH. Załadowanie jej do licznika TO nastąpi w wyniku wykonania sekwencji: ORL TŁO, #OCOH MOV THO, #64H ; dodanie do mniej znaczącego bajtu ; wpisanie bardziej znaczącego bajtu 60 liczniki TO, Tl Warunkiem poprawnego działania jest tu wykonanie rozkazu ORL, gdy zawartość TŁO jest mniejsza niż OCOH, to znaczy przed upływem 64 cykli maszynowych od zgłoszenia przerwania. W trybie 2 licznik Ti pracuje jako licznik 8-bitowy (TLi) z automatycznym wpisywaniem wartości początkowej (ang. automatic reload) zapisanej w THi (rys. 2.13). Przepisanie zawartości THi do TU następuje w chwili przepełnienia licznika. Jednocześnie jest ustawiany znacznik TFi. Zawartość THi pozostaje bez zmiany. Wartość początkowa może być wpisywana do THi i zmieniana programowo. Licznik pracujący w trybie 2 może być użyty dowolnie, zależnie od potrzeb. Szczególnie wygodne jest wykorzystanie licznika do wytwarzania przerwań zegarowych o zadanym okresie, przy czym maksymalny okres przerwań w tym trybie wynosi 256 cykli maszynowych, czyli 256 p.s przy zegarze 12 MHz. RYS. 1.13. Schemat blokowy liczników TO i Tl w trybie 2 Tryb 3 jest różny dla liczników TO i Tl. Licznik Tl w trybie 3 ni pracuje -jest zatrzymany, tak jakby TRI było równe 0. Na rysunku 2.1 pokazano konfigurację licznika TO w trybie 3. Poszczególne bajt licznika TO, tzn. THO i TŁO, działają w tym trybie jako dwa niezależc 8-bitowe liczniki. Bajt TŁO może być wykorzystany jako czasomierz lu jako licznik impulsów z wejścia TO. Jest wtedy sterowany za pomoc bitów sterujących licznika TO: C/T, GATE, TRO, INTO i TFO - podobn jak licznik TO w trybie O i l. Natomiast THO może pracować tylko jak czasomierz (zliczanie wewnętrznych impulsów zegarowych). Jest on pn tym sterowany (start, stop) za pomocą bitu TRI, ustawia znaczni przepełnienia TFI - są tu więc używane bity sterujące licznika T Tryb 3 jest stosunkowo rzadko wykorzystywany. Jest on przewidział dla mikrokomputera 8051 w zasadzie wyłącznie na wypadek, kiec Licznik T2 Rys. 2.14 Schemat blokowy licznika TO w trybie 3 licznik Tl (pracujący np. w trybie 2) jest użyty do określenia szybkość transmisji portu szeregowego, a do innych celów są potrzebne dw; niezależne liczniki. 2.6.2. LICZNIK T2 (TYLKO 8052/32) Układ czasowo-licznikowy mi krokomputerów 8052/32 zawiera dodatkowy 16-bitowy licznik T2: TH; (SFR - adres OCDH) i TL2 (SFR - adres OCCH). Licznik może pełnii funkcję czasomierza lub licznika impulsów zewnętrznych podanych n; wejście T2 (P 1.0). Zasada pracy licznika T2 jest w obu przypadkad podobna do zasady pracy liczników TO i Tl. Przy realizacji funkcj czasomierza licznik jest taktowany wewnętrznym sygnałem zegarowył o częstotliwości fxTAL/12. Jego zawartość jest zwiększana w każdyl cyklu maszynowym. Przy realizacji funkcji licznika impulsów zewnętrz nych zwiększenie zawartości licznika o l następuje po wykrycii opadającego zbocza sygnału na wejściu T2. Z licznikiem T2jest związany 16-bitowy rejestr RLD: RLDH (SFI - adres OCBH) i RLDL (SFR - adres OCAH). Jest on, w zależności o< trybu pracy licznika T2, rejestrem wartości początkowej dla licznika lul rejestrem zatrzaskowym, do którego jest wpisywana zawartość licznika. Do sterowania pracą licznika T2 służy słowo sterujące T2COI' (SFR - adres OC8H, adresowane bitowo), przedstawione na rys. 2.15 62 Adr«< bitu (h«x5: ftdrt* SFR : ce | TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2J T2 CUN 7HSBT Rys. 2.15. Słowo sterujące T2CON Znaczenie bitów jest następujące: T2CON.O (CP/RL2) - ustawienie trybu, przy czym: T2CON.1 (C/T2) T2CON.2 (TR2) CP/RL2 = O - praca z automatycznym wpisywaniem wartości początkowej, CP/RL2 = l - praca z zatrzaskiwaniem zawartości licznika; - ustawienie realizowanej funkcji.przy czym C/T2 = O oznacza funkcję czasomierza, a C/T2 = l - funkcję licznika impulsów zewnętrznych; - sterowanie zliczaniem, przy czym TR2 = l oznacza zliczanie, a TR2 = l - jego zatrzymanie; T2CON.3 (EXEN2) - znacznik uaktywnienia wejścia T2EX; < T2CON.4 (TCLK) T2CON.5 (RCLK.) - przypisanie T2 jako źródła impulsów zegaro wych dla nadajnika (TCLK = l) i odbiorniki (RCLK = l) portu szeregowego (patrz p. 2.7); T2CON.6 (EXF2) - znacznik opadającego zbocza impulsu na wejś ciu T2EX; aktywny, gdy EXEN2 = l; zgłoszeni' przerwania; T2CON.7 (TF2) - znacznik przepełnienia; zgłoszenie przerwania Niezależnie od realizowanej funkcji, określonej przez C/T2, liczni T2 może być wykorzystywany jako licznik-czasomierz, gdy w słowi 1T& tuisapJ op B^TOZSII psot-reMia anresidaz-id aCnpoMod (nd) X3ZJL| -psfoM op o§3uoz3fe{op n^u3y(s azooqz aotfepBdo 01 '•[ auAOJ ZN3X3 saf N03Z1 aiMO{s M i[S9f 'oAO-^poa 'I 3iq^-tł M 11 i OJ. nP23?! [Bf '9TUqOpOd V03VKŁ VfBYiQ •^JJ. IITOZOBUZ niUSIUpdaZJd AZJd 3fefBIM, -ttsn 'g^^ poui azsMBZ ^ZOKI ZJamios^zo-^luzoii ^ = ZTa/d3 ^"d ii •m^uzJt5uM3z uis^nSAs B^rozoitit <3BJd Biu^AvoziuoJqou^s 3SOAIIZOUI step i (9'NODZl) ZJX3 ^^i? -z3tuz 9iuaiA^isn aius9Z30UMOJ afnpoAod OJL '(rid) X3ZJ. CTOsfo* op , 0§9UOZ3fe{Op np3U8^S BZ30qZ OgSOfefBpBdO •5(9in-5lS BU Z9TOMOJ 3fnd3^a 1 B'5[iuzoii op raMo^łteood TOSOIJ^A anreMopBjpz oł 'J auAOJ ZN3X3 tS3f N03Z1 si^ojs M iiazaf 'ołp^aoj 7 3iqAn A IJ. i oi MO-SIIUZOII ^f 'auqopod n5[pBd^zJd ui^ AV OŻIM isaf^J. B-SITUZOII aureyelza '(/,'NOOZl) ^JJ, ^IU3Hq9d3ZJd lIlUZO^UZ 3IUS9Z30UAVOJ BIMBISn U31 (BUS^S "B-5IIUZ3II EiU3iiq9d9ZJd n^u3Xs iis ^lualMBfod -3i3in-5[s BU arndSis^u faMo^ -iteood psoiJ^M am^sid^ 'G^^ n-nsapsJ z faMo^fezood psoiJBA tnaro -BABSKIM la^uzo^^uiOłnB z afnoBJd ^J. ^lozOTi o = ^^^/d^ ^"d -(0'NOOZJ} | l^/d3 W ^ud q3XuoiS8J'3tO q3BqXJł qooAp M oB^cp azotO 5(iuz3ii n-5[p^dXzJd ui^i Ą^ -9^ -sXJ BU outzf3(od (o = "5n3^ l | 3 = '?n3..L ^z-id) ^J, Bz.oiuiosBzo-f5[iuz3ii ^upuo(b-5(nnJ iBui3q3S | (o='!noi! • ^TOa) V7iavaowza/viftvx3y wą^n A ^J. vifmx3x\ XMO]|o|q ł«aiaq3s '9n •SAI •T = '5n3H q"I T = :5n01 :N03Z1 HAOIS AV ^p§ '(/,-^ łl(Und ZJlBd) 039A033J9ZS n-UOd Pip q3^AOJt33Z AOSinduiT JoitJ3ua3 o^e! zai oqit 'o = -5n3^ i O = "3^31 :N03Z1 64 Licznik T2 i ustawienie znacznika EXF2. Umożliwia to np. łatwy i dokładny pomiar okresu sygnału zewnętrznego. W obu trybach ustawienie znacznika TF2 lub EXF2 jest sygnałem zgłoszenia przerwania z licznika-czasomierza T2 (patrz punkt 2.8) Przyjęcie tego przerwania nie powoduje automatycznego wyzerowania znaczników. Ich stan może więc być odczytany w programie obsługi w celu określenia przyczyny przerwania. Znaczniki powinny, zostać wyzerowane programowo. RYS. 2.17. Schemat blokowy licznika T2 jako układu taktującego port szeregów (RCLK = l lub TCLK = l) Jeżeli w słowie T2CON: TCLK = l lub RCLK = l, to liczn T2 pracuje jako generator sygnału taktującego port szeregowy, pr cujący w trybie l lub 3 (patrz punkt 2.7). Schemat funkcjonał! licznika T2 dla tego właśnie przypadku pokazano na rys. 2.1 Licznik działa jako licznik-czasomierz z automatycznym wpisywanie wartości początkowej z rejestru RLD, zliczający impulsy zewnętrz podane na wejście T2 (Pl.O) lub wewnętrzny sygnał zegarowy o ca stotliwości f\TAL/2. Sygnał przepełnienia nie ustawia teraz znaczni TF2. Po podzieleniu częstotliwości tego sygnału przez 16 okres on szybkość transmisji nadajnika (gdy TCLK = l) i odbiornika (g RCLK = l) w porcie szeregowym. Jeżeli w tym trybie w słov T2CON jest EXEN2 równe l, to opadające zbocze sygnału dołączone do wejścia T2EX (Pl.l) powoduje tylko ustawienie znacznika EX i zgłoszenie przerwania. Wejście T2EX może więc być użyte ja dodatkowe wejście przerywające. Port szeregowy 65 2.7. PORT SZEREGOWY Mikrokomputery 8051/51 mają port szeregowy (ang. serial port), pozwalający na przesyłanie informacji szeregowej (8-bitowych słów danych) poprzez linie portu P3: RXD (P3.0 - wejście szeregowe) i TXD (P3.1 - wyjście szeregowe). Port może pracować w jednym z czterech trybów (tabl. 2.2). Zamiana postaci danych z równoległej na szeregową i odwrotnie oraz sterowanie wysyłaniem słowa odbywa się automatycznie. Dane odebrane przez port szeregowy są zapisywane do rejestru wejściowego transmisji szeregowej, dane wysyłane - są pobierane z rejestru wyjściowego transmisji szeregowej. Oba te rejestry są umieszczone w przestrzeni adresowej wewnętrznej pamięci danych jako rejestr specjalny SBUF, pod tym samym adresem 99H. Zapisanie danych do SBUF powoduje wpisanie ich do rejestru wyjściowego, natomiast odczytanie z SBUF powoduje odczytanie zawartości rejestru wejściowego. TABLICA '1.1. Tryby pracy portu szeregowego Tryb SMO SM1 Opis " Transmisja szeregowa synchroniczna: znaki 8-bitowe taktowane sygnałem zegarowym, (do dołączenia rejestru przesuwającego) Transmisja szeregowa asynchroniczna: znaki 8-bitowe, szybkość określona programowo Transmisja szeregowa asynchroniczna: znaki 9-bitowe, szybkość 1/32 lub 1/64 częstotliwości zegara . Transmisja szeregowa asynchroniczna: znaki 9-bitowe, szybkość określona programowo Adrf bitu : 5CON SMO SM1 SM2 REN TB8 RB8 TI RI RYS. 2.1& Słowo sterujące SCON 66 Port szeregowy, tryb O Programowe sterowanie transmisją szeregową dokonuje się ; pomocą słowa sterującego SCON (SFR - adres 98H, adresował bitowo), przedstawionego na rys. 2.18. Znaczenie bitów słowa SCO jest następujące: SCON.O (RI) znacznik odebrania znaku; zgłoszenie przerwani; SCON.l (TI) - znacznik wysłania (zakończenia transmisji) znak zgłoszenie przerwania; SCON.2 (RB8) - dziewiąty bit odebranego znaku; SCON.3 (TB8) - dziewiąty bit znaku wysyłanego w trybie 2 i 3; SCON.4 (REN) - uaktywnienie odbiornika transmisji szeregowej; SCON.5 (SM2) - znacznik maskowania odbioru transmisji; SCON.6 (SM1) SCON.7 (SMO) - ustawienie trybu pracy (tabl. 2.2). 2.7.1. TRYB O W trybie O port szeregowy prac jako nadajnik lub odbiornik 8-bitowych słów szeregowych (pierwszy najmniej znaczący). Słowa te są przesyłane po linii P3.0 (RXD) w o strony, a odbierane lub nadawane przez zewnętrzny rejestr przesuwa cy, taktowany sygnałem zegarowym wysyłanym na linię P3.1 (TX Częstotliwość sygnału taktującego wynosi fxTAL/12. Schemat fun] jonalny portu szeregowego w trybie O oraz przebiegi czasowe sygnał w czasie nadawania i odbioru jednego znaku pokazano na rys. 2.1' Wysłanie znaku jest inicjowane przez wykonanie dowolnego n kazu, który wpisuje dane do rejestru SBUF. Zapisanie danych do SB1 uaktywnia blok sterowania nadajnika (rys. 2.19a), który po upłyi jednego cyklu maszynowego wytwarza sygnał wewnętrzny SEND = Powoduje to dołączenie do linii P3.0 (RXD) wyjścia szeregowego (bil Port ueregowy, tryb O 67 P3.0 - RXD Ck0f*icóuk*> P3.l - TXO P3.0 - 1»XO <( RYS. 2.19a. Port szeregowy w trybie 0; schemat blokowy rejestru wyjściowego SBUF. W czasie, gdy SEND = l, w stanie S6P2 każdego cyklu maszynowego zawartość rejestru wyjściowego SBUF jest przesuwana o jedną pozycję w prawo -jest wysyłany kolejny bit. W tym samym czasie na linię P3.1 (TXD)jest wysyłany sygnał taktujący, który ma wartość logiczną O w stanach S3, S4 i S5, a l w stanach S6, S l i S2 każdego cyklu maszynowego (rys. 2.19b). Narastające zbocze tego sygnału powinno spowodować przesunięcie (wpisanie bitu) zawartości odbiorczego rejestru przesuwającego. Po ośmiokrotnym przesunięciu zawartości SBUF (wysłaniu ośmiu bitów) następuje wyzerowanie sygnału SEND i wpisanie jedynki do znacznika TI w słowie SCON, co dla procesora jest sygnałem końca wysyłania znaku. Dzieje się to w stanie S l P l cyklu maszynowego, dziesiątego w kolejności po tym, w którym do SBUF była zapisana informacja. 68 Port neregowy, tryk O b) ftLE z*pił. n do SBUgJ L SEND L- S6P2 l n n -Jl SHIFT n RXD <0an« uy'J x o° x "i xx- y i- TXD C2e9ar'i TI I- S3P1 •- S6PI c> Zapis, n Cuazefo do SC&NJ l uanie RI 5 " ~1 \- REŁEIVE J n n J-l SHIFT n n 00 n Dt r-i D7 ^ -- u,-- TXD CZtsar-5 l S5P2-1] | RYS. 2.19b,c. Port szeregowy w trybie 0; przebiegi czasowe przy nadawaniu i odbieraniu znaku Odczytywanie znaku jest inicjowane programowo przez wyzerowa-nie w słowie SCON znacznika RI, przy REN = l. Powoduje to uaktywnienie bloku sterowania odbiornika (rys. 2.19a), który po upływie jednego cyklu maszynowego wytwarza sygnał wewnętrzna RECEIYE = l. W czasie, gdy RECEIVE == l, w stanie S6P2 każdegc cyklu maszynowego zawartość odbiorczego rejestru przesuwającego jest przesuwana o jedną pozycję w prawo. Na skrajną, lewą pozycję jesi wpisywana wartość z linii P3.0 (RXD), próbkowana w stanie S5P2 tegc cyklu maszynowego, czyli jest przyjmowany następny bit. Ponadto (prz; RECEIVE = l) na linię P3.1 (TXD) jest wysyłany sygnał taktujący, tak sam jak przy wysyłaniu znaków (rys. 2.19c). Narastające zbocze tegc sygnału powinno spowodować przesunięcie zawartości zewnętrznego rejestru przesuwającego, z którego są odbierane dane. Po odebrani) ośmiu bitów, w stanie S1P1 cyklu maszynowego, dziesiątego w kolejno ści po tym, w którym został wyzerowany bit RI, zostaje wyzerowan sygnał RECEIVE, zawartość odbiorczego rejestru przesuwającego jes Port szeregowy, tryby l, 2, 3 69 przepisywana do rejestru wejściowego SBUF, a do znacznika RI w słowie SCON jest wpisywana jedynka. Ustawienie znacznika RI jest dla procesora sygnałem końca operacji odbierania znaku i jego gotowości do odczytania. Ustawienie znacznika TI lub RI jest sygnałem zgłoszenia przerwania z portu szeregowego (patrz punkt 2.8). Przyjęcie tego przerwania (gdy nie jest ono zamaskowane) nie powoduje automatycznego wyzero-wania znaczników, a zatem ich stan może być w programie obsługi odczytany w celu identyfikacji przyczyny przerwania. Znaczniki powinny zostać wyzerowane programowo. 2.7.2. TRYBY l, 2, 3 W trybach l, 2 i 3 (tabl. 2.2) port szeregowy pełni funkcję niezależnego nadajnika (linia P3.1 - TXD) i odbiornika (linia P3.0 - RXD) asynchronicznej transmisji szeregowej. Tryby różnią się między sobą długością (liczbą bitów) przesyłanych słów oraz sposobem określenia szybkości transmisji. Bit 6 bitdu danuch «topu DO ; Dl ; 02 : 03 : D4 ; DS ; 06 : 07 O TB8 t>5 Bit | Bit łtartu 8 bitów danych i stopu DO : Dl ; D2 ; 03 : 04 : OS • 06 : t>7 ; OB O i SBUF RB8 Rys. 2.20. Format znaku: a) w trybie l; b) w trybie 2, 3 Formaty przesyłanych znaków przedstawiono na rys. 2.20. Znak składa się z bitu startu (zawsze 0), ośmiu bitów danych w trybie l albo dziewięciu w trybie 2 i 3 oraz bitu stopu (zawsze l). Pierwszy bit danych jest bitem najmniej znaczącym. Słowo danych (DO...D7) do wysiania jest pobierane z rejestru wyjściowego SBUF. Odebrane słowo danych ruisafaJ (łiq fotzwuz pizpJi^peu 'Ąfemaizp) "aroazntpazJd" IAOITBIS a ^imnzJazJ^ -Ł i ^ 3iq^Jt A (E-N03S) 891 "W psołJTMtz B 'i 3iqXJi A (ndo^s iiq) fauzoigoi T-siu^paf a i^iułnzJazJd op suresidA ZSIUMOJ oi afnpoAOj 'jfiaS rmsatai op aurp oSaofefnsidaz nzi^zoJ oSaulOAOp 3imws[^/A zazjd 'oMoureJSoid sireMoproi isaf n^uz anreis^^ '°TZ'Z 's^-1 Bu oirez^od 'Ł i z ^ Aoq^Ji tip ^a •(odsM 'o33A\o99J9zs niJod XuiBUofo?[unJ ^ui3q3S •oSaofern-cspii rqBu8^s Taz^A o3auBSido 'oSalupsiAodpo psoAinois5z3 9^ zazJd niu9i3tzpod od afcłSMod '(3X^) B^iuJoiqpo T (3x1) Bitiupep^u XoBJd UI^J ^atpei •s3Ji(o 'XAo.re33Z (BU§^S XMps^{A q3^q^Ji qo9ZJi q3ppsAzsA a^ 'N03Z1 91'^o^s M '5n3^[ Sfs^zod ^u i nnrEsidM. od 'B'5[iu.ioiqpo op i 'N03Z1 ai^o{s /A ")n3J. SrsAzod tu i nuresidM od '^•5iiufep^u op Xuozofe(op afeisoz uał (tuS^s 'fe"9Z ł^und ZJłBd) Ł1 ^lUZOlI BIU3TU{3d3ZJd IBU§XS i(UB'(SXZJ05lXAV ;)so'5[qXzs o§90fefBis3J''i[0 'o^aoferni^ł nyeuS^s o^poJZ łsafg i ^ l IUI^qXJl ^Zp5lUI 93IUZOJ BU lU^otfBMĄdM UI31U3UI3p lUl3nJQ \VL"L liiund zJi^d) 388AOJOS300JdO(9IA tlUI3lS/(s TB\p irSIUlSITEJI 3IO-3(OlOJd A ^ireiS^ZJO^M isaf usł mziUEq39i^ •o = 8Q ui^JOt^ M 'n^uz 9nre;iq3po 3iTBMO'5(SBin \s9f u.i^Mo39J9zs spJod M oi '^ 3UAOJ ^i\s isaf N03S alAYop M ipzaf pso^sAzJBd •fią o^f •du 'irsimsutJi ui3(o^oioJd ui^i5MzJd 3iiqoMop z 3iupo3z 'ofhovavi'3oid mvfAo'zi\v\ne3iid i gg^ Bijluzatuz aż tire^zopo -[I^BUZ mu^Jqapo od v 'ggJ, t^luzo^uz op isiresidA i OAOuit.[3oJd euolBisn BUO 3^q azolu nyuz inanrep^A pazJj 'foAoSaJazs irsnusireJł wop^t^n BlirettTzp tip mnołST łsaf alu 8Q n^q OSOIJBM 01 'o SUMOJ ;I\S l89? N03S CT^OIS M ipzaf •N03S azusafaJ A gg^ afo^zod m (ireA^sidA łsaf ^utJqapo uai v 'ggJ, TfoAzod z tiut(s^A op ^uaJaiqod łsaf 3G W Ł I Z q3^q^.it M 'JfiaS o3aAopsfaA nJisafaJ op BUtMAsidA łsaf E 'Z 'l ^S^fl '<«M>8a»2S uoa O/^ •Auozouo^z saf nyuz CTUTU9iqod saoojd ip^irep Aoiiq npSmaizp nnre.iqapo •d '{^\'L"L 's^'1) o333ttT3Ans3ZJd luisapJ o39Aops[3A op Aoiiq qoAuraio'3i 'uresidA i 3iireJq9po aułOJ^opSiAAatzp afndSisini 'AAOJSZ isaf nu^s iiq :UT3Jqapo ^p9 •BnreAl-siazoo ire^s A izpoq39Z;id ^ioioiqpo 'siuaooppK vi l sirereAn isaf (3iireJ9iqpo TOWnpiui) v\ PITBTOIZ oł 'BMOJSZ isaf aro (ni.rełs | nq) QVM\ idrenuz np^J^AA od ^zsAAJald o^f o39UtJqapo niiq OSOITCA pzaf •QX>I iroil nro^AO^OJd lupszJł od oropa.isodz3q afadSistu uisafaJ psou^MBZ oM^Jd A aparonsazJJ •o^aotereAnsazJd nJ^safoJ 339zo.[oiqpo 9Mo3aJ3zs apsCaM wi vuvwspod i niiq o3au^J3iqpo osoi-reA a^f BUtAomKzJd isaf 'qontqoJd q30Ap [ "iiiTUZotuz AuolABłsn ^sar ^'sv\ 'Ap3tA 3?HXł apsm^zoo 01 STS tA^qpo '(QX^) 0'Ed I!1"!1eu n{Bu3As o ^o I | (u^iuiz np^.i^M od 'oAo^zJds aireMofopi isaf n-speuz aiireJ3iqpo •n^uz Biirei^Ł> \ -a TXD Zgl-oi-zenie przeruania Masutrala ueune-trzra 'L J1 -v D a c SI SBUF SO < Loao CRed«*ti~ SHIFT "KJ*=i°"a- L^ ^ ^ .; l ;' do S.BU ' l ' Q i l RKTSKT SHIFT STflRT St.r T XC "• pr Bu? p o>~ouy re,J'-B • rzesuuaJący <9 bŁt"Ou^ :2 r ^ \ La» I^L- -F SMOD"""/ y REN 'l-t-Cl-K T KTflKT D koi^ RB8 ^ SBU (RBJCI. yeJSci. F LOftD tr oi-'a ? Odczy t SBUF <=3.i ^ ^^--RCLK litra a ucune . -. , ^ RXTBKT Port omfowy, tryby l, 2, 3 y; , .; » 0 f . -^ 0 . :'• 'S !: 'L; •3 i, " a i • . Ł s : r-' '3' 1; i m, ^ i 'fe • ' ? ^ s ; * 4 3 ; S- 1 . '5 ^ S n^' ^ ° § l F5^ /- El', d w •-i :- d s •a 3 +- Ł Jj 3 ., ft. a , ^0 a "O >-! ^1; L ^ CA l ; c -] r- f~ >^ -i ^ ^ >s! S' -l 'N JI . C: s CO a 0) 'Ł , ; c: C 0 x -< L J 1= 0 X ^ ? f- >-. r'- J r- ~'™' Q 31 0 ELA L § 3 1^ H c: ^r. : ; 3N •= ^ a-a s g ;.! ^. ; ; | d '; : : : (L ; ; ; ; OJ1 dl | ^ 31 !x!.^ C: x1 •a a 19 •ł l CA Q) -0 ^ *0 r4 0 ^- 0 rt ^ m 0 i; c: c: x ^ 11 C: x ot •; (D ^ 3 0 Q ń 0 Q .2 l f ri [ ^ "*< 5--§ 11 ^ a [= •° a +'*' ti" ***' ? >, ^ s3 3; 1^ « 0 u r- gc , j '• CK) i c: i;'* a i 5a ": •'t "° ~i N n i1 ;i c C: « CL c Q ^ -a fc .2 . A a l '« -J dl/l rt v a. |t01 •- • - SSfco "uo i'; ^'" fiSSxn •XX IM >^ ^ X •BO l- N-U mSitii-i- Kit mil U V 74 Port szeregowy, transmisja 1. RI (SCON.O) = O, 2. SM2 (SCON.5) = O lub SM2 (SCON.5) = l i odebrany bit D8 = l to następuje wpisanie odebranego znaku do rejestru wejściowego SBU1 (bity od O do 7) i znacznika RB8 (bit 8) oraz ustawienie znacznika R które jest sygnałem dla procesora o gotowości do odczytania danyc w SBUF. Jeżeli jeden z powyższych warunków nie jest spełniony, t odebrany znak jest ignorowany. Podobnie jak w trybie O, ustawienie znacznika TI lub RI je) sygnałem zgłoszenia przerwania z portu szeregowego (patrz punkt 2.8 2.7.3. SZYBKOŚĆ TRANSMISJI W trybie O szybkość transmisji je; stała i wynosi zawsze fxTAL/12 natomiast w trybie 2 szybkość transmis może być określona programowo, za pomocą bitu SMOD (PCON.^ i wynosi: fxTAL/64, gdy jest SMOD = 0,lubfxTAL/32,gdyjestSMOD = W trybach l i 3 szybkość transmisji może być ustalona programów w bardzo szerokim zakresie. Jest ona bowiem określona przez często liwość sygnału przepełnienia licznika T l - fori (lub licznika T2 - foTz, a tylko w 8052/32) wykorzystanego do taktowania portu szeregowego Jeżeli do taktowania portu szeregowego jest wykorzystany liczni T l, to szybkość transmisji jest równa: foTi/32, gdy SMOD = O, foTi/16, gdy SMOD = l. Częstotliwość sygnału przepełnienia licznika T l -fon - zależy od funk( i trybu licznika (patrz punkt 2.6.1). Na przykład, jeżeli pracuje c w trybie 2 (8-bitowy licznik TLI z automatycznym ładowaniem wartoś początkowej z TH1), to fon = fri/(256-THl) gdzie fri oznacza częstotliwość impulsów zliczanych przez licznik. Je; pracuje on jako czasomierz, to oczywiście fn == fxTAL/12. Port szeregowy, transmisja 75 Przy pracy w takim trybie licznik nie wymaga żadnej ingerencji programowej, poza jednorazowym wpisaniem wartości początkowej do TH1, ustawieniem trybu i uruchomieniem zliczania. W tablicy 2.3 zestawiono wartości liczbowe, konieczne do uzyskania najczęściej używanych szybkości transmisji, a także inne, charakteryzujące wykorzystanie licznika T l. TABLICA 13. Szybkości transmisji przy wykorzystaniu do taktowania portu szeregowego licznika-czasomierza Tl Szybkość transmisji w trybach fxTAL MHz l SMOD (PCON.7) fri i kHz Tl C/T Tryb Wartość początkowa l i 3 [body] (hex) 62500 (max) 12,0 1 1000 0 2 FF 122 (min) 12,0 0 1000 0 2 00 19200 11,059 1 921,6 0 2 FD 9600 11,059 0 921,6 0 2 FD 4800 11,059 0 921,6 0 2 FA 2400 11,059 0 921,6 0 2 F4 1200 11,059 0 921,6 0 2 E8 600 11,059 0 921,6 0 2 DO 110 6,0 0 500 0 2 72 110 12,0 0 120 (zewn.) 1 2 DE 110 12,0 0 1000 0 1 FEE3 76 Port szeregowy, komunikacja Jeżeli do taktowania portu szeregowego jest wykorzystany licznik T2 (tylko w 8052/32), pracujący jako czasomierz (patrz punkt 2.6.2), to szybkość transmisji jest równa: __ fxTAL BD= 2 x 16 x (65536 - RLD) gdzie RLD oznacza wartość początkową, wpisaną do rejestru RLDH.RLDL. Przy IKTAL = 12 MHz jest możliwe uzyskanie szybkości transmisji w granicach od 5,72 do 375000 bodów. 2.7.4. KOMUNIKACJA W SYSTEMIE WIELOPROCESOROWYM Jak już wspomniano, jeśli w słowk SCON jest SM2 równe l, to port szeregowy pracujący w trybie 2 lub 3 ignoruje (nie ustawia znacznika RI i nie wpisuje znaku do SBUF^ odebrane znaki, w których bit D8 = 0. Przyjmowane są tylko te znaki, w których D8 = l. Mechanizm ten można wykorzystać do zrealizowania prostego protokołu komunikacji w systemie wieloprocesorowyffl (rys. 2.22) między procesorem głównym (ang. master) a procesoram podrzędnymi (ang. ślące). RYS. U.1. Komunikacja w systemie wieloprocesorowym Wszystkie procesory podrzędne mają ustawiony bit SM2 = J Kiedy procesor główny chce przesłać blok danych do procesoi! podrzędnego, to najpierw wysyła jego adres. W słowie adresowył D8 = l, a w słowach danych - D8 = 0. Słowo adresowe jest przyjęt przez wszystkie procesory podrzędne, a zaadresowany procesor ustawi bit SM2 = 0. Wysyłane teraz dane przyjmuje tylko ten procesor, dl • System przerwań którego są one przeznaczone. Po odebraniu bloku danych (o s długości lub zakończonego znakiem końca) procesor z powrc ustawia znacznik SM2 = l- Przesłanie danych z procesora podrzędl do procesora głównego następuje tylko na żądanie tego drugiego 2.8. ^ SYSTEM PRZERWAŃ i 2.8.1. l ORGANIZACJA SYSTEMU System przerwań (ang. interrup tem) mikrokomputerów 8051/52 może przyjmować zgłoszenia nas l jących przerwań: zewnętrznych, tzn: - z wejścia INTO (IEO - TCON.l) [ - z wejścia INT1 (IE1 - TCON.3) S układu czasowo-licznikowego: - przepełnienie licznika TO (TFO - TCON.5) - przepełnienie licznika Tl (TF1 - TCON.7) l - tylko w 8052/32 - przepełnienie licznika T2 (TF2 - T2CON.' opadające zbocze impulsu na wejściu T2EX (EXF2 - T2CC J z portu szeregowego: - koniec nadawania znaku (TI - SCON.l) lub koniec odbie: znaku (RI - SCON.O). Z każdą przyczyną przerwania jest związany wyżej wymier znacznik. Wpisanie jedynki do odpowiedniego znacznika jest zgł niem przerwania. Wyzerowanie znacznika powoduje skasowanie szenia. Odbywa się to automatycznie - odpowiednio przy wystąp przyczyny przerwania i przy jego przyjęciu (jedynie znaczniki T i oraz TF2 i EXF2 nie są zerowane automatycznie). Wszystkie wymii ne znaczniki mogą być też ustawiane i zerowane programowo. Sk jest taki sam, tzn. zgłoszenie lub skasowanie zgłoszenia przerwań 78 System przerwań Sposób zgłaszania (przyczyny) przerwań wewnętrznych opisano przy omawianiu odpowiednich bloków funkcjonalnych; zgłaszanie przerwań zewnętrznych omówiono w punkcie 2.8.3. , System przerwań może być włączany i wyłączany oraz każde zgłoszenie przerwania może być indywidualnie zamaskowane przez ustawienie odpowiedniego bitu w słowie sterującym IE (SFR - adres OA8H, adresowany bitowo), pokazanym na rys. 2.23a. Wyzerowanie bitu w IE oznacza zablokowanie, wpisanie jedynki - odblokowanie odpowiadającego temu bitowi zgłoszenia przerwania (rys. 2.23c). Po zainicjowaniu mikrokomputera (RESET) słowo sterujące IE jest wyzerowane, tzn. system przerwań jest wyłączony, a wszystkie przerwania - zamaskowane. Adr«« bitu <^«K>: OD AC a8 AA A9 AS IE Adr*ł SFR 0: A8 | EA iiri5B'; b} ftdl-.t bitu ->- l A6 - Ail • l - x*pi«uua CSO n>ł> nr . XT OL l XT OLZ RST PSEM Ct-21 V> «------ >2.S V •lx -L =" ?J RYS. 127. Funkcje sygnałów przy programowaniu i weryfikacji pamięci EPROM MERYTlKńCJa )- ( 2.3 < / s ^- / D.n« do \ / Da rw ^^ , ,,,-,- \ rpf-oara mouania ^ •^ odci ytanc/ Progratnouanr P' / \ POĆ} u u /"""'" " ENOBLE> \^ / RYS. 2J8. Przebiegi czasowe sygnałów przy programowaniu i weryfikacji pamięci EPROM Poniżej podano procedurę programowania i weryfikacji dla układu 8751 (rys. 2.28). 1. Warunki początkowe^ Ucc =+ 5 V; dołączony rezonator; RST > 2,5 V; ALE = EA = P2.7 = l (poziom wysoki TTL); P2.4...P2.6, PSEN dołączone do masy; PO, Pl, P2.0...P2.3 dowolne. 2. Podanie adresu komórki pamięci na porty P l (8 mniej znaczących bitów) i P2.0...P2.3 (4 bardziej znaczące bity); podanie danych do zapisania pod podany adres na port PO. 3. Włączenie napięcia zasilania dla programowania EA = +21 V. Pamięć EPROM 89 4. Podanie impulsu programującego ALE = O (poziom niski TTL) przez 50 ms. 5. Wyłączenie napięcia zasilania dla programowania - powrót EA do poziomu wysokiego TTL; zakończenie podawania danych na port PO - koniec programowania jednego bąjtu; napięcie zasilające powinno być włączone co najmniej 10/is przed rozpoczęciem, a wyłączone - nie wcześniej niż 10 fis po zakończeniu impulsu programującego. 6. Podanie impulsu odczytującego P2-7 = O (poziom niski TTL) - rozpoczęcie weryfikacji zapisanego bajtu; do portu PO zostaje wysłana zawartość komórki pamięci o podawanym adresie. 7. Odczytanie danych z portu PO i sprawdzenie poprawności zaprogramowania; dane są obecne na PO, gdy P2.7 = 0. 8. Podanie z powrotem P2.7 = l - koniec weryfikacji jednego bajtu; w celu zapisania danych pod kolejny adres, należy powtórzyć procedurę od punktu 2. Przy zapisywaniu pamięci EPROM można stosować powyższą procedurę programowania i natychmiastowej weryfikacji kolejnych bajtów. Można też najpierw zaprogramować całą pamięć (punkty 2, 3, 4, 5), a następnie dokonać weryfikacji. Dokładne zależności czasowe między sygnałami w czasie programowania i weryfikacji podano w punkcie l .2.2. Ni* doliczeń. • Ni* doYłlclon* • Pl "CC P2.0- .," -P2.3 p0 P2.4 P2. S OLE P2.6 P2.7 Ea XTftLl. XTBL2 RST l T "1"TTL--*----- •--•o 3-, T T "ss K«& L29. Funkqe sygnałów przy programowaniu bitu zabezpieczającego W układzie 8751 jest możliwe zabezpieczenie zawartości pamięci EPROM przed odczytaniem. Dokonuje się tego przez zaprogramowanie bitu zabezpieczającego (ang. 'security bit). Weryfikacja zawartości 90 Pamięć EPROM pamięci jest w takim przypadku niemożliwa - jako zawartość ka komórki pamięci zostaną odczytane same jedynki. Warunki poć kowe dla zaprogramowania bitu zabezpieczającego są takie, jak ] programowaniu zawartości pamięci, zjedna tylko różnicą (rys. 2.29 teraz P2.6 = l (stan wysoki TTL). Sposób programowania jest anal czny, jak poprzednio: podanie impulsu ALE = O (50 ms) ] EA = + 21 V (nie jest oczywiście potrzebne podawanie adresu i dań) Skasowanie raz ustawionego bitu zabezpieczającego jest możliwe t; z jednoczesnym skasowaniem całej zawartości pamięci. Zaleca się kasowanie (ang. erasing) zawartości pamięci EPR< przez naświetlanie układu promieniami ultrafioletowymi o długości 2537 A. Minimalna dawka promieniowania (intensywność x czas) trzebna do wykasowania pamięci wynosi 15 Ws/cm2. Praktyc dokonuje się tego przez naświetlanie pamięci przez 10-15 minut typ lampą kwarcową o intensywności świecenia 12 mW/cm2, z odleg) 3-4 cm. Po wykasowaniu wszystkie bity pamięci programu ukla 8751 są jedynkami. Kasowanie zawartości pamięci EPROM następuje na sk wystawienia jej na działanie promieni świetlnych o długości mniejszej niż 4000 A. Przy przechowywaniu (lub pracy) w pomieszcz oświetlonym światłem dziennym i jarzeniowym zawartość par typowego układu może ulec skasowaniu po około 3 latach, natoii przy bezpośrednim oświetlaniu promieniami słonecznymi - nawę tygodniu. W przypadku, kiedy układ jest narażony na działanie świ należy - w celu zabezpieczenia zawartości pamięci przed skasowa - zakleić kwarcowe okienko w układzie. 3. ROZBUDOWA SYSTEMU Systemy z mikrokomputerami ro- | dziny MCS-51 mogą być rozbudowywane przez dodanie zewnętrznych j układów pamięci programu do łącznej pojemności 64K. słów oraz dodanie zewnętrznej pamięci danych o maksymalnej pojemności również 64K. słów. Rozbudowa układów wejścia-wyjściajest możliwa tylko w ramach przestrzeni adresowej zewnętrznej pamięci danych. i Do rozbudowy pamięci systemu mogą być użyte dowolne uniwer-1 salne układy pamięci lub specjalizowane układy peryferyjne z rodziny j MCS-80/85, przystosowane do współpracy z multipleksowaną magist-I raią, tzn. układ 8355 (8755), zawierający 2K słów ROM (EPROM) l i dodatkowo dwa 8-bitowe porty we-wy, oraz układ 8155, zawierający 256 słów RAM, dwa 8-bitowe, jeden 6-bitowy port wejścia-wyjścia i układ czasowy. Do rozbudowy we-wy można wykorzystać dowolne F układy wejścia-wyjścia, np. z rodziny MCS-80 (z serii 82xx). Należy jednak pamiętać, że rozbudowa systemu - a zwłaszcza dołączanie zewnętrznej pamięci programu - odbywa się kosztem zmniejszenia linii wejścia-wyjścia (nie mogą być użyte porty PO i P2) oraz straty części zalet jednoukładowości mikrokomputera (np. pojawia się konieczność prowadzenia połączeń typu magistralowego na płytce drukowanej). Jako alternatywę rozbudowy systemu należy rozważyć zastosowanie dwóch mikrokomputerów (po odpowiedniej dekompozycji zadań) lub mikrokomputera innego typu. 3.1. ROZBUDOWA PAMIĘCI 3.1.1. KOMUNIKACJA Z PAMIĘCIĄ ZEWNĘTRZNĄ Komunikacja procesora z zewnętrznymi układami pamięci programu i danych odbywa się poprzez port 72 Rozbudów systemu, pamięć PO, który pełni funkcję wejśda-wyjścia dwukierunkowej multiplel sowanej magistrali adres/dane. Do portu PO jest wysyłanych osie mniej znaczących bitów adresu, strobowanych sygnałem ALE. Osie bardziej znaczących bitów adresu jest wysyłanych do portu P2. Przes łanie danych jest sterowane za pomocą sygnałów: PSEN RD(P3.7) WR (P3.6) odczytywanie z zewnętrznej pamięci programu, odczytywanie z zewnętrznej pamięci danych, zapisywanie do zewnętrznej pamięci danych. Odczytywanie z zewnętrznej pamięci programu jest wykonywa przez procesor przy pobieraniu z pamięci programu kodu rożka; argumentu bezpośredniego lub danej, spod adresu większego lub równe 4096 (1000H) w układach 8051 i 8751,8192 (2000H) -w 8052, oraz pi każdym pobraniu z pamięci programu we wszystkich układach rodzi MCS-51, gdy na wejściu EAjest stan niski TTL. Odczytywanie z parni programu jest wykonywane dwukrotnie w każdym cyklu maszynowy RYS. 3.1. Przebiegi czasowe sygnałów w cyklu odczytu zewnętrznej pamięci progra Przebiegi czasowe sygnałów w czasie odczytywania pokazano rys. 3.1. Adres jest wpisywany (z licznika rozkazów) do portów PO i w stanie S5P1 i w stanie S2P1, gdy ALE = l. Jest on utrzymywany na do końca odczytywania, a na PO do zakończenia (opadającego zbw impulsu ALE. Port PO jest ustawiany jako wejściowy (w stan di impedancji), po czym jest wytwarzany sygnał sterujący PSEN. W powiedzi układ pamięci wysyła do portu PO zawartość zaadresowa komórki. Wczytanie danych przez procesor następuje w stanie S i S4P1, chwilę przed narastającym zboczem sygnału PSEN, po a kończy się wysyłanie adresu na P2. \ 54 : SS ; 56 : Sl : 52 ; S3 ; 54 ; SS S3P1 S3PŁ R? ftdr-«« ; QOtOUd l Gdy parni. ł, H*9i«ti"ala «dr«sa :___ ' ftO - BIS ___, , H*9i«t)"ala «dr«soi 5532__/ no - BIS -••{ P3.0--P3.5 PSEN RD as RYS. 33. Rozdzielcie magistral w systemie MCS-51 i danych 6116 Rozbudowa systemu, pamięć >^^ BI 00 ^-iflUłMN^ »> Łfcr N-^O N *fl IP V M CS-t 0 'S ^ -^ ^ \4 §-i(MMTl/HON OC>OQQOQ 0 duJkJ o--< tf u? xuokł J B s oj t CA 0 -Ki d) 3 r- co ^ \o in M N -< f ^ ^ S^ ^^ N \01fi V M (M -l 0 f '0 >h.lolu a a a a - (0 (Dr^y)J'TMN^ O^-' [ m ., S .J Ul ^; 0 " K^ a OjNNNMNPIC^ 0000 0000 "< -t -< N N ^^ /-i/'. 1|IS^ /-.^ ^|o^^ •-i-Q Q Z Z X X i-ilni-a 0 0 ^ 0 0 00 00 (0 01 CO 0 CL N > ~ 19 XTC XTf RST Pl Pl l l l l l l 3 3 3 3 3 3 3 3 łLl ?L2 /VPD I SOS l S 87S1 3 80S2 2 l 0 7 S e FsE AL P2 P2 P2 P2 P2 P2 P2 P2 PO PO PO PO PO PO PO PO •? Sf! ^ 18 C i4 -Ih--J ;1==^ 3 i -7- 7 6 S 4 3 2 l 0 ^ 3 -^j----?- =? 2 •5 -----5- -CI^ OE •STB '^==^ r^ dj: 10 -^----------^ 8 9 J. -Ct- lq 33. ^ +c V Nr blok U i9f 6116 J ' ,2 0 l aio ft9 AS ft7 ft6 fi5 A4 B3 A2 ni ao 07 D6 OS 04 03 02 Ol 00 XT XT RS Pl Pl Pl BL1 SL2 PS{ T/VPD ft l 80SŁ PJ 5 87S1 P2 3 8052 PJ 2 P2 l P2 0 P2 7<.SS.'> PO 6CMR> PO S(T1> PO 4(7.05 PO 3CIŃT1? PO 2(INT05 PO l(TXDł PO OCRXD> PO Ffl OT LE 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 -ł--------l iq 'i-- t.----• 4 16 06 -l|---------- 2 •i =1 ^--- ,-------2- 11 01 -'g-------;-- 4 Pl Pl Pl Pl Pl P3 P3 P3 P3 P3 P3 P3 P3 4l ^ 10 00 -"-----T----• .STB ftdr" J r" - 8 i 17 3 :| YS. zeł drę l----- tt pt ai l ^------ l------ -l ' 100 Rozbudowa systemu, pamięć komunikacji z pamięcią. Należy najpierw wysłać numer bloku do bitów 0-2 portu P2, a dopiero później przesiać dane np. rozkazem MOVX A,@R1. --L -0-t? ^ XT AL Ł ES 19 XTC|L2 P5EW 30 -h-^ RST/VPO ~ •- pi: ^i P2 7 P2 Ł S ( pi S 87S1 P2 S pi pi 3 S°M P2 P2 4 3 pi 2 P2 2 pi l 0 P2 P2 l 0 '21 s,cc 7 pi P3 P3 7CgE? 6CMR:) PO PO 7 6 ł? '- - •'- ftD7 006 PftO -P--- ,ę r-ś: P3 SCT15 PO Ę 4 7 ftDS PA2 -55--- P3 4 3ClNTT> PO PO 4 Ę ft04 Pft4 P3 2. S2SS ^=> ^> ^> ftLE RD UR PO Ra fli ao PA P8 RD' MR p; 00-7 \" P2. l P2.0 hl HO PM -^ PB c=> S5 RD UR PO ^ "R PC DO-7 ^> RYS. 3.9. Dwa sposoby dołączenia układu 8255 do 8051 Rozbudowa systemu, przerwania 3.3. ROZBUDOWA SYSTEMU PRZERWAŃ ___ Mikrokomputery 8051/52 mają tylko dwa wejścia przerywające INTO i INT1. Dołączenie większej liczby sygnałów przerwań zewnętrznych wymaga zastosowania zewnętrznego układu zbierającego te przerwania. Przykład takiego układu, umożliwiającego dołączenie czterech sygnałów zgłoszeń przerwań do wejścia INTO, pokazano na rys. 3.10. Przerwania są zgłaszane narastającym zboczem sygnału. Zgłoszenie powoduje wyzerowanie odpowiedniego przerzutnika D i w konsekwencji wymuszenie stanu niskiego na wejściu przerywającym INTO. Dla tego wejścia powinno być zaprogramowane zgłoszenie przerwania poziomem (ITO = 0). RYS. 3.10. Rozbudowa systemu przerwań Układ wymaga programowego określenia przyczyny zgłoszonego przerwania (przez odczytanie stanu bitów 0-3 portu Pl) oraz programowego ustalenia priorytetu obsługi przerwań przy ich jednoczesnym zgłoszeniu (wyzerowany więcej niż jeden przerzutnik). W pro- Rozbudowa systemu, przerwania 103 gramie obsługi przerwania powinno być również zawarte skasowanie jego zgłoszenia. Dokonuje się tego przez chwilowe wysłanie zera na odpowiedni z bitów 4-7 portu P l (w stanie normalnym na tych bitach powinny być jedynki). Powoduje to ustawienie przerzutnika zgłoszenia, czyli skasowanie zgłoszenia przerwania. W sposób przedstawiony na rys. 3.10 można oczywiście dołączyć mniejszą lub większą liczbę sygnałów przerywających. W tym drugim przypadku, w celu zmniejszenia liczby potrzebnych do identyfikacji i kasowania zgłoszenia bitów portu, można zastosować koder priorytetowy do generowania numeru zgłoszonego przerwania, a także dekoder do kasowania zgłoszeń. 4. LISTA ROZKAZÓW Lista rozkazów mikrokomputerów rodziny MCS-51 zawiera 111 rozkazów: 49 jedno-, 45 dwu- i 17 trzybaj-towych, wykonywanych w ciągu jednego, dwóch lub czterech (tylko mnożenie i dzielenie) cykli maszynowych. Można wyróżnić kilka grup rozkazów. Rozkazy przesłań umożliwiają: przesyłanie danych przede wszystkim między komórkami wewnętrznej pamięci danych (zarówno jej części użytkowej, jak i obszaru SFR), wpisywanie stałych do wewnętrznej pamięci danych oraz przesyłanie danych między akumulatorem a pamięcią programu i zewnętrzną pamięcią danych. Grupa rozkazów arytmetyczno-logicznych obejmuje rozkazy dotyczące operacji arytmetycznych (dodawania, odejmowania, mnożenia, dzielenia, przesunięć), pozwalające na łatwe wykonywanie złożonych obliczeń na liczbach dwójkowych dodatnich (bez znaku), a także prostszych obliczeń na liczbach dwójkowych ze znakiem (w kodzie U2) i liczbach dziesiętnych (w kodzie BCD). Do grupy tej należą też rozkazy umożliwiające wykonywanie operacji logicznych, przy czym część z nich (OR, AND, EXOR) bezpośrednio dotyczy zawartości pamięci danych. Wśród rozkazów skoków są rozkazy pozwalające na wykonywanie skoków bezwarunkowych i skoków do podprogramu oraz skoków warunkowych (tabl. 4.1). Te ostatnie umożliwiają sprawdzanie stanu akumulatora, znacznika przeniesienia, dowolnego bitu z obszaru pamięci adresowanego bitowo, jak również porównywanie zawartości akumulatora, rejestrów roboczych czy komórek pamięci. Rozkazy działające na bitach umożliwiają przesyłanie i wykonywanie operacji logicznych (AND, OR, NOT) na pojedynczych bitach z adresowanego bitowo obszaru wewnętrznej pamięci danych. Funkcję akumulatora dla operacji logicznych na bitach spełnia znacznik przeniesienia CY. Tryby adresów- TABLICA 4.1. Rozkazy skoków warunkowych Mnemonik Wamnek Układ testowany JZ JNZ ACC=0 ACC^O Akumulator JC JNC CY=1 CY=0 Znacznik przeniesienia JB INB IBC (bit) = l (bit) = 0 (bit) = l Bit adresowany bezpośrednio CJNE ACC^n ACC ^ (ad) Rr^n (Ri) Ą= n Akumulator, argument bezpośredni, pamięć, rejestr roboczy (porównanie) ! Nie wyróżnia się tutaj typowej dla mikroprocesorów grupy rozkazów wejścia-wyjścia oraz rozkazów sterujących. Porty wejścia-wyjścia i wszystkie słowa sterujęce blokami mikrokomputera są umieszczone jako rejestry specjalne w przestrzeni adresowej wewnętrznej pamięci i danych. W związku z tym, wszystkie rozkazy z wyżej wymienionych Pgrup, dotyczące zawartości portów wejścia-wyjścia czy też słów sterują-|cych, są - odpowiednio - rozkazami wejścia-wyjścia i rozkazami | sterującymi. l W punkcie 1.2.3. zestawiono wszystkie rozkazy, pogrupowane l funkcjonalnie i w kolejności numerycznej kodów. W dalszej części l niniejszego rozdziału opisano możliwe tryby adresowania oraz wszyst-| kie rozkazy zestawione w kolejności alfabetycznej mnemoników. 4.1. TRYBY ADRESOWANIA Tryby adresowania argumentów rozkazów przesłań i rozkazów arytmetyczno-logicznych zależą od miejsca ich umieszczenia (w pamięci programu, wewnętrznej lub zewnętrznej pamięci danych). 106 Tryby adresowania W pamięci programu jest możliwe adresowanie: - natychmiastowe (argument bezpośredni), - pośrednie, sumą zawartości akumulatora i 16-bitowego rejestru bazowego (tylko w rozkazach przesłań MOVC). W adresowaniu pośrednim do 16-bitowego adresu bazowego jest dodawana 8-bitowa zawartość akumulatora, traktowana jako liczba dwójkowa bez znaku (z zakresu 0-255). Rejestrem bazowym może być wskaźnik danych DPTR lub licznik rozkazów PC. Jeżeli jest nim licznik rozkazów, to adresem bazowym jest adres pierwszego bajtu rozkazu umieszczonego w pamięci jako następny po MOVC A, @A + PC. ftdP«» '255 CFF .128 C8 ouanr trub J CtMikc •dre»ouani.a s u 8052/32> Adret 255 C FFr0" 224 łdresoi-janie b»zpo4redni» OH5 12 4 i P»mi<ć ułwtkow CtMiko u 80S2/I2S ^SFR PDtr«dnl« zauTtoici^ -< rłJwtrdu RO i R l Adr»» r^- DPH DPTR DPL | Ob* ^ •dr bit Ctt rej rób ^ ZT •«ou«ny ouo •ry zbiory »s'tróu 8 <30H5 32 C20H> 31 C1FH? 24 C18H5 23 <17H3 16 <10H? 15 0 (OOH1 ------^y-------------------- : RS1 RSO^ll RO zauT-toici^ ^ r»j»»tr'Au RO i Rl •bezpośredni R? RS1 RSOslO ----^-------------- : RS1 RSO=01 RO do«-t«pr)y J«d»n RS1. RSO ---ST---------- RS1 RSOssOO KTO. 4.1. Tryby adresowania wewnętrznej pamięci danych Na rysunku 4.1. pokazano podział wewnętrznej pamięci danyc na obszary dostępne w różnych trybach adresowania. Rozróżni się trzy tryby. Tryby adresowania 107 l Adresowanie przez nazwę rejestru dotyczy: | - rejestrów roboczych RO... R7 ze wskazanego przez wskaźnik RS zbioru: RS1 RSO = 00 - zbiór O, adresy O...7; RS1 RSO = 01 - zbiór l, adresy 8...15; RS1 RSO = 10 - zbiór 2, adresy 16...23; RS1 RSO = 11 - zbiór 3, adresy 24... 31; akumulatora A - rejestr specjalny ACC, adres 224; - wskaźnika danych DPTR (16-bitowy) - rejestry specjalne DPH i DPL, adresy 131 i 130. adresowanie bezpośrednie (8-bitowy adres w treści rozkazu) obejmuje: pamięć użytkową RAM, tzn. adresy O... 127; obszar rejestrów specjalnych, tzn. adresy 128...255; jest to jedyny sposób adresowania rejestrów z obszaru SFR. [Adresowanie pośrednie zawartością rejestru. Adres jest zawarty we i wskaźniku danych RO lub R l z ustawionego zbioru rejestrów. Adreso-l wanie to dotyczy obszaru pamięci użytkowej RAM: i- w układzie 8051: adresy O... 127; - w układzie 8052: adresy O...256; obszar o adresach 128...255 jest nakładkowany - jest tu umieszczona pamięć użytkowa, dostępna L przez adresowanie pośrednie, oraz rejestry specjalne, dostępne przez adresowanie bezpośrednie. \ Adresowanie bezpośrednie bitów (8-bitowy adres w treści rozkazu) obejmuje obszar pamięci użytkowej ROM o adresach 32...47 i część rejestrów specjalnych. Mapę adresów bitów pokazano na rys. 4.2. Zewnętrzna pamięć danych jest adresowana tylko pośrednio, zawartością rejestru (w rozkazach MOVX). Jako rejestr adresowy j jest używany: - wskaźnik danych DPTR; adres jest wtedy 16-bitowy, co pozwala na zaadresowanie do 64K słów zewnętrznej pamięci danych; adres jest wysyłany przez porty PO i P2, co praktycznie uniemożliwia wykorzystanie portu P2 jako wejścia-wyjścia; J Tryby adresowania 10' - rejestr roboczy RO lub Rl; adres jest wtedy 8-bitowy, co pozwala m zaadresowanie tylko do 256 stów zewnętrznej pamięci danych; adres jest wysyłany przez port PO; port P2 może być wykorzystany jakc wejście-wyjście (jeżeli nie ma zewnętrznej pamięci programu); dołą czenie pamięci o większej pojemności jest w tym przypadku możliw< dzięki technice przełączania bloków (patrz punkt 3.1.2). Adresowanie za pomocą DPTR i za pomocą RO lub R l wykorzys tuje się zwykle rozłącznie, pierwsze w systemach z zewnętrzną pamięcic programu i dużą zewnętrzną pamięcią danych, drugie - w systemact z małą pamięcią danych i bez zewnętrznej pamięci programu (zwłaszcz; tam, gdzie port P2 spełnia funkcję wejścia-wyjścia). Jest też możliwi używanie rejestrów RO lub Rl, zamiennie z DPTR, do adresowani; dużej zewnętrznej pamięci danych (również w systemach z zewnętrzni pamięcią programu). W takim przypadku konieczne jest wcześniejszt wpisanie do portu P2 bardziej znaczącego bajtu adresu. Robi się to ze pomocą odpowiedniego rozkazu wejścia-wyjścia. W rozkazach skoków możliwe jest adresowanie: h - bezpośrednie, z adresem 16-bitowym; '- bezpośrednie, z adresem 11-bitowym; względne, względem PC; pośrednie, sumą zawartości akumulatora i rejestru DPTR. Bezpośredni adres 16-bitowy występuje w rozkazach skoku bez warunkowego LJMP i skoku do podprogramu LCALL. Rozkazy t< umożliwiają skoki w obrębie całej pamięci programu. Rozkazy AJMP i ACALL mają 11-bitowy adres bezpośredni wpisywany do bitów 0-10 licznika rozkazów. Dzięki tym rozkazorr mogą być wykonywane skoki w obrębie jednej, bieżącej strony pamięć programu (o pojemności 2K.), tzn. tej, na której jest umieszczona pierwszy bajt rozkazu następującego po rozkazie skoku. Adres względny, podany w treści rozkazu jako 8-bitowy argument bezpośredni (przesunięcie), występuje w rozkazie SJMP i wszystkicr rozkazach skoków warunkowych. Przesunięcie jest traktowane jakc liczba ze znakiem w kodzie U2. Jest ono dodawane do licznika rozkazów (po pobraniu rozkazu), a zatem jest możliwy skok w obszarze pamięć o adresach od a - 128 do a + 127, gdzie a jest adresem pierwszego bajti; rozkazu następującego po rozkazie skoku. l l Opb rozkazów 111 "Zawartość licznika rozkazów zwiększona o 2 przy pobraniu rozkazu jest ^ładowana na stos (pierwszy bajt mniej znaczący); zawartość wskaźnika (stosu jest zwiększana o 2, a do bitów 0-10 licznika rozkazów jest (wpisywany 11-bitowy adres bezpośredni. Pięć bardziej znaczących [bitów licznika rozkazów nie zmienia się. Skok do podprogramu l wykonuje się pod adres na tej stronie (o pojemności 2K), na której jest j umieszczony pierwszy bajt rozkazu następnego po ACALL. ADD A, (ang. add to accumulator) dodaj do akumulatora Do zawartości akumulatora jest dodawany wskazany argument, a wynik jest wpisywany do akumulatora. Zgodnie z wynikiem operacji są ustawiane znaczniki: CY, AC i OV. Są możliwe cztery tryby adresowania argumentu . ADD A,Rr Operacja: A <- A + Rr gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) Kod: |0 O l Ol l n n roi 28H-2FH Liczba cykli: l ADD A, @Ri Operacja: A <- A + (Ri) gdzie Ri == RO, Rl (z ustawionego w danej chwili zbioru) Kod: |0 O l 010 l l i| 26H, 27H Liczba cykli: l ADD A,ad Operacja: A «- A + (ad) 0010 0101 a? ... ao Liczba cykli: l 24H 112 ADDA, * n Operacja: A <- A + n Kod: |0 O l 0010 0100 <- n -» Liczba cykli: l ADDC A, (ang. a. ADDC A, Rr Operacja: A <- A + Rr + CY gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) Kod: |0 O l l | l n n ro| Liczba cykli: l 38H-3FH ADDC A, @Ri Operacja: A *- A + (Ri) + CY gdzie Ri = RO, Rl (z ustawionego w danej chwili zbioru) Kod: 10 O l l l O l l i 36H, 37H Liczba cykli: l 35H ADDC A, ad Operacja: A <- A + (ad) + CY 0011 0 l 0 l a? ao Kod: Liczba cykli: l ADDCA, +n Operacja: A *- A + n + CY 0011 0100 <- n -» Kod: Liczba cykli: l AJMP adrl! (ang. unconditional jump on page) skocz bezwarunkowo na strome j Operacja: PCio-o Kod: aio a9 as 0 000 l a? ... ao 01H, 21H, 41H, 61H 81H, A1H, C1H, E1H Liczba cykli: 2 Do bitów 0-10 licznika rozkazów (po zwiększeniu jego zawartości o 2 przy pobraniu rozkazu) jest wpisywany 11-bitowy adres bezpośredni. Pięć bardziej znaczących bitów licznika rozkazów nie zmienia się. Skok wykonuje się pod adres na tej stronie (o pojemności 2K), na której jest umieszczony pierwszy bajt rozkazu następującego po AJMP. ANL , (ang. logical AND) pomnóż logicznie Wykonywany jest iloczyn logiczny (bit po bicie) wskazanych argumentów. Wynik jest wpisywany do miejsca, z którego został pobrany argument . Jest możliwych sześć kombinacji trybów adresowania argumentów i . ANL A, Rr Operacja: A <- A A Rr gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) Kod: 10 l O l l l n n roi Liczba cykli: l 114 0^* rozkazów ANL A, @Ri Operacja: A «- A A (Ri) gdzie Ri = RO, R l (z ustawionego w danej chwili zbioru) 56H, 57H Kod: 10 l O li O l l i Liczba cykli: l ANL A, ad Operacja: A Kod: 55H A A (ad) 0101 0101 a? ... ao Liczba cykli: l 54H ANL A, *n Operacja: A <- A Ań Kod: 0101 0100 *- n -» Liczba cykli: l 52H ANL ad, A Operacja: (ad) <- (ad) AA 0101 0010 a? ... ao Kod: Liczba cykli: l ANL ad, +n Operacja: (ad) Kod: 53H (ad) Ań 0101 0 0 l l a? ao <- n -> Liczba cykli: 2 Opis rozkazów 115 Uwaga! Jeżeli rozkaz jest użyty do zmiany stanu wyjścia, to jest (odczytywana i modyfikowana zawartość rejestru wyjściowego portu | (a nie stan logiczny z końcówek układu). 'ANL C, bit (ang. logical AND carry with direct bit) l pomnóż logicznie przez bit | Operacja: CY «- CY A (bit) l Kod: |l O O o| O O l o| 82H 1000 0010 b7 ... bo Liczba cykli: 2 Jeżeli wartość logiczna bitu o podanym adresie bezpośrednim jest równa O, to znacznik przeniesienia CY (akumulator procesora boolowskiego) jest zerowany, w przeciwnym wypadku zawartość CY nie zmienia się (jest ona mnożona logicznie przez zawartość zaadresowanego bitu). ANL C,/bit (ang. logical AND carry with complement of direct bit) pomnóż logicznie przez negację zawartości bitu Operacja: CY *- CY A (bit) Kod: |l O l l| O O O 0| BOH 1011 0000 b7 ... bo Liczba cykli: 2 Jeżeli wartość logiczna bitu o podanym adresie bezpośrednim jest równa l, to znacznik przeniesienia CY (akumulator procesora boolowskiego) jest zerowany, w przeciwnym wypadku zawartość CY nie zmienia się (jest ona mnożona logicznie przez negację zawartości zaadresowanego bitu). CJNE , , d (ang. compare andjump ifnot equat) porównaj argumenty i skocz, gdy nie są równe Porównywane są wskazane argumenty. Jeżeli nie są one równe, to do zawartości licznika rozkazów jest dodawane przesunięcie d (liczba ze 116 Opis rozkazów znakiem w kodzie U2), tzn. jest wykonywany skok względny. Dodav nie jest wykonywane po pobraniu kodu rozkazu skoku, zatem sk następuje względem adresu pierwszego bajtu rozkazu następnego CJNE. Jeżeli wartość agrumentu (jako liczby bez znaku) j mniejsza niż argumentu , to do znacznika CY wpisuje się jedyni w przeciwnym razie znacznik CY jest zerowany. Stan innych zna< ników oraz argumentów nie zmienia się. Są możliwe cztery kombinal trybów adresowania argumentów i . CJNE A, ad, d Operacja: PC <- PC + 3 Jeśli A ^ (ad), to PC <- PC + d f n --' - CY ^[°-Sdy^>n (l - gdy Rr < n B8H-BFH l 0 l l l n n ro <- n -» <- d -» Liczba cykli: 2 CJNE @Ri, *n, d _ Operacja: PC «- PC + 3 Jeśli (Ri) ^ n, to PC <- PC + d gdzie Ri = RO, R l (z ustawionego w danej chwili zbioru) B6H, B7H 1011 0 l l i <- n -» ^- d ^ Liczba cykli: 2 | CLR A (ang. clear accwnulator) wyzeruj akumulator Operacja: A <- O l Kod: |1 l l 0| O l O O Liczba cykli: l Zerowana jest zawartość akumulatora. CLR bit (ang. clear bit) wyzeruj bit 1100 0010 b? ... bo Liczba cykli: l Zerowany jest bit o podanym adresie bezpośrednim. 118 Opis rozkazów CLR C (ang. clear carry flag) wyzeruj znacznik przeniesienia Operacja: CY <- O Kod: li l O O 10 O l li C3H Liczba cykli: l Zerowany jest znacznik przeniesienia CY (akumulator procesora boolowskiego). CPL A (ang. complement accumulator) neguj akumulator Operacja: A <- A Kod: |1 l l l | O l O 0| F4H Liczba cykli: l Negowana jest (bit po bicie) zawartość akumulatora. Tylko przy pomocy tego rozkazu, w sekwencji: CPL A INCA j jest możliwa zmiana znaku liczby w kodzie U2. CPL bit (ang. complement bit) l| neguj bit ; Operacja: (bit) <- (bit) , l 0 l l 0010 b7 bo Liczba cykli: l Negowany jest bit o podanym adresie bezpośrednim. Opis rozkazów 119 (CPL C (ang. complement carry flag) neguj znacznik przeniesienia i Operacja: CY <- CY Kod: li O l l 10 O l li B3H Liczba cykli: l Negowany jest znacznik przeniesienia CY (akumulator procesora boolowskiego). DA A (ang. decimal adjust) wykonaj korekcję dziesiętną Uwaga! Nie wykonuje się korekcja dziesiętna wyniku odejmowania. Operacja: Jeśli Aa-o > 9 lub AC = l, to A +- A + 6 po czym, jeśli AM > 9 lub CY = l, to A <- A + 60H Kod: li l O l 10 l O Ol D4H Liczba cykli: l Wykonywana jest korekcja dziesiętna wyniku dodawania. Operacja ta sprowadza wynik do postaci dwóch cyfr dziesiętnych (kod BCD), jeżeli argumenty były w kodzie BCD. Zgodnie z wynikiem operacji jest ustawiany znacznik CY (wskazuje, że liczba dziesiętna otrzymana w wyniku dodawania jest większa niż 99). Nie zmienia się stan znaczników AC i OV. Korekcja przebiega w następujący sposób: jeżeli zawartość bitów 0-3 akumulatora jest większa niż 9 lub jest ustawiony znacznik AC, to do zawartości akumulatora jest dodawana liczba 6, po czym jeżeli zawartość bitów 4-7 akumulatora jest większa niż 9 lub jest ustawiony znacznik CY, to do tych bitów jest dodawana liczba 6. Jeżeli podczas tej ostatniej operacji wystąpiło przeniesienie, to do znacznika CY jest wpisywana jedynka - w przeciwnym razie stan znacznika nie zmienia się. Rozkaz DA A powinien być użyty wyłącznie w połączeniu z rozkazem dodawania (ADD lub ADDC). Również zliczanie w kodzie BCD powinno być wykonane za pomocą rozkazu dodawania, na przykład: ADDA, *1 DA A Nie należy w takim przypadku używać rozkazu INC, ponieważ jego wykonanie nie powoduje ustawienia znaczników CY i AC. DĘĆ (ang. decrement) zmniejsz o l Od wskazanego argumentu jest odejmowana jedynka. Nie zmienia się stan znaczników. Są możliwe cztery tryby adresowania argumentu. DĘĆ A Operacja: A «- A - l Kod: |0 O O l | O l O 0| 14H Liczba cykli: l Operacja: Rr «- Rr - l gdzie Rr = RO,...,R7 (z ustawionego w danej chwili zbioru) Kod: |0 O O l | l n n ro| 18H-1FH Liczba cykli: l DĘĆ @Ri Operacja: (Ri) *- (Ri) - l gdzie Ri = RO, R l (z ustawionego w danej chwili zbioru) Kod: |0 O O l | O l l i| 16H, 17H Liczba cykli: l DĘĆ ad Operacja: (ad) «- (ad) - l 0001 0101 a? ... ao Liczba cykli: l Uwaga! Jeżeli rozkaz jest użyty do zmiany stanu wyjścia, to jest odczytywana i modyfikowana zawartość rejestru wyjściowego portu (a nie stan logiczny z końcówek układu). DIV AB (ang. divide) dziel Operacja: A *- [A/B] B <- res(A/B) Kod: fl O O O | O l O O | 84H Liczba cykli: 4 Ośmiobitowa liczba bez znaku, zawarta w akumulatorze, jest dzielona przez 8-bitową liczbę bez znaku z rejestru B. Część całkowita ilorazu wpisuje się do akumulatora, a reszta - do rejestru B. Zerowane są znaczniki CY i OV. Uwaga! Jeżeli w rejestrze B jest zero (OOH), to w wyniku wykonania rozkazu zawartość akumulatora i rejestru B jest nieokreślona, a do znacznika OV wpisuje się jedynka. DJNZ , d (ang. decrement andjump ifnot zero) zmniejsz o l i skocz, gdy nie zero Od wskazanego argumentu jest odejmowana jedynka. Jeżeli po tej operacji argument nie jest równy zeru, to do zawartości licznika rozkazów dodaje się przesunięcie d (liczba ze znakiem w kodzie U2), tzn. jest wykonywany skok względny. Dzieje się to po pobraniu kodu rozkazu skoku, a zatem skok następuje względem adresu pierwszego bajtu rozkazu następnego po DJNZ. Nie zmienia się stan znaczników. Argument może być umieszczony w rejestrze roboczym lub komórce wewnętrznej pamięci danych, adresowanej bezpośrednio (też w SFR). 122 Opb rozkul DJNZ Rr, d Operacja: PC <- PC + 2 Rr «- Rr - l gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) Jeśli Rr ^ O, to PC <- PC + d l l 0 l l n n ro *- d -» D8H-DFH DJNZ ad, d Operacja: PC <- PC + 3 (ad) ^ (ad) - l Jeśli (ad) ^ O, to PC l l 0 l 0101 a7 ao <- d -» Liczba cykli: 2 Uwaga! Jeżeli rozkaz jest użyty do zmiany stanu wyjścia, to jest odczytywana i modyfikowana zawartość rejestru wyjściowego portu (a nie stan logiczny z końcówek układu). INC (ang. increment) zwiększ o l Do wskazanego argumentu jest dodawana jedynka. Nie zmienia się stan znaczników. Są możliwe cztery tryby adresowania argumentu. INC A Operacja: A «- A + l Kod: |0 O O 0| O l O Ol 04H Liczba cykli: l Opis rozkazów 1^3 Operacja: Rr - Rr + l gdzie Rr = RO...., R7 (z ustawionego w danej chwili zbioru) Kod: |0 O O 01 l n n roi 08H-OFH Liczba cykli: l Operacja: (Ri) *- (Ri) + l gdzie Ri = RO, Rl (z ustawionego w danej chwili zbioru) 06H, 07H 0000 O l l i Liczba cykli: l INCad Operacja: (ad) Kod: 0000 0101 a? ... ao Liczba cykli: l Uwaga! Jeżeli rozkaz jest użyty do zmiany stanu wyjścia, to jest odczytywana i modyfikowana zawartość rejestru wyjściowego portu (a nie stan logiczny z końcówek układu). INC DPTR (ang. increment data pointer) zwiększ o l wskaźnik danych Operacja: DPTR <- DPTR + l Kod: li O l OlO O l l Liczba cykli: l Do 16-bitowego wskaźnika danych DPTR, złożonego z rejestrów specjalnych DPH (bardziej znaczący bajt) i DPL (mniej znaczący bajt), jest dodawana jedynka. Nie zmienia się stan znaczników. Opis rozkazów JB bit, d (ang. jump if bit is set) skocz, gdy bit ustawiony Operacja: PC i- PC + 3 Jeśli (bit) = l, to PC 0010 0000 B7 Liczba cykli: 2 Jeżeli wartość bitu o podanym adresie bezpośrednim jest jedynką, to do zawartości licznika rozkazów dodaje się przesunięcie d (liczba ze znakiem w kodzie U2), tzn. jest wykonywany skok względny. Dzieje się to po pobraniu kodu rozkazu skoku, a zatem skok następuje względem adresu pierwszego bajtu rozkazu następnego po JB. Testowany bit nie ulega zmianie. JBC bit, d (ang.7i Liczba cykli: 2 Jeżeli nie jest ustawiony znacznik przeniesienia (CY = 0), to do zawartości licznika rozkazów dodaje się przesunięcie d (liczba ze znakiem w kodzie U2), tzn. jest wykonywany skok względny. Dzieje się to po pobraniu kodu rozkazu skoku, a zatem skok następuje względem adresu pierwszego bajtu rozkazu następnego po JNC. JNZ d (smg-jump if accumulator not zero) skocz, jeśli akumulator nie jest zerowy Operacja: PC *- PC + 2 Jeśli A ^ O, to PC <- PC + d 0 l l l 0 0 0 0 <- d -» Liczba cykli: 2 J Jeżeli zawartość akumulatora nie jest zerowa, to do zawartości licznika • rozkazów dodaje się przesunięcie d (liczba ze znakiem w kodzie U2), tzn. | jest wykonywany skok względny. Dzieje się to po pobraniu kodu 1 Opis rozkazów 127 rozkazu skoku, a zatem skok następuje względem adresu pierwszego bajtu rozkazu następnego po JNZ. JZ d (ang-Jump if accumulator zero) skocz, jeśli akumulator jest zerowy PC+d Operacja: PC <- PC + 2 Jeśli A = O, to PC Kod: 60H 0110 0000 <- d -» Liczba cykli: 2 Jeżeli zawartość akumulatora jest zerowa, to do zawartości licznika rozkazów dodaje się przesunięcie d (liczba ze znakiem w kodzie U2), tzn. jest wykonywany skok względny. Dzieje się to po pobraniu kodu rozkazu skoku, a zatem skok następuje względem adresu pierwszego bajtu rozkazu następnego po JZ. LCALL adrió (ang. subroutine cali) skocz do poprogramu Operacja: PC < SP 4 (SP) SP < (SP) PC PC+3 SP+1 - PC7-0 SP+1 - PCl5-8 adrl6 0001 0 0 l 0 ais aa a? ao Liczba cykli: 2 Zawartość licznika rozkazów zwiększona o 3 przy pobraniu rozkazu jest ładowana na stos (pierwszy bajt mniej znaczący), zawartość wskaźnika stosu jest zwiększana o 2, a do licznika rozkazów jest wpisywany 128 Opis rozkaaiw 16-bitowy adres bezpośredni. Rozkaz ten pozwala na skok do podpro-gramu, pod dowolny adres w pamięci programu. LJMP adrl6 (ang. unconditional jump) skocz bezwarunkowo Operacja: PC <- adrl6 02H 0000 0010 ai5 ... as a? ... ao Liczba cykli: 2 Do licznika rozkazów jest wpisywany 16-bitowy adres bezpośredni. Rozkaz ten pozwala na skok pod dowolny adres w całej przestrzeni adresowej pamięci programu. MOV , (ang. move data) prześlij dane Ośmiobitowe dane z miejsca wskazanego przez drugi argument są przesyłane do miejsca wskazanego przez pierwszy argument. Jest możliwych piętnaście kombinacji trybów adresowania danych. MOV A, Rr Operacja: A *- Rr gdzie Rr=RO,..., R7 (z ustawionego w danej chwili zbioru) Kod: 11 l l O | l n n roi E8H-EFH Liczba cykli: l MOV A, @Ri Operacja: A <- (Ri) gdzie Ri = RO, Rl (z ustawionego w danej chwili zbioru) Kod: 11 l l 010 1'm E6H, E7H Liczba cykli: l Opis rozkazów MOV A, ad Operacja: A <- (ad) Kod: l l l 0 0 l 0 l a? ... ao Liczba cykli: l Uwaga! Rozkaz MOV A, ACC jest nielegalny. MOV A, ł n Operacja: A <- n 0111 0100 <- n -> Liczba cykli: l MOV Rr, A Operacja: Rr •<- A gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) F8H-FFH Liczba cykB: l MOV Rr, ad Operacja: Rr <- (ad) gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) l 0 l 0 l r2 n ro a? ... ao A8H-AFH Liczba cykli: 2 MOV Rr, #n Operacja: Rr <- n gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) 130 Opia rozkazów Kod: |0 l l l l l n n ro 78H-7FH Liczba cykli: l MOV @Ri, A Operacja: (Ri) <- A gdzie Ri = RO, R l (z ustawionego w danej chwili zbioru) Kod: 11 l l l l O l l i Liczba cykli: l F6H, F7H MOV @Ri, ad Operacja: (Ri) <- (ad) gdzie Ri = RO, RI (z ustawionego w danej chwili zbioru) l 0 l 0 0 l l i a? ... ao A6H, A7H Liczba cykli: 2 MOV @Ri, łn Operacja: (Ri) <- n gdzie Ri = RO, RI (z ustawionego w danej chwili zbioru) 76H, 77H 0 l l l 0 l l i <- n -» Liczba cykli: l MOV ad, A Operacja: (ad) *- A F5H l l l l 0 l 0 l a? ... ao Liczba cykli: l Opis rozkazów 131 MOV ad, Rr Operacja: (ad) «- Rr gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) 88H-8FH 1000 l r2 n ro a? ao Liczba cykli: 2 MOV ad, @Ri Operacja: (ad) <- (Ri) gdzie Ri = RO, Rl (z ustawionego w danej chwili zbioru) l 0 0 0 0 l l i a? ao 86H. 87H Liczba cykli: 2 85H MOV ad l, ad2 Operacja: (ad l) <- (ad2) Kod: 1000 0101 a27 Liczba cykli: 2 75H MOV ad, #n Operacja: (ad) <- n Kod: 0 l l l 0 l 0 l a? ... ao <- n -» Liczba cykli: 2 132 Opis rozkazów MOV bit, C (ang. move carry to direct bit) prześlij znacznik CY do bitu 92H CY Operacja: (bit) Kod: l O O 1)0 O l O b^-b0 Liczba cykli: 2 Zawartość znacznika przeniesienia (akumulatora procesora boolows-kiego) jest przesyłana do bitu o podanym adresie bezpośrednim. MOV C, bit (ang. move direct bit to carry) prześlij bit do znacznika CY A2H Operacja: CY •»- (bit) Kod: li O l Ol O O l O Liczba cykB: l Zawartość bitu o podanym adresie bezpośrednim jest przesyłana do znacznika przeniesienia CY (akumulatora procesora boolowskiego). MOV DPTR, ^nn (ang. lood data pointer with 16-bit constant) wpisz V6-bitową stalą do wskaźnika danych 90H Operacia. DPTR - nn(DPH Kod. FOO l \0000 n 15-8 ni-a Liczba cykti: 2 Do 16-bitowego rejestru DPTR (DPH.DPL) jest wpisywany argument bezpośredni, podany jako drugi i trzeci bajt rozkazu. Pierwszy bajt (bardziej znaczący) jest wpisywany do rejestru specjalnego DPH, a drugi (mniej znaczący) - do DPL. Opis rozkazów 133 MOVC A, @A +
(ang. move data from program memory to accwnulator) prześlij bajt z pamięci programu do akumulatora Zawartość komórki pamięci programu o adresie będącym sumą zawartości akumulatora (8-bitowa liczba dwójkowa bez znaku) i zawartości 16-bitowego rejestru bazowego jest przesyłana do akumulatora. Są tu możliwe dwa rejestry bazowe: wskaźnik danych DPTR i licznik rozkazów PC. Jeżeli rejestrem bazowym jest licznik rozkazów, to adresem bazowym jest jego zawartość po pobraniu rozkazu, czyli adres pierwszego bajtu rozkazu następnego po MOVC. MOVC A, @A + DPTR Operacja: A •<- (A + DPTR) Kod: |1 O O l | O O l 1| 93H Liczba cykli: 2 MOVC A, @A + PC Operacja: A <- (A + PC) Kod: |1 O O 0| O O l l Liczba cykli: 2 MOVX A, @ (ang. move data from external data memory to accwnulator) prześlij bajt z zewnętrznej pamięci danych do akumulatora Dane z komórki zewnętrznej pamięci danych o adresie pośrednim zawartym we wskaźniku danych są wpisywane do akumulatora. Wskaźnikiem danych może być rejestr roboczy RO lub R l albo rejestr specjalny DPTR. Jeżeli wskaźnkiem danych jest rejestr RO lub Rl, to 8-bitowy adres jest wysyłany tylko poprzez port PO. Jeżeli natomiast wskaźnikiem danych 134 Opis rozkazów jest rejestr DPTR, to 16-bitowy adres jest wysyłany przez porty PO (z DPL - osiem mniej znaczących bitów) i P2 (z DPH -_osiem bardziej znaczących bitów). W obu przypadkach na wyjściu RD (P3.7) jest generowany impuls będący sygnałem sterującym odczytywania. MOVX A, @DPTR Operacja: A <- (DPTR) Kod: li l l O 10 O O Ol Liczba cykli: 2 ___ MOVX A, @Ri Operacja: A «- (Ri) gdzie Ri chwili zbioru) Kod: li l l O 10 O l i l Liczba cykli: 2 EOH RO, R l (z ustawionego w danej E2H, E3H MOVX @, A (ang. move data from accianulator to external data memory} prześlij bajt z akumulatora do zewnętrznej pamięci danych Do komórki zewnętrznej pamięci danych o adresie pośrednim zawartym we wskaźniku danych są wpisywane dane z akumulatora Wskaźnikiem danych może być rejestr roboczy RO lub R l albo rejest specjalny DPTR. Jeżeli wskaźnkiem danych jest rejestr RO lub RI, to 8-bitowy adresjes wysyłany tylko poprzez port PO. Jeżeli natomiast wskaźnikiem danyc jest rejestr DPTR, to 16-bitowy adres jest wysyłany przez porty F (z DPL - osiem mniej znaczących bitów) i P2 (z DPH - osiem hardzi znaczących bitów). W obu przypadkach na wyjściu WR (P3.6) je generowany impuls będący sygnałem sterującym zapisywania. MOVX @DPTR, A Operacja: (DPTR) *- A Kod: li l l HOOOOl Liczba cykli: 2 »IOVX @Ri, A Operacja: (Ri) «- A gdzie Ri = RO, R l (z ustawionego w danej chwili zbioru) Kod: |1 l l l | O O l i iczba cykli: 2 IUL AB (ang. multiply) pomnóż |0peracja: B.A <- [A x B] Kod: li O l Ol O l O Ol A4H Liczba cykli: 4 Ośmiobitowa liczba bez znaku, znajdująca się w akumulatorze, jest mnożona przez 8-bitową liczbę bez znaku z rejestru B. Szesnastobitowy wynik jest wpisywany w następujący sposób: osiem bardziej znaczących pitów do rejestru B, osiem mniej znaczących bitów do akumulatora. |eżeli wynik mnożenia jest większy niż 255, to jest ustawiany znacznik JOV; w przeciwnym razie OVjest zerowany. Znacznik CYjest zerowany. NOP (ang. no operation) nic nie rób fo~o oolo oo~o1 Liczba cykli: l Hie jest wykonywana żadna operacja. [>RL , (ang. logical OR) sumuj logicznie (Wykonywana jest suma logiczna (bit po bicie) wskazanych argumentów. ^ynikjest wpisywany do miejsca, z którego został pobrany argument . Jest możliwych sześć kombinacji trybów adresowania argumentów i . Operacja: A <- A v Rr gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) Operacja: A <- A v (Ri) gdzie Ri = RO, Rl (z ustawionego w danej chwili zbioru) ORL A, ad Operacja: A <- A v (ad) 0100 0101 a? ... ao ORL A, #n Operacja: A *- A v n 0100 0100 •<- n -» ORL ad, A Operacja: (ad) <- (ad) v A Opis rozkazów 137 od: 42H 0100 0010 a.7 ... ao iczba cykli: l 43H »RLad, # n operacja: (ad) <- (ad) v n 0100 0011 a? ... ao <- n -» Lód: Liczba cykli: 2 Uwaga! Jeżeli danego rozkazu użyto do zmiany stanu wyjścia, to zostaje odczytana i zmodyfikowana zawartość rejestru wyjściowego portu (a nie stan logiczny z końcówek układu). ORL C, bit (ang. logical OR carry with direct bit) bit sumuj logicznie z bitem 72H Operacja: CY «- CY v (bit) Kod: 0111 0010 b? ... bo Liczba cykli: 2 Jeżeli wartość logiczna bitu o podanym adresie bezpośrednim jest równa l, to do znacznika przeniesienia CY (akumulator procesora boolows-kiego) wpisuje się jedynka. W przeciwnym razie zawartość CY nie ; zmienia się (zawartość CY jest sumowana logicznie z zawartością zaadresowanego bitu). 1'ORL C,/bit (ang. logical OR carry with complement ofdirect bit) sumuj logicznie z negacją bitu Operacja: CY <- CY v (bit) 138 Kod: 1010 0000 b7 . . bo Liczba cykli: 2 leżeli wartosc\ogicznaVntu o podanym adtesiebeiposiedmm'iest. równa O, to do znacznika przeniesienia CY (akumulator procesora boolows-kiego) wpisuje się jedynka. W przeciwnym razie zawartość CY nie zmienia się (zawartość CY jest sumowana logicznie z negacją zawartości zaadresowanego bitu). POP ad (ang. pop from stack) zdejmij ze stosu Operacja: (ad) <- (SP) SP <- SP - l 1101 0000 a? ... ao Liczba cykB: 2 Dane z wierzchołka stosu, tzn. komórki wewnętrznej pamięci danych o adresie zawartym we wskaźniku stosu SP, są wpisywane do komórki wewnętrznej pamięci danych (lub rejestru specjalnego) o podanym adresie bezpośrednim, po czym zawartość SP jest zmniejszana o l. PUSH ad (ang. push onto stack) ląduj na stos Operacja: SP *- SP + l (SP) ^ (ad) l l 0 ol 0 0 0 0 a? ... ao Liczba cykli: 2 Zawartość wskaźnika stosu SPjest zwiększana o l, po czym na wierzchołek stosu, czyli do komórki wewnętrznej pamięci danych o adresie zawartym w SPjest wpisywana zawartość komórki wewnętrznej pamięci danych (lub rejestru specjalnego) o podanym adresie bezpośrednim. Opis rozkazów 139 ET (ang. retum from subroutine) wróć z podprogramu Pperacja: PCi5-8 <- (SP) SP <- SP - l PC7-0 <- (SP) SP «- SP - l Kod: |0 O l O |0 O l 0| 22H Liczba cykli: 2 Adres powrotu (najpierw bardziej, następnie mniej znaczący bajt) jest wpisywany ze stosu do licznika rozkazów. Zawartość wskaźnika stosu jest zmniejszana o dwa. RETI (ang. returnfrom interrupt) wróć z przerwania Operacja: PCi5-8 <- (SP) SP <- SP - l PC7< <- (SP) SP <- SP - l Kod: |0 O l l |0 O l 0| 32H Liczba cykli: 2 Adres powrotu (najpierw bardziej, następnie mniej znaczący bajt) jest wpisywany ze stosu do licznika rozkazów. Zawartość wskaźnika stosu jest zmniejszana o dwa. Wykonanie rozkazu RETI jest dla systemu przerwań sygnałem zakończenia obshigi przerwania, czyli żadne zgłoszenie przerwania z tego samego lub niższego niż obsługiwane poziomu nie będzie wcześniej przyjęte. RL A (ang. rotate lęft) przesuń cyklicznie w lewo Operacja: 140 Opis rozkazów Kod: |0 O l 0| O O l 11 23H Liczba cykli: l Zawartość akumulatora jest przesuwana cyklicznie w lewo o jeden bit, tzn. bit l przyjmuje wartość bitu O, bit 2 - wartość bitu l,..., bit 7 - wartość bitu 6, a bit O - wartość bitu 7. RLC A (ang. rotate left through carry) przesuń cyklicznie w lewo z CY Kod: 10 O l l | O O l li 33H Liczba cykli: l Zawartość akumulatora jest przesuwana cyklicznie w lewo o jeden bit, tzn. bit l przyjmuje wartość bitu O, bit 2 - wartość bitu l,..., bit 7 - wartość bitu 6, znacznik CY - wartość bitu 7, a bit O - wartość znacznika CY. Wykonanie tego rozkazu przy zerowym CY, np. w sekwencji: CLRC RLC A odpowiada pomnożeniu przez 2 liczby (w naturalnym kodzie dwójkowym) zawartej w akumulatorze. Znacznik przeniesienia CY jest ustawiany zgodnie z wynikiem operacji. Inne znaczniki pozostają bez zmiany. RR A (ang. rotate right) przesuń cyklicznie w prawo Kod: 00000011 03H Liczba cykli: l Opb rozkazów 141 Zawartość akumulatora jest przesuwana cyklicznie w prawo o jeden bit, ;zn. bit O przyjmuje wartość bitu l, bit l - wartość bitu 2,..., bit 6 - wartość bitu 7, a bit 7 - wartość bitu 0. HRC A (ang. rotate right through carry) przesuń cyklicznie w prawo z CY Operacja: 13H Kod: |0 O O l | O O l l Liczba cykli: l Zawartość akumulatora jest przesuwana cyklicznie w prawo o jeden bit, an. bit O przyjmuje wartość bitu l, bit l - wartość bitu 2,..., bit 6 - wartość bitu 7, bit 7 - wartość znacznika CY, a znacznik CY - wartość bitu 0. Wykonanie tego rozkazu przy zerowym CY, np. w sekwencji: CLRC RLCA adpowiada podzieleniu przez 2 liczby (w naturalnym kodzie dwójkowym) eawartej w akumulatorze. Znacznik przeniesienia CY jest ustawiany zgodnie z wynikiem operacji. Inne znaczniki pozostają bez zmiany. SETB bit (ang. set bit) ustaw bit Operacja: (bit) <- l Kod: D2H 1101 0010 b? ... bo Liczba cykli: l Do bitu o podanym adresie bezpośrednim jest wpisywana jedynka. SETB C (ang. set carry flag) ustaw znacznik przeniesienia Operacja: CY <- l Kod: li l O l 10 O l li D3H Liczba cykli: l Do znacznika przeniesienia CY (akumulatora procesora boolowskiego) jest wpisywana jedynka. SJMP d (ang. jump relatwe) skocz bezwarunkowo względem PC Operacja: PC «- PC + 2 PC «- PC+d 1000 0000 <- d -» Liczba cykli: 2 Do zawartości licznika rozkazów jest dodawane przesunięcie d (8-bito-wa liczba ze znakiem w kodzie U2, z przedziału <-128, +127)). Dodawanie jest wykonywane po pobraniu kodu rozkazu skoku, kiedy w liczniku rozkazów znajduje się adres pierwszego bajtu następnego rozkazu. Skok jest wykonywany wzlędem tego adresu. SUBB A, (ang. subtract^rom accumuiator with borrow) odejmij od akumulatora z pożyczką Od zawartości akumulatora jest odejmowany wskazany argument oraz zawartość znacznika przeniesienia CY. Wynik operacji jest wpisywany do akumulatora, - są ustawiane znaczniki CY, AC i OV. Są możliwe cztery tryby adresowania argumentu , (ang. logical XOR) sumuj mód 2 Wykonywana jest suma mód 2 (różnica symetryczna) wskazanych argumentów (bit po bicie). Wynik jest wpisywany do miejsca, z którego został pobrany argument . Jest możliwych sześć kombinacji trybów adresowania argumentów i . XRL A, Rr Operacja: A <- A © Rr gdzie Rr = RO,..., R7 (z ustawionego w danej chwili zbioru) Kod: |0 l l O | l n n ro| 68H-6FH Liczba cykli: l XRL A, @Ri Operacja: A <- A ® (Ri) gdzie Ri = RO, R l (z ustawionego w danej chwili zbioru) Kod: Oli O | O l l i 66H, 67H Liczba cykli: l XRL A, ad Operacja: A *- A ©(ad) 0 l l 0 0101 a? ao l l WYDAWNICTWA NAUKOWO-TECHNICZNE 100-048 Warszawa, Mazowiecka 2/4 _, r-KTO/tMii^ A |TEL./FAX 826-82-93 _______________t:Ltil\ l KUNli\A Zamawiam za zaliczeniem pocztowym następujące książki: 27,00 zł 60,00 zł 18,00 zł 88,00 zł 29,00 zł 30,50 zł 32,00 zł 63,00 zł 16.00 zł 20.00 zt 48,50 zt 16,00 zł 32,00 zł 26,00 zł 22,50 zł 16.00 zł 12,CO zt 35,00 zł 15,00 Zł 29,50 zt 21,00 zł 9,00 zł 18.00 zł 21,00 z) 19,50 zł • Charoy A.: Kompatybilność elektromagnetyczna. Zakłócenia w urządzeniach elektronicznych. Tom 1. Źródła, sprzężenia, skutki. Zasady i porady instalacyjne • De Micheli G.: Synteza i optymalizacja układów cyfrowych • Leyland V.: EDl. Elektroniczna wymiana dokumentacji • Nowak M., Barlik R.: Poradnik inżyniera energoelektronika • Ocioszyński J.: Zespoły elektryczne i elektroniczne w samochodach • Prince B.: Nowoczesne pamięci półprzewodnikowe. Architektura i organizacja pamięci układów ORAM i SRAM • Rusek M., Pasierbiński J.: Elementy i układy elektroniczne w pytaniach i odpowiedziach • Tietze U., Schenk Ch.: Układy półprzewodnikowe • Tunia H., Winiarski B: Energoelektronika w pytaniach i odpowiedziach • Watkins Ch.D., Sadun A.. Marenka S.' Nowoczesne metody przetwarzania obrazu (+ dyskietka) • Winkler W., Wiszniewski A.: Automatyka zabezpieczeniowa w systemach elektroenergetycznych • Wood L.: Poczta elektroniczna. Modemy i programy telekomunikacyjne PODRĘCZNIKI AKADEMICKIE. EIT • Antoszkiewicz K., Nosal Z.: Zbiór zadań z układów elektronicznych liniowych • Wosa/ Z. Baranowski J.: Układy elektroniczne. Cz. l. Układy analogowe liniowe • Baranowski J., Czajkowski'G.: Układy elektroniczne. Cz. II. Układy analogowe nieliniowe i impulsowe • Baranowski J., Kalinowski B., Nośni Z.: Układy elektroniczne. Cz. III. Układy i systemy cyfrowe « Hennel J.: Podstawy elektroniki półprzewodnikowej • Jajszczyk A.: Wstęp do telekomutacji • Kudrewicz J.: Nieliniowe obwody elektryczne. Taoria i symulacja komputerowa • Majewski W.: Układy logiczne • Morawski T., Gwarek W.: Pola i fale elektromagnetyczne • Niedźwiecki M., Rasiukiewicz M.: Nieliniowe elektroniczne układy analogowe • Osiowski J., Szabatin J.: Podstawy teorii obwodów. Tom l • Osiowski J., Szabatin J.: Podstawy teorii obwodów. Tom II • Osiowski J., Szabatin J.: Podstawy teorii obwodów. Tom III egz. egz. • Przykłady analizy nieliniowych układów elektronicznych. Cz. l Praca zbiorowa 13,50 zł • Zbiór zadań z układów elektronicznych nieliniowych i impulsowych Praca zbiorowa 37,00 zł UKŁADY l SYSTEMY ELEKTRONICZNE • Bukat D., Ogrodzki J.: Optima v. 2.0. Uniwersalny analizator układów elektronicznych 12.00 zł ... egz. 25.00 zł ... egz. 10,10 zł ... egz. 19,50 zł ... egz. 16,50 zł ... egz. 23,00 zł ... egz. • Dobrowolski'J.: Monolityczne mikrofalowe układy scalone - modelowanie, projektowanie i pomiary • Napieralscy A., M.: Polowe półprzewodnikowe przyrządy dużej mocy • Porębski J., Korohoda P.: SPICE. Program analizy nieliniowej układów elektronicznych • Wawryn K.: Układy z przełączanymi prądami • Zarzycki J.: Cyfrowa filtracja ortogonalna sygnałów losowych data podpis zamawiającego Zamówienie na wybrane książki proszę wysłać pod adresem: Dział Handlowy Wydawnictw Naukowo-Technicznych Skrytka pocztowa 359, 00-950 Warszawa Zamówienia przyjmujemy również za pośrednictwem poczty elektronicznej. Nasz adres: marketing@wnt.com.pl Zamawiający: Imię i nazwisko Adres Przy zakupie książek o wartości przekraczającej 100,00 zł udzielamy 10% rabatu. Zapraszamy do naszej księgarni internetowej -www.wnt.com.pl Powyższe ceny obowiązują do wyczerpania nakładu danego tytułu Mikrokomputery jednouktadowe rodziny MCS-51 Zaprasaamy do naszej księgarni ihłcrjńj^Sy^j www.wnł.wBBS1^^ •«•- '"••|BB»!!" Można łam łnaleie $xexegótowe informacje o naszych książkach, m.in. omówienie, spis łreści.