You are on page 1of 253

Bit w zastosowaniach 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek
Wersja 2.0 - zakończono 22.01.2012 odwiedzono 223421 razy.
Zoptymalizowano dla IE i Firefox
przy rozdzielczości 1280 x 1024

Wszystkie struktury danych przetwarzane przez komputer zbudowane są z bitów. Co więcej wewnętrzna konstrukcja współczesnych
komputerów oparta jest na bitach (np. architektura 32 bitowa, 64 bitowa) - procesor, pamięć, przestrzeń adresowa, adresy, dane liczbowe itd.
Zrozumienie pojęcia bitu oraz sposobów jego wykorzystania jest kluczową umiejętnością we współczesnej informatyce. Nie musisz od razu
zapoznawać się ze wszystkimi materiałami, które tutaj zebrałem. Możesz sobie do nich wracać w razie potrzeby.
Celem niniejszego artykułu jest przedstawienie w sposób usystematyzowany podstawowych operacji na bitach. Wszystkie programy w tym
artykule zostały napisane i uruchomione w języku C++ w darmowym środowisku Code::Blocks (Jeśli używasz innego środowiska, np. VC++, to
programy źródłowe będziesz musiał sobie do niego dostosować - nie powoduje to zwykle zmiany w kodzie, jedynie wymaga innego zestawu
plików nagłówkowych). Język ten wybraliśmy świadomie ze względu na jego uniwersalność oraz olbrzymią popularność.
Jak w każdym większym artykule również tutaj na pewno autor popełnił błędy i nieścisłości. Jeśli coś takiego zauważysz, to napisz o tym
autorowi. Dzięki współpracy z czytelnikami artykuły w naszym serwisie są coraz lepsze i zawierają mniej błędów. Za wszelkie uwagi jesteśmy
zawsze wdzięczni. Jednocześnie przyjmij do wiadomości, iż większość omawianych tutaj struktur i algorytmów została opisana w sposób
prosty, bez wgłębiana się w aspekty naukowo-teoretyczne, które rozważa się na studiach informatycznych - materiał jest przeznaczony przede
wszystkim dla zdolniejszych uczniów szkoły średniej a nie dla studentów uniwersytetu. Osobiście uważam, iż proste podejście do wielu
zagadnień informatycznych znakomicie ułatwia ich wstępne zrozumienie – później można kontynuować dalszą naukę i zagłębiać tę dziedzinę
wiedzy informatycznej.
Zapraszamy

Spis treści

Pojęcie bitu
Czym jest bit i po co jest on nam potrzebny
Kodowanie informacji za pomocą bitów
Algebra Boole'a
Kod Gray'a
Minimalizacja funkcji logicznych
Logika w C++
Operacje bitowe w C++

Przesyłanie bitów
Transmisja cyfrowa
Kody detekcyjne EDC
Kody korekcyjne ECC
Sieć lokalna Ethernet

Bity w elektronice
Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych
Bramka sterowana OR - AND - EXOR - NAND
Czytnik klawiatury numerycznej
Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator
Zjawisko hazardu w sieciach logicznych
Przerzutniki
Przerzutnik RS
Przerzutnik D
Przerzutnik J-K
Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/index.php 1 / 253
Bit w zastosowaniach 2014-10-03

Zapamiętywanie bitów
Pamięć
Historia rozwoju pamięci komputerowych
Budowa i rodzaje pamięci komputerowej
Statyczna pamięć RAM
Dynamiczna pamięć RAM
Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Sterowanie za pomocą bitów


Wejście / wyjście
Centronics
RS-232
PS/2
USB

Przetwarzanie bitów
Procesor
Architektura Johna Von Neumanna
Budowa procesora
Mikroprocesory

Tematy uzupełniające
Historia komputerów
Pionier komputeryzacji - Konrad Zuse
Komputery Konrada Zuse
Pierwszy mikroprocesor Intel 4004
Maszyna Turinga
Przykładowa maszyna cyfrowa II

Literatura
Wprowadzenie do algorytmów, T.H.Cormen, C.E.Leiserson, R.L.Rivest, WNT 1997,2004
Algorytmy + Struktury danych = Programy, N.Wirth, WNT 2001
Algorytmy i struktury danych, L. Banachowski, K. Diks, W. Rytter, WNT 2006
Język C++, B. Stroustroup, WNT 2002
C++, 50 efektywnych sposobów na udoskonalenie Twoich programów, S. Meyers, HELION 2003.
Język C++ bardziej efektywny, S. Meyers, WNT 1998
STL w praktyce. 50 sposobów efektywnego wykorzystania, S. Meyers, HELION 2004
Symfonia C++, J. Grębosz, Oficyna Kallimach, Kraków 1999
Język ANSI C, B. Kernighan, D. Ritchie, WNT 2004
Wydajne programowanie – Extreme Programming, K. Beck, A. Cynthia, Mikom 2005
Jak pisać efektywne przypadki użycia, A. Cockburn, WNT 2004
7 nawyków skutecznego działania, S. Covey, REBIS 2002
Aspekty kombinatoryki, V. Bryant, WNT 1977
Matematyka Konkretna, R. L. Graham, D. E. Knuth, O. Patashnik, PWN 1996
Kombinatoryka dla programistów, W. Lipski
Analiza kombinatoryczna, W. Lipski, W. Marek, PWN 1986
Metody numeryczne, Z. Fortuna, B. Macukow, J. Wąsowski, WNT Warszawa, 1982, 2005
Przegląd metod i algorytmów numerycznych, M. Dryja, J. i M. Jankowscy, WNT 1988
Wprowadzenie do teorii grafów, R. J. Wilson, PWN 1985
Wstęp do matematyki, H. Rasiowa, PWN 1971, 1984, 1998
Teoria mnogości, K. Kuratowski, A. Mostowski, PWN 1978
The Art of Computer Programming, D. E. Knuth, Addison-Wesley Publishing Company
Programming Pearls, J. Bentley, Addison-Wesley Publishing Company 2000
Data Structures and Program Design in C++, R. L. Kruse, A. J. Ryba, Prentice Hall
Jewels of stringology, W. Rytter, M. Crochemore, World Scientific 2003
Software Engineering, R. Pressman, McGraw-Hill 1997.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/index.php 2 / 253
Bit w zastosowaniach 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/index.php 3 / 253
Bit w zastosowaniach - Czym jest bit 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Czym jest bit i po co jest on nam potrzebny?
Kodowanie informacji za pomocą bitów
Algebra Boole'a
Kod Gray'a
Minimalizacja funkcji logicznych
Logika w C++
Operacje bitowe w C++

Na potrzeby tego rozdziału przyjmijmy, iż informacja jest pojęciem pierwotnym, którego nie będziemy
definiowali. Ma to pewien sens, ponieważ każdy z nas posiada wewnętrzne zrozumienie tego terminu.
Zastanówmy się natomiast, jak można reprezentować, przedstawiać informację.
Za pomocą słów - nie ma wątpliwości, iż ludzie opracowali bardzo efektywny dla siebie
sposób reprezentowania różnych pojęć za pomocą słów. System ten stosujemy codziennie do
komunikowania się. Skoro działa, jest zatem dobry.
Za pomocą pisma - słowa możemy zapisać, np. na papierze. W ten sposób utrwalimy je dla
innych ludzi, którzy nie mieli okazji ich usłyszeć. A być może wcale nic nie mówiliśmy, tylko
od razu zapisaliśmy naszą informację w formie pisemnej.
Za pomocą gestów - wzruszenie ramion, rozłożenie rąk, uchwycenie się za głowę - gesty te
niewątpliwie niosą dla nas różne informacje.
Za pomocą innych sposobów - np. liczby, znaki drogowe, kolory, fale radiowe, prąd
elektryczny i setki innych sposobów, które wymyślił człowiek (lub przyroda - np. kod DNA) do
przekazania określonych informacji.
Zatem słowa, pismo, gesty, znaki, wszystko to może służyć do reprezentowania informacji. Elementy te będziemy ogólnie
nazywali symbolami. Z kolei zbiór takich symboli nazwiemy danymi - czyli dane, to symbole, które mogą reprezentować
informację. Aby wydobyć informację z danych, musimy wiedzieć, w jaki sposób informacja została z tymi danymi skojarzona,
powiązana. Nie jest to wcale oczywiste. Jeśli masz wątpliwości, to proponuję taki prosty eksperyment:
Nastaw odbiornik radiowy na audycję w obcym sobie języku i posłuchaj jej przez chwilę.

Czy rozumiesz o czym mówią ludzie w tej audycji? A jeśli nie, to z jakiego powodu? Oczywiście odpowiesz - bo nie znam tego
języka, co w tym dziwnego. Masz rację. Nie znasz języka i nie rozumiesz. Ale przecież odbierasz dane - czyli słowa. Gdyby dane
były równoważne informacji, to odczytanie jej z tych danych nikomu nie sprawiałoby żadnej trudności i nie musiałbyś uczyć się w
szkole języków obcych (wszystkie języki byłyby nasze). Niestety tak nie jest. Zatem wniosek może być tylko jeden. Same dane
nie są jeszcze informacją. Musimy jeszcze znać sposób przypisania danych do określonych informacji - w przypadku języka
oznacza to konieczność poznania znaczenia słówek oraz gramatyki, inaczej będziesz miał poważne kłopoty ze zrozumieniem.
Daną informację można reprezentować za pomocą różnych symboli. Przykładowo pojęcie PRZYJACIEL w różnych językach to
różne słówka:

friend -
angielski
Freund -
niemiecki
amigo -
hiszpański
ami -
francuski
barát -
węgierski
mellon -
elficki z Władcy Pierścieni Tolkiena (czarodziej Gandalf wypowiada to słowo, aby otworzyć magiczne
wejście do kopalń Morii).
c'khrng - dźwięk wydawany na widok przyjaciela przez żabopodobne stwory, żyjące w bagnistych kraterach na
czwartym księżycu ósmej planety systemu Syriusza. Ich krewniaki Lekhomonty w tej samej sytuacji
wysyłają błysk promieni gamma.

Symbole są różne, lecz znaczenie takie samo. Istnieją oczywiście kontrprzykłady - ten sam symbol oznacza różne informacje, np.
słowa wieloznaczne:

zamek (w drzwiach, w kurtce lub duży dom dla rycerza)


dziób (ptaka, samolotu, okrętu)
blok (mieszkanie, krążek z liną, zablokowanie ciosu w karate)

Jednakże w większości przypadków nie dochodzi do zamieszania, ponieważ właściwe znaczenie słowa wybieramy w zależności
od sytuacji, w której jest ono używane. Jeśli mówimy o zamykaniu zamka na klucz, to oczywiście mamy na myśli zamek w
drzwiach, a nie miejsce noclegowe dla rycerzy (chociaż te zamki też pewnie można było zamykać na klucze). Taka jednoznaczna
sytuacja nazywa się kontekstem użycia danych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0001.php 4 / 253
Bit w zastosowaniach - Czym jest bit 2014-10-03

Co z tego dla nas wynika? Otóż jeśli chcemy wyrażać informację w jakiejś czytelnej dla innych formie, to:

1. Musimy znaleźć odpowiednie symbole, czyli określić dane


2. Musimy tym danym nadać odpowiednie znaczenia, czyli określić ich interpretację
3. Znaczenia danych musimy upowszechnić w grupie, w której będą one wykorzystywane, czyli określić
kontekst.

DANE + INTERPRETACJA + KONTEKST → INFORMACJA

Jeśli powyższe trzy punkty spełnimy, otrzymamy system reprezentacji określonych informacji za pomocą wybranych symboli -
danych. Gdy to już wiemy i rozumiemy, możemy przejść do pojęcia bitu.

Postawmy się w roli pioniera komputerów. Mamy przed sobą


bardzo poważne zadanie - budowę komputera, czyli maszyny
liczącej, która będzie przetwarzała informację. Zanim zaczniemy
montować to ogromniaste urządzenie z tysięcy podzespołów i
setek kilometrów kabli, musimy określić zbiór symboli, które
maszyna ma przetwarzać. Innymi słowy musimy określić zbiór
danych dla maszyny oraz sposoby ich interpretacji.
Jakie symbole wybrać? Mowę? Za trudna i jak ją zapisywać
wewnąt rz maszyny! Pismo? Też trudne. Gesty lepiej
zapomnieć. Ideałem byłby symbole najprostsze z możliwych.
Dla takich symboli może znaleźlibyśmy jakieś w miarę proste
sposoby ich realizacji w naszym komputerze za pomocą
odpowiednich obwodów elektronicznych. Co to mogłoby być?
I w tym miejscu ktoś kiedyś dostał olśnienia - najprostszym
symbolem byłby taki symbol, który mógłby występować tylko w
dwóch rozróżnialnych postaciach, w dwóch formach, najlepiej
przeciwnych. Dlaczego akurat w dwóch a nie w trzech. Bo dwie
postacie są prostsze od trzech, jasne?!
W układzie elektronicznym taki symbol mógłby być przedstawiany przez np. dwa różne napięcia elektryczne - pierwsza postać
symbolu to napięcie powiedzmy 5V, a druga postać to napięcie 0V. Dwa różne napięcia da się łatwo rozróżnić i projekt układów
elektronicznych, które na takie napięcia reagują nie jest wcale taki trudny (dla inżyniera elektronika oczywiście - dla większości
licealistów jest to problem typu niemożliwego). Zamiast napięcia można na przedstawiciela naszego symbolu wybrać wybrać prąd
elektryczny - prąd płynie w obwodach - pierwsza postać, prąd nie płynie - druga postać. A może światło? Jest strumień świetlny -
pierwsza postać, nie ma strumienia - postać druga (cały czas czekam, aż w końcu pojawią się komputery wykorzystujące,
zamiast prądów i napięć, fotony. Przyjemnie byłoby zdjąć obudowę i popatrzyć sobie, jak nasz komputerek ładnie w środku sobie
świeci).
W tym momencie powinieneś zapytać - no dobrze, ale po co mi to wszystko jest potrzebne?
Cały czas chodzi nam o przedstawianie informacji przy pomocy jak najprostszych symboli. Znaleźliśmy proste dane - symbole
dwustanowe. Musimy pokazać, iż takie symbole będą dobrze nadawały się do naszego celu, czyli pozwolą kojarzyć ze sobą
dowolną ilość informacji.
Aby ułatwić sobie życie, oznaczmy stany naszego symbolu cyframi 1 (stan wysoki - np. napięcie 5V, prąd płynie, jest światło, itp.)
oraz 0 (stan niski - np. napięcie 0V, brak prądu, brak światła, itp.). Dlaczego akurat wybraliśmy cyfry 1 i 0? A dlaczego nie? Są to
znaki równie dobre jak każde inne (np. elektronicy często w tym samym charakterze wykorzystują literki H - stan wysoki i L - stan
niski), a dodatkowo, co zobaczymy w dalszych rozdziałach, cyfry 0 i 1 posiadają wiele pożytecznych dla nas zalet. Otrzymany
zbiór danych zawiera teraz dwa rozróżnialne symbole:

Zbiór danych = {0, 1}

Dwóm symbolom można przypisać dwa różne znaczenia, dwie informacje. Jakie? Potrzebne nam w danym
zastosowaniu. Dla przykładu wyobraźmy sobie, iż nasz system komputerowy zbiera dane od czujników
pożarowych, umieszczonych w różnych punktach budynku. Czujnik pożarowy reaguje na wzrost temperatury
lub dym. Jeśli temperatura osiągnie krytyczną wartość lub pojawi się dym w otaczającym czujnik powietrzu,
wewnątrz zostają zwarte dwa przewody i zaczynie płynąć prąd elektryczny. Brak prądu (stan niski 0) oznacza
zatem normalną temperaturę w chronionym pomieszczeniu. Pojawienie się prądu (stan wysoki 1) informuje
nas o wysokiej temperaturze, czyli o wybuchu pożaru. W tym kontekście stany 0 i 1 mają oczywiste
znaczenie:
0 - wszystko jest w porządku, 1 - pożar

W innym kontekście symbole 0 i 1 mogą posiadać zupełnie inne znaczenia (np. 1 - mamy czekoladę, jest dobrze; 0 - brakło
czekolady, panika!). To od nas zależy co im przypiszemy - o znaczeniu używanych przez ludzi słów decydowali używający je
ludzie, a nie niedźwiedzie w Alpach (te być może przyczyniły się do powstania słów w stylu AUUUUU..., które są rzadkimi,
wspólnymi słowami dla prawie wszystkich języków, których użytkownicy mieli okazję spotkać niedźwiedzia. Jest to fascynujące,
ale nie na temat).
Symbol, który może występować w jednym z dwóch stanów (form, postaci), nazwano bitem. Twórcą tej nazwy był amerykański
statystyk John Turkey, który ją wymyślił w trakcie drugiego śniadania (najprawdopodobniej po wypiciu dokładnie dwóch łyków
kawy z niewielkim dodatkiem mleka, co jednakże nie ma wpływu na dalsze losy bitów) na jednej z konferencji naukowych w zimie
roku 1943-44. W owym czasie istniały już komputery wykorzystujące opisane przez nas powyżej symbole dwustanowe do
wykonywania różnych obliczeń. Informatycy oznaczali je cyframi 0 i 1, ponieważ w tej postaci nadawały się doskonale do
przedstawiania liczb binarnych, dwójkowych, za pomocą których komputery liczyły. John Turkey utworzył nazwę bit z literek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0001.php 5 / 253
Bit w zastosowaniach - Czym jest bit 2014-10-03

dwóch słów angielskich: binary digit (cyfra dwójkowa, czyli 0 lub 1):

bit = binary digit

W późniejszym okresie John ujawnił, iż rozważał jeszcze dwie inne kombinacje literek:

bigit = binary digit


binit = binary digit

Jak dzisiaj już wiemy, przyjęła się tylko pierwsza forma. Określenie bit w charakterze symbolu dwustanowego, przeznaczonego do
symbolicznego reprezentowania informacji pojawiło się po raz pierwszy w 1948 roku w pracach wybitnego informatyka, Claude
Shannona, twórcy teorii informacji.

Zapamiętaj:
Bit jest symbolem występującym tylko w dwóch różnych stanach, które w informatyce najczęściej
oznaczamy cyframi dwójkowymi 0 i 1. Nazwa bit pochodzi od słów angielskich binary digit (cyfra
dwójkowa). Nazwę tę wymyślił John Turkey w 1943 roku.

Jednemu bitowi możemy przypisać maksymalnie dwie różne informacje - jedną dla stanu 1 oraz drugą dla stanu 0. Co jednak
mamy zrobić, jeśli w pewnym kontekście musimy operować większą ilością informacji? Cóż, musimy potraktować bity jako literki i
tworzyć z nich słowa - zupełnie tak samo jak w naszym ojczystym języku. Zbadajmy tę możliwość.

Nowe kombinacje słówek binarnych otrzymujemy z poprzednich


kombinacji dołączając do nich raz bit o stanie 0, a następnie jeszcze raz
Słowo 1 bitowe dołączając bit o stanie 1. W efekcie ilość kombinacji zawsze podwaja się.
0 - pierwsza informacja 2 4 8 16 32
1 - druga informacja 0 00 000 0000 00000
1 01 001 0001 00001
Słowo 2 bitowe: 10 010 0010 00010
11 011 0011 00011
00 - pierwsza informacja 100 0100 00100
01 - druga informacja 101 0101 00101
10 - trzecia informacja 110 0110 00110
11 - czwarta informacja 111 0111 00111
1000 01000
Słowo 3 bitowe: 1001 01001
1010 01010
000 - pierwsza informacja 1011 01011
001 - druga informacja 1100 01100
010 - trzecia informacja 1101 01101
011 - czwarta informacja 1110 01110
100 - piąta informacja 1111 01111
101 - szósta informacja 10000
110 - siódma informacja 10001
111 - ósma informacja ...
11111

Widzimy wyraźnie, iż dodanie kolejnego bitu do słówka binarnego zwiększa dwukrotnie ilość możliwych kombinacji stanów bitów
tworzących to słowo. Większa ilość kombinacji przekłada się na większą ilość informacji, które można bezpośrednio przypisać
tworzonym słówkom binarnym. Ponieważ ilość kombinacji podwaja się przy każdym dodanym bicie, otrzymujemy proste
zależności:

1 bit → 2 informacje → 21 informacji


2 bity → 4 informacje → 22 informacji
3 bity → 8 informacji → 23 informacji
4 bity → 16 informacji → 24 informacji
... ... ...
n bitów → ... → 2n informacji

Co z tego wynika? Otóż dla każdej skończonej ilości informacji x zawsze możemy dobrać takie n, aby n bitowe słówka binarne
przyjęły tyle różnych stanów, ile jest potrzebne do zakodowania tej ilości informacji. W tym celu wystarczy, aby był spełniony
warunek:

dla x > 1: n ≥ log2x, n Î N


Przykład:
Załóżmy, iż w pewnym systemie informatycznym musimy przetwarzać (posługiwać się) 1000 różnych informacji. Przetwarzane
informacje będziemy w tym systemie przedstawiać n bitowymi słówkami. Ile musi wynosić n, aby n bitowe słówka binarne przyjęły

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0001.php 6 / 253
Bit w zastosowaniach - Czym jest bit 2014-10-03

co najmniej 1000 różnych kombinacji?


Odpowiedź: n ≥ log21000 ≈ 9,96578..., Przyjmijmy zatem n = 10.

Dla słówek 10 bitowych liczba wszystkich możliwych kombinacji wynosi 210 = 1024. Wynika z tego, iż w naszym systemie 24
słówka nie będą posiadały żadnego znaczenia - to nic, pozostaną na zapas, gdyby w przyszłości okazało się, iż zamiast 1000
informacji będziemy potrzebowali np. 1005.

Zapamiętaj:
Słówka n bitowe przyjmują 2n różnych kombinacji swoich stanów 0 lub 1.
Aby przyjąć x kombinacji, słówka binarne muszą składać się z (n ≥ log2x) bitów.

Teraz możemy odpowiedzieć na postawione na początku rozdziału pytania:


Czym jest bit?
Bit jest dwustanowym sygnałem, daną, która może być skojarzona z dokładnie dwoma różnymi informacjami. Stany bitu
oznaczamy cyfrą 1 i 0.

Do czego jest nam potrzebny bit?


Bitu potrzebujemy do tworzenia słówek binarnych, które z kolei kojarzymy z odpowiednimi informacjami. W ten sposób
dowolną ale skończoną ilość informacji możemy przypisać do odpowiedniej liczby różnych słówek binarnych.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0001.php 7 / 253
Bit w zastosowaniach - Kodowanie informacji 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Kodowanie informacji za pomocą bitów
Czym jest bit i po co jest on nam potrzebny
Algebra Boole'a
Kod Gray'a
Minimalizacja funkcji logicznych
Logika w C++
Operacje bitowe w C++

Bity są dwustanowymi symbolami, danymi. Stany bitów w informatyce oznaczamy


tradycyjnie cyframi 1 i 0. Wewnątrz komputera oczywiście nie ma żadnych zer i
jedynek - aby się o tym przekonać, wystarczy otworzyć obudowę i zaglądnąć do
środka. Oszczędzimy ci jednak tej niebezpiecznej pracy - wnętrze komputera
możesz sobie oglądnąć po lewej stronie tego tekstu - i tak wiem, iż nic cię nie
powstrzyma przed zaglądnięciem do środka, ale zrób to przynajmniej w czasie
nieobecności ojca...
Cyfry 0 i 1 używamy tylko do zapisu stanu bitu na papierze. Wewnątrz komputera
bity są reprezentowane przez napięcie elektryczne. Stan 1 to około 5V, a stan 0 to
około 0V. Układy elektroniczne komputera wykorzystują te napięcia do
przetwarzania danych bitowych.
Dla nas jednak wygodniej będzie posługiwać się właśnie tymi cyferkami 1 i 0 (ale
pamiętaj o tym, co napisałem). W tym rozdziale pokażę, do czego możemy
wykorzystać bity, a są one nad wyraz użyteczne, o czym się wkrótce przekonasz.
Zadaniem bitów jest reprezentowanie informacji w taki sam sposób jak wyrazy reprezentują w mowie różne pojęcia. Zanim bity
będą cokolwiek reprezentować, najpierw musimy troszeczkę popracować. Poniższe punkty są dobrą wskazówką:

Procedura kodowania informacji za pomocą bitów


1. Określ dokładnie informację, którą chcesz reprezentować bitami.
2. Policz dokładnie liczbę wszystkich informacji, które będziesz potrzebował w swoim systemie.
3. Określ liczbę bitów w słówkach binarnych tak, aby ilość ich kombinacji pokryła liczbę twoich informacji.
4. Zastanów się nad najbardziej efektywnym sposobem przyporządkowania informacji poszczególnym słówkom binarnym.
5. Przydziel słówkom binarnym poszczególne informacje.

W ten sposób zbudujemy tzw. kod binarny (ang. binary code). Słówka tego kodu będą reprezentowały przydzielone im
informacje. Oczywiście aby odczytać te informacje, należy znać dokładnie sposób kodowania, czyli przydzielania informacji
słówkom kodowym.

Kodowanie grafiki
Na pierwszy rzut oka zadanie wydaje się beznadziejne - jak mogę przekształcić piękne
obrazy Rubensa w jakieś tam bity przyjmujące stany 0 lub 1? Na pewno masz rację,
przekształcić ich nie możemy, lecz z pewnym przybliżeniem możemy zakodować zawartą w
tych obrazach informację o kolorach. Na początek musimy zastanowić się, w jaki sposób
będziemy przedstawiali informację zawartą w grafice, czyli nad sposobami jej reprezentacji.
Postawmy sobie chwilowo mniej ambitne zadanie. Załóżmy, iż nasza grafika zawiera tylko
dwa różne kolory - biały i czarny. Za pomocą bitów zakodujemy kolor na obrazku. Ponieważ
mamy tylko dwa różne kolory, wystarczy na to jeden bit:

bit 0 - kolor biały


bit 1 - kolor czarny

Określiliśmy sposób przyporządkowania informacji do bitu - to jakby język naszej nowej mowy
kodującej grafikę czarno-białą. Pozostaje tylko problem, w jaki sposób ta informacja zawarta
w bitach będzie połączona z obrazkiem. Rozwiązanie jest dosyć proste. Obrazek dzielimy na
drobną siateczkę punktów, tzw. raster. W obrębie danego punktu (zwanego pikselem - ang.
pixel = picture element, czyli element obrazowy) kolor jest stały - albo biały, albo czarny.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0002.php 8 / 253
Bit w zastosowaniach - Kodowanie informacji 2014-10-03

Na pewno jest to pewnym oszustwem. Ale jeśli siateczka punktów jest bardzo gęsta, to możemy dać się na nie nabrać - po prostu
nasze oko nie zobaczy poszczególnych punktów, tylko obraz. O to właśnie chodzi. Poniżej ten sam obrazek, ale w "normalnej
wielkości".

Wygląda całkiem miło. Tak otrzymany obrazek zamieniamy na bity: punkty czarne kodujemy bitem o stanie 1, a punkty białe
kodujemy bitem o stanie 0. W postaci bitowej obrazek wygląda tak:

0000111111110000
0011111111111100
0111111111111110
0111111111111110
1100000000000111
1000000000000011
1001111001111001
1000110000110001
1000000000000001
1000000000000001
1000001111000001
1000100000010001
0100011111100010
0100000000000010
0011100000011100
0000011111100000

W takiej formie obrazek może być przechowywany we wnętrzu komputera (pamiętamy oczywiście, iż bity są kodowane w
komputerze poziomami napięć), przesłany przez sieć teleinformatyczną lub przetwarzany przez odpowiednie algorytmy operujące
na bitach. Z postaci bitowej też można bez problemu odzyskać zawartość obrazka. W tym celu wystarczy zbudować urządzenie,
które na ekranie monitora obrazuje siatkę punktów graficznych, czyli raster. Następnie do urządzenia przesyłamy informację w
postaci bitów dla poszczególnych punktów siatki, a ono wyświetla na ekranie odpowiednio punkt biały dla bitu 0 i czarny dla bitu 1.
Tak właśnie działa karta graficzna komputera.
Zadanie kodowania grafiki pozornie się komplikuje, gdy obrazek zawiera więcej kolorów. Załóżmy, iż do narysowania naszej mordki
wykorzystamy cztery kolory:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0002.php 9 / 253
Bit w zastosowaniach - Kodowanie informacji 2014-10-03

Ponieważ teraz każdy piksel obrazka może przyjąć jeden z czterech różnych kolorów, to informacji tej nie zmieścimy w jednym
bicie - potrzebujemy pary bitów. Dwa bity mogą przyjąć cztery różne kombinacje swoich stanów: 00, 01, 10 i 11 tworząc cztery
różne binarne słówka kodowe. Każdemu słowu kodowemu przypiszemy jeden kolor piksela. Określmy takie przypisanie:

- 00
- 01
- 10
- 11

Taki sposób kodowania kolorów nazywa się kodowaniem palety barw. Polega on na tym, iż każdemu kolorowi na obrazku
przypisujemy osobne słowo kodowe. Zdefiniowawszy paletę można już bez problemów przekształcić obrazek w odpowiedni ciąg
bitów:

00000000010101010101010100000000
00000101010101010101010101010000
00010101010101010101010101010100
00010101010101010101010101010100
01011010101010101010101010010101
01101010101010101010101010100101
01101011111111101011111111101001
01101010111110101010111110101001
11101010101010101010101010101011
11101010101010101010101010101011
11101010101011111111101010101011
11101010111010101010101110101011
00111010101111111111111010101100
00111010101010101010101010101100
00001111111010101010101111110000
00000000001111111111110000000000

Odkodowanie obrazka nie nastarcza większych trudności, jeśli znamy paletę kolorów i sposób jej przyporządkowania słowom
kodu. Paleta dwubitowa pozwala na zdefiniowanie czterech kolorów. Paleta 8 bitowa definiuje już 256 kolorów. Paleta 16 bitowa to
65536 barw.

Wniosek: bity nadają się do kodowania grafiki.

Kodowanie tekstów

W tekstach występują litery oraz inne znaki pisarskie. To właśnie one będą informacjami
kodowanymi za pomocą bitów. Dla uproszczenia załóżmy, iż nasze teksty składają tylko z
wielkich liter, cyfr, przecinków, kropek oraz spacji. W ten sposób określimy zbiór informacji do
zakodowania:

{A, B, C, Ć, D, E, Ę, F, G, H, I, J, K, L, Ł, M, N, Ń, O, Ó, P, R, S,
Ś, T, U, W, Y, Z, Ź, Ż,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, przecinek, kropka, spacja}

Wybrany zbiór zawiera 44 różne znaki. Potrzebujemy słówek binarnych o liczbie bitów równej:

n ≥ log244 = 5,4594..., n = 6

6 bitowe słówka binarne dają 26 = 64 różnych kombinacji. My wykorzystamy tylko 44, zatem 20 słów kodowych pozostanie wolne,
bez określonego znaczenia (możemy je w przyszłości wykorzystać na nowe znaki - np. literę X, której chwilowo nie potrzebujemy).
Sam przydział słówek binarnych literkom na etapie projektowania jest zupełnie dowolny (dobrze jednak zastosować tutaj pewien
schemat - w przyszłości może to zaowocować uproszczeniem przy sortowaniu alfabetycznym tekstów) - ważne jest jedynie to,
aby każda literka otrzymała inny kod. W przeciwnym razie skąd byśmy wiedzieli, o którą literkę chodzi?. Możemy to zrobić tak:

ZNAK KOD ZNAK KOD ZNAK KOD ZNAK KOD


A 000000 I 001011 S 010110 2 100001
Ą 000001 J 001100 Ś 010111 3 100010
B 000010 K 001101 T 011000 4 100011
C 000011 L 001110 U 011001 5 100100
Ć 000100 Ł 001111 W 011010 6 100101
D 000101 M 010000 Y 011011 7 100110
E 000110 Ń 010001 Z 011100 8 100111
Ę 000111 O 010010 Ź 011101 9 101000

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0002.php 10 / 253
Bit w zastosowaniach - Kodowanie informacji 2014-10-03

F 001000 Ó 010011 Ż 011110 , 101001


G 001001 P 010100 0 011111 . 101010
H 001010 R 010101 1 100000 spacja 101011

Określiliśmy tzw. kod znakowy (ang. character code). W takiej postaci literki mogą już być przetwarzane przez komputery. Dla
przykładu zakodujmy w tym systemie jakieś zdanie:

M I Ś U S Z A T E K
010000 001011 010111 101011 011001 010110 011100 000000 011000 000110 001101

W drugą stronę też nie ma specjalnych problemów. Mamy ciąg bitów:

000000001110000000101011010000000000101011011110010011001111011010001011000000

Ponieważ wiemy, iż literki kodowane są za pomocą słówek 6 bitowych, dzielimy ciąg bitów na takie właśnie słówka:

000000 001110 000000 101011 010000 000000 101011 011110 010011 001111 011010 001011 000000

Każde słówko kodowe zamieniamy na skojarzony z nim znak wg tabeli kodu znakowego. Otrzymujemy czytelną dla nas postać tekstu:

000000 001110 000000 101011 010000 000000 101011 011110 010011 001111 011010 001011 000000

A L A M A Ż Ó Ł W I A
Wniosek: bity nadają się do kodowania znaków.

Kodowanie liczb
Teraz pokażemy sposób przedstawiania liczb naturalnych za pomocą bitów. Wyobraźmy sobie,
iż żyjemy w takim dziwnym kraju (no, może tak bardzo tego nie musimy sobie wyobrażać,
wystarczy się rozglądnąć), w którym wszystkie monety mają nominały równe potęgom liczby 2:

Nominał Potęga 2
1 20
2 21
4 22
8 23
16 24
32 25
64 26
... ...

Załóżmy, iż w tym dziwnym kraju wyszło zarządzenie, które głosi, iż wszystkie kwoty należy wypłacać najmniejszą możliwą
liczbą monet. Za nieprzestrzeganie tego zarządzenia rząd nałożył olbrzymią karę 264. Cóż, nikt tyle pieniążków nie miał, zatem
wszyscy rozpoczęli skrupulatne odmierzanie sum pieniężnych.
Z sumami będącymi potęgami liczby 2 nie ma problemu - wystarczy jedna moneta o właściwym nominale. Pozostałe sumy
wyliczamy następująco:
Trzeba wypłacić 157. Aby monet było jak najmniej, każda o właściwym nominale powinna wystąpić co najwyżej raz. Ano
zobaczmy:

Pierwszą monetą może być 128 (256 byłoby za duże, a 64 musielibyśmy użyć dwukrotnie). Zatem płacimy 128.
Pozostaje wciąż:
157 - 128 = 29
Najbliższą monetą będzie 16. Płacimy 16. Pozostaje:
29 - 16 = 13
Teraz płacimy 8. Pozostaje:
13 - 8 = 5
Płacimy 4. Pozostaje:
5-4=1
I na koniec wypłacamy 1. Podsumujmy:
157 = 128 + 16 + 8 + 4 + 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0002.php 11 / 253
Bit w zastosowaniach - Kodowanie informacji 2014-10-03

No dobrze, powiesz. Co to ma jednak wspólnego z bitami? A ma. Zwróć uwagę, iż przy wypłacie sumy podejmujemy dla
poszczególnych nominałów monet jedną z decyzji:

Wypłacić daną monetę - 1


Nie wypłacać monety - 0

A to są przecież nasze kochane bity. Ułóżmy monety kolejno z prawa na lewo od najmniejszej do największej. Otrzymamy
następujący ciąg nominałów:

Nominał ... 1024 512 256 128 64 32 16 8 4 2 1


Potęga 2 ... 210 29 28 27 26 25 24 23 22 21 20

Teraz pod tak wypisanymi nominałami zapisujemy dla danej sumy pieniężnej wypłaconą liczbę monet danego nominału:

Nominał ... 1024 512 256 128 64 32 16 8 4 2 1


Potęga 2 ... 210 29 28 27 26 25 24 23 22 21 20
157 = 0 0 0 1 0 0 1 1 1 0 1

Ponieważ dana moneta może wystąpić co najwyżej raz, to pod nominałami zapisujemy tylko cyfry 0 lub 1. Jeśli cyfry potraktujemy
teraz jako bity, otrzymamy zapis binarny danej liczby dziesiętnej:

157(10) = ...00010011101(2)

W zapisie tym bit o stanie 1 ma wartość odpowiadającej mu potęgi liczby 2. Bit o stanie 0 ma wartość 0. Aby obliczyć wartość
całej liczby binarnej wystarczy zatem zsumować wartości bitów o stanie 1.
Oto inny przykład:
W dziwnym kraju na czeku bankier wypisał sumę pieniężną zaznaczając liczbę monet o kolejnych nominałach, które
należy wypłacić klientowi banku. Zrobił to tak:

1011101101
Jaką sumę należy wypłacić? My już wiemy. Skoro poszczególne cyfry oznaczają liczbę monet o danym nominale,
zapisujemy to tak:

Nominał 512 256 128 64 32 16 8 4 2 1


Potęga 2 29 28 27 26 25 24 23 22 21 20
SUMA = 1 0 1 1 1 0 1 1 0 1

Teraz sumujemy nominały wypłaconych monet i otrzymujemy:

512 + 128 + 64 + 32 + 8 + 4 + 1 = 749

Proste? Jeśli nie, to przeczytaj to kolejny raz, aż zrozumiesz.


Formalnie rzecz biorąc, jeśli mamy n bitową liczbę binarną:

bn-1 bn-2 ... b2 b1 b0, gdzie bi = 0 lub 1, dla i = 0,1,2,...,n-1

to jej wartość dziesiętną obliczamy zgodnie z poniższym wzorem (więcej na ten temat szukaj w rozdziale o liczbach):

wartość = bn-12n-1 + bn-22n-2 + ... + b222 + b121 + b020

Wniosek: bity nadają się do kodowania liczb.

Podsumowanie
W rozdziale pokazaliśmy trzy sposoby kodowania informacji za pomocą bitów:
Kodowanie grafiki
Kodowanie tekstu
Kodowanie liczb

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0002.php 12 / 253
Bit w zastosowaniach - Kodowanie informacji 2014-10-03

Bity dają nieograniczone możliwości kodowania informacji. Jeśli tylko znajdziemy zbiór wiadomości, które chcemy zakodować, a
następnie określimy sposoby przypisania tym wiadomościom słówek bitowych, będziemy mogli zakodować je za pomocą bitów i
przetwarzać na komputerach. Dlatego bity są tak potężnym narzędziem w rękach informatyków.

Zapamiętaj:
Bity w świecie komputerów nie ograniczają się jedynie do kodowania różnych informacji - cała
współczesna informatyka oraz technologia komputerowa jest na nich oparta. Komputery są
maszynami bitowymi nie tylko w sensie przetwarzania danych, ale również w sensie swojej budowy
- procesory, pamięci, porty wejścia/wyjścia - wszystkie te elementy mają budowę binarną. Dalsze
rozdziały leksykonu opisują elementy logiczne, z których buduje się układy cyfrowe. Bity są
podstawą funkcjonowania tych elementów. Zatem nie bez powodu komputery nazywamy binarnymi
maszynami cyfrowymi.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0002.php 13 / 253
Bit w zastosowaniach - Algebra Boole'a 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Algebra Boole'a
Czym jest bit i po co jest on nam potrzebny
Kodowanie informacji za pomocą bitów
Kod Gray'a
Minimalizacja funkcji logicznych
Logika w C++
Operacje bitowe w C++

George Boole (ur. 2 XI 1815 r., zm. 8 XII 1864 r.) był matematykiem angielskim, którego uważa się za jednego
z twórców dzisiejszej technologii komputerowej. Najważniejszym wynalazkiem Boole'a było opracowanie
zasad wykonywania operacji logicznych - w ten sposób powstała tzw. Algebra Boole'a. Przed Boole'm
logika była dziedziną zagmatwaną i trudną w zastosowaniach. Po nim stała się łatwa i przejrzysta.
W Algebrze Boole'a mamy do czynienia z danymi binarnymi. Dana może przyjąć tylko jedną z dwóch
możliwych wartości:
prawda - true - 1
fałsz - false - 0

Z tego powodu danymi mogą być bity. Nad danymi można wykonywać operacje logiczne (podobnie jak
w zwykłej algebrze nad liczbami można wykonywać operacje arytmetyczne). Podstawowych operacji
logicznych mamy dokładnie trzy:

George Boole
Notacja
Nazwa operacji logicznej w w w technice
logice C++ cyfrowej
Negacja / zaprzeczenie / NIE / NOT !a a
Alternatywa / suma logiczna / LUB / OR a || b a+b
Koniunkcja / iloczyn logiczny / I / AND a && b ab

W powyższej tabelce zebraliśmy również różne sposoby zapisu operacji logicznych. W tym rozdziale będziemy się posługiwali
oznaczeniami stosowanymi w logice. Jednakże w dalszych rozdziałach wykorzystamy również notację dla języka C++ oraz
notację dla techniki cyfrowej przy projektowaniu sieci logicznych.

Negacja - zaprzeczenie - NIE - NOT


Jest to operacja jednoargumentowa. Wynikiem negacji jest wartość odwrotna, przeciwna do wartości argumentu. Zatem jeśli
argument miał wartość 0, to negacja daje w wyniku 1 i na odwrót - z 1 otrzymujemy 0. Wartości funkcji logicznych w zależności od
ich argumentów podaje się zwykle w tabelkach. My też skorzystamy z tego prostego sposobu:

0 1
1 0

Alternatywa - suma logiczna - LUB - OR


Alternatywa jest operacją dwuargumentową. Wynikiem jest 1 (true, prawda), jeśli chociaż jeden z argumentów ma wartość 1.
Jeśli oba argumenty mają wartość 0, alternatywa też ma wartość 0.

0 0 0
0 1 1
1 0 1
1 1 1

Operację tą często nazywa się sumą logiczną ze względu na jej podobieństwo do sumy arytmetycznej dla liczb naturalnych: suma

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0003.php 14 / 253
Bit w zastosowaniach - Algebra Boole'a 2014-10-03

dwóch liczb jest różna od zera, gdy chociaż jedna z tych liczb jest różna od zera, a równa zero, gdy obie liczby są równe zero.

Koniunkcja - iloczyn logiczny - I - AND


Koniunkcja jest również operacją dwuargumentową. Wynikiem jest 1, jeśli oba argumenty są równe 1. W pozostałych przypadkach
wynikiem jest 0.

0 0 0
0 1 0
1 0 0
1 1 1

Ze względu na podobieństwo do operacji mnożenia arytmetycznego koniunkcję często nazywa się iloczynem logicznym.

Prawa Algebry Boole'a


Łączność (ang. associativity)

oraz

W celu udowodnienia tej własności posłużymy się tabelką prawdy. W tabelce najpierw obliczamy wartość lewego wyrażenia, a
następnie prawego. Jeśli kolumny wyniku dla lewego i prawego wyrażenia są identyczne, własność zostaje udowodniona.

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0
0 1 0 1 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 0
0 1 1 1 1 0 1 1 1 1 0 1 1 1 0 0 1 1 0 0
1 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 0 0
1 0 1 1 1 1 0 1 1 1 1 0 1 0 0 1 0 1 0 0
1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 1 1 0 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Przemienność (ang. commutativity)

oraz

Absorpcja (ang. absorption)

oraz

Rozdzielność (ang. distributivity)

oraz

Odwrotność (ang. complement)

oraz

Prawa pochodne
Z podanych powyżej praw podstawowych algebry Boole'a oraz własności operacji logicznych wynikają następujące prawa
pochodne:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0003.php 15 / 253
Bit w zastosowaniach - Algebra Boole'a 2014-10-03

Różnica symetryczna, suma modulo dwa


W logice bardzo często wykorzystuje się złożoną operację logiczną o nazwie różnicy symetrycznej lub sumy modulo dwa (ang.
exclusive or). Wzór logiczny tej operacji jest następujący:

Chociaż nie jest on specjalnie oczywisty, to operacja różnicy symetrycznej ma bardzo prostą tabelkę stanów:

0 0 0
0 1 1
1 0 1
1 1 0

Wynikiem jest 1, jeśli argumenty operacji się różnią od siebie, a 0, jeśli są takie same.

Prawa De Morgana
August De Morgan (ur. 27 VI 1806 r., zm. 18 III 1871 r.) był urodzonym w Indiach angielskim
matematykiem i logikiem. Wkładem De Morgana do rozwoju matematyki i logiki są prawa odnoszące się
do negacji koniunkcji i negacji alternatywy. Prawa te brzmią następująco:

Negacja alternatywy jest równa koniunkcji negacji.

Negacja koniunkcji jest równa alternatywie negacji.

Z praw De Morgana wynikają bardzo poważne konsekwencje dla logiki. Okazuje się bowiem, iż do wykonania dowolnej operacji
logicznej wystarczy para (negacja, koniunkcja) lub para (negacja, alternatywa). Ma to olbrzymi wpływ na współczesną technikę
cyfrową, o czym możesz się prosto przekonać czytając dalsze artykuły. Prawa De Morgana w prosty sposób udowadniamy przy
pomocy tabelek prawdy.

0 0 0 1 0 0 1 1 1 0 0 0 1 0 0 1 1 1
0 1 1 0 0 1 1 0 0 0 1 0 1 0 1 1 0 1
1 0 1 0 1 0 0 1 0 1 0 0 1 1 0 0 1 1
1 1 1 0 1 1 0 0 0 1 1 1 0 1 1 0 0 0

Teraz pokażemy, jak wykorzystując prawa De Morgana, można zastąpić koniunkcję alternatywą i alternatywę koniunkcją.

W ramach ćwiczeń udowodnij tabelkami prawdy poprawność otrzymanych wyników.


Jeśli w dowolnym wyrażeniu logicznym zastąpimy wszystkie koniunkcje negacjami i alternatywą, to wyrażenie będzie zawierało
tylko dwa działania logiczne - alternatywę i negację. Wynika stąd, iż te dwa działania wystarczą do zapisania dowolnego
wyrażenia logicznego. Zachodzi również sytuacja odwrotna. Zastąpienie alternatywy negacjami i koniunkcją ruguje alternatywy z
wyrażenia. Zatem dowolne wyrażenie logiczne można zapisać tylko przy pomocy negacji i koniunkcji.

Operacje bitowe
Wszystkie operacje logiczne mogą być wykonywane na słówkach bitowych. W takim przypadku w operacji uczestniczą
poszczególne bity na odpowiadających sobie pozycjach w obu słowach. Oto odpowiednie przykłady:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0003.php 16 / 253
Bit w zastosowaniach - Algebra Boole'a 2014-10-03

Negacja
1100 0101
0011 1010
Alternatywa
1010 0011 1101
1100 1100 1011
1110 1111 1111
Koniunkcja
1010 0011 1101
1100 1100 1011
1000 0000 1001
Różnica symetryczna / Suma modulo 2
1010 0011 1101
1100 1100 1011
0110 1111 0110
Zerowanie bitu
Jeśli w słowie binarnym chcemy wyzerować bit (bity) na pozycji i-tej, to wykonujemy operację koniunkcji z maską, której
wszystkie bity są ustawione na 1 za wyjątkiem bitu na pozycji i-tej.

1010110000111110
1111111111110111
1010110000110110
Ustawianie bitu
Jeśli w słowie binarnym chcemy ustawić i-ty bit na 1, to wykonujemy operację alternatywy z maską, której wszystkie bity są
wyzerowane za wyjątkiem bitu na pozycji i-tej.

1010110000111110
0000000100000000
1010110100111110
Negacja bitu
Jeśli chcemy zmienić stan i-tego bitu na przeciwny, wykonujemy operację sumy symetryczne z maską, której wszystkie bity są
wyzerowane za wyjątkiem bitu na pozycji i-tej.

1010110000111110 1010110000111110
0000000100000000 0000000000010000
1010110100111110 1010110000101110
Sprawdzanie stanu bitu
Jeśli chcemy sprawdzić, jaki stan ma bit na pozycji i-tej, to wykonujemy operację koniunkcji z maską, której wszystkie bity są
wyzerowane za wyjątkiem bitu na pozycji i-tej. Jeśli wynik jest różny od 0, to bit i-ty miał stan 1. W przeciwnym wypadku bit i-ty
miał stan 0.

1010110000111110 1010110000111110
0000000100000000 0000000000010000
0000000000000000 0000000000010000

Poniższy program wykorzystuje sprawdzanie stanu bitu do szybkiej konwersji liczby dziesiętnej na binarną - właściwie
wykorzystuje on fakt, iż komputer wewnętrznie przechowuje liczby w postaci binarnej, zatem konwersja została już wykonana przy
zapisie odczytanej wartości do pamięci.

// Liczba binarna
//------------------------------------------
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
unsigned n,m;

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0003.php 17 / 253
Bit w zastosowaniach - Algebra Boole'a 2014-10-03

cout << "Przeliczanie liczby dziesietnej na binarna\n"


"------------------------------------------\n\n"
"liczba = ";
cin >> n;
cout << endl;
for(m = 0x80000000L; m; m >>= 1) cout << ((n & m) ? "1" : "0");
cout << endl << endl;
return 0;
}

Przeliczanie liczby dziesietnej na binarna


------------------------------------------
liczba = 3854219376
11100101101110101011100001110000

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0003.php 18 / 253
Bit w zastosowaniach - Kod Gray'a 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Kod Gray'a
Czym jest bit i po co jest on nam potrzebny
Kodowanie informacji za pomocą bitów
Algebra Boole'a
Minimalizacja funkcji logicznych
Logika w C++
Operacje bitowe w C++

Frank Gray był fizykiem i naukowcem pracującym dla Bell Labs, który wsławił się licznymi wynalazkami w
dziedzinie telewizji mechanicznej i elektronicznej i stał się znany ze względu na Kod Gray'a. Jest to kod
binarny często wykorzystywany w elektronice (przetworniki kątowe) oraz w bardzo wielu zastosowaniach
matematycznych.
Podstawową cechą wyrazów kodu Gray'a jest to, iż każde dwa kolejne wyrazy (również pierwszy i ostatni)
różnią się od siebie stanem tylko jednego bitu.

1 bitowy kod Gray'a :0 1


2 bitowy kod Gray'a :00 01 11 10
3 bitowy kod Gray'a :000 001 011 010 110 111 101 100

Wbrew pozorom konstrukcja n-bitowego kodu Gray'a jest bardzo prosta. Wykorzystujemy rekurencję:
Dla n = 1 kod Gray'a otrzymujemy bezpośrednio {0 1}.
Dla n > 1 załóżmy, iż znamy kod Gray'a (n-1) bitowy {g0 g1 g2 ... gm}, m = 2n - 1. Dodajemy do kolejnych wyrazów znanego
ciągu bit początkowy 0. Otrzymamy połówkę poszukiwanego ciągu n-bitowego:

{0g0 0g1 0g2 ... 0gm }

Drugą połówkę dostaniemy dodając bit początkowy 1 do wyrazów (n-1) bitowego ciągu Gray'a ustawionych w kolejności
odwrotnej:

{1gm ... 1g2 1g1 1g0}

Cały ciąg powstanie po połączeniu tych wyników częściowych w jeden kod:

{0g0 0g1 0g2 ... 0gm 1gm ... 1g2 1g1 1g0}

Obliczmy wg podanego algorytmu 5 bitowy kod Gray'a. Rozpoczynamy od n=1:

n=1 n=2 n=3 n=4 n=5


0000 00000
0001 00001
0011 00011
0010 00010
0110 00110
0111 00111
0101 00101
0 + 1100 00100
0100
000 0000 01100
001 0001 1101 01101
011 0011 1111 01111
0 + 010
0010 1110 01110
00 000 110 0110 1010 01010
0 + 01
001 111 0111 1011 01011
0 + 01 00
11 011 101 0101 1001 01001
0
1 → 01 10 010
10 → 110
100 0100
100 → 1100
1000 01000
1000 → 11000
1 + 10 11
10
1 + 11
01
111
101
101
111
1101
1111
1001
1011
11001
11011
00 100
1 + 110
1110 1010 11010
010 1010 1110 11110
011 1011 1111 11111
001 1001 1101 11101
000 1000 1100 11100
1+

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0004.php 19 / 253
Bit w zastosowaniach - Kod Gray'a 2014-10-03

1 + 0100 10100
0101 10101
0111 10111
0110 10110
0010 10010
0011 10011
0001 10001
0000 10000

Otrzymany kod nosi nazwę kodu refleksyjnego lub kodu Gray'a odzwierciedlonego binarnie (ang. binary reflected Gray
code). Nazwa ta pochodzi z faktu, iż opisany kod Gray'a powstaje w dosyć prosty sposób ze zwykłego kodu dwójkowego. Wyrazy
kodu dwójkowego poddajemy operacji różnicy symetrycznej z ich przesuniętymi o 1 bit w prawo kopiami. Dla przykładu
prześledźmy transformację kodu 3 bitowego.

kod operacja kod


binarny Gray'a
0000
000 000 000
000
0001
001 001 001
001
0010
010 010 011
011
0011
011 011 010
010
0100
100 100 110
110
0101
101 101 111
111
0110
110 110 101
101
0111
111 111 100
100

Jeśli chcemy przekodować słowo kodu Gray'a na odpowiadające mu słowo w naturalnym kodzie binarnym, to ze wzoru

gi - i-ty bit wyrazu kodu Gray'a


bi - i-ty bit wyrazu naturalnego kodu binarnego,

otrzymujemy:

Zatem odtworzenie słowa b kodu binarnego, z którego powstało słowo kodu Gray'a g wymaga, aby poszczególne bity g poddać
operacji z bitami przesuniętego o 1 pozycję w prawo słowa b. Wygląda tragicznie, ponieważ słowa b nie znamy. Nie znamy, bo
nie musimy znać. Wystarczy obliczenia rozpocząć od ostatniego bitu i=n-1. Wtedy bi+1 = bn = 0 dla każdego słowa naturalnego
kodu binarnego! Zatem najstarszy bit mamy właściwie za darmo:

W słowie naturalnego kodu binarnego i w odpowiadającym mu słowie kodu Gray'a zawsze najstarsze bity są sobie równe. Możemy
to zaobserwować na przykładzie wyprowadzonego już 3 bitowego kodu Gray'a:

Naturalny kod binarny 000 001 010 011 100 101 110 111
Kod Gray'a 000 001 011 010 110 111 101 100

Gdy znamy bit bn-1 słówka kodu binarnego, dalsze wyznaczenie bitów jest już dziecinnie proste:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0004.php 20 / 253
Bit w zastosowaniach - Kod Gray'a 2014-10-03

Przykładowe zastosowanie
Kody Gray'a mają zastosowanie w technice pomiarowej do pomiaru kąta obrotu. Dzięki unikalnej
własności zmiany wartości tylko jednego bitu przy przechodzeniu do kolejnych wyrazów kodu
zapobiega się błędnym odczytom na granicy dwóch słów. Aby zrozumieć o co chodzi, wyobraźmy
sobie, iż stworzyliśmy ramię robota, które może odchylać się o pewien kąt. Wartość kąta odczytujemy
z układu pomiarowego wyposażonego w specjalną tarczę kodową oraz układ optyczny odczytujący kod
z tej tarczy. Dla ułatwienia naszych rozważań załóżmy dodatkowo, iż tarcza zawiera tylko kod 3-bitowy
(dla kodów o większej liczbie bitów efekt jest ten sam). Zatem możliwe odczyty położenia, to: 000 → 0,
001 → 1, 010 → 2, 011 → 3, 100 → 4, 101 → 5, 110 → 6 i 111 → 7. Kodom od 0 do 7 odpowiadają
określone kąty obrotu ramienia robota, na przykład:

Kod 000 001 010 011 100 101 110 111


Wartość 0 1 2 3 4 5 6 7
Kąt 0° 5° 10° 15° 20° 25° 30° 35°

Potencjalne błędy mogą się tutaj pojawić na granicy jasnych i ciemnych obszarów. Załóżmy, iż jasny pas odczytujemy jako zero,
a pas czarny jako 1. Na powyższym rysunku tarcza kodowa zwraca zatem kod 010 → 2. Stan ten jest ustabilizowany. Co jednak
się stanie, gdy tarcza zacznie się obracać:

i otrzymamy układ jak powyżej? Z uwagi na nieuchronne niedokładności w układzie mechanicznym oraz parametry obwodów
optycznych może okazać się, iż nie otrzymamy ładnego przejścia kodu 011 → 3 w 100 → 4. Zwróć uwagę, iż na tej granicy
zmieniają się wszystkie bity słówka kodowego. Zatem jeśli układ zareaguje nie jednoczesną zmianą bitów, możemy otrzymać
właściwie wszystkie możliwe wartości zanim koło obróci się na tyle, aby odczyt się ustabilizował. Z tego powodu naturalny kod
binarny nie jest stosowany do tarcz pomiarowych. Lepszym rozwiązaniem będzie kod Gray'a, w którym niepewność może
dotyczyć tylko jednego bitu - albo otrzymamy kod poprzedni, albo kod następny - nie będzie natomiast błędnych odczytów
pośrednich.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0004.php 21 / 253
Bit w zastosowaniach - Kod Gray'a 2014-10-03

Przykładowe programy w języku C++


Pierwszy program generuje kody Gray'a o zadanej liczbie bitów. Wykorzystano w nim rekurencyjny algorytm generacji kodów
Gray'a.

// Generowanie wszystkich wyrazów kodu Graya


// o zadanej liczbie bitów
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <string>
using namespace std;
// W tablicy WyrazyGraya tworzone będą kolejne
// wyrazy kodowe. Tablica ta musi posiadać tyle
// elementów, ile jest wszystkich wyrazów kodu.
unsigned WyrazyGraya[65536];
// Funkcja oblicza potęgę liczby 2
//--------------------------------
unsigned Pot2(unsigned n)
{
unsigned p;
p = 1;
while(n-- > 0) p += p;
return(p);
}
// Rekurencyjna procedura generacji wyrazów kodu Graya
//----------------------------------------------------
void Gray(unsigned n)
{
unsigned i, p;
if(n == 1)
{
WyrazyGraya[0] = 0;
WyrazyGraya[1] = 1;
}
else
{
Gray(n - 1); // wyznaczamy poprzednie wyrazy
p = Pot2(n - 1);
for(i = p; i < p + p; i ++)
WyrazyGraya[i] = p + WyrazyGraya[p + p - i - 1];
};
}
// Procedura wyświetlająca zawartość tablicy WyrazyGraya
//------------------------------------------------------
void Pisz(unsigned n)
{
unsigned i, kg, p, m;
p = Pot2(n);
for(i = 0; i < p; i++)
{
kg = WyrazyGraya[i];
for(m = p >> 1; m > 0; m >>= 1) cout << ((kg & m) ? "1" : "0");
cout << endl;
};
}
int main()
{
unsigned n;
cout << "Generacja kodu Gray'a\n"
"---------------------\n"
"Ile bitow (1..16) ? ";
cin >> n;
cout << endl;
if((n < 1) || (n > 16))
cout << "Niepoprawna liczba bitow n!";
else
{
Gray(n); Pisz(n);
};
return 0;
}

Generacja kodu Gray'a


---------------------
Ile bitow (1..16) ? 3
000

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0004.php 22 / 253
Bit w zastosowaniach - Kod Gray'a 2014-10-03

000
001
011
010
110
111
101
100

Drugi program również generuje kod Gray'a o zadanej liczbie bitów. Zamiast rekurencji wykorzystuje on proste przekształcenie
naturalnego kodu binarnego w kod Gray'a za pomocą operacji sumy symetrycznej. Przy takim podejściu procedura generacji
kolejnych wyrazów zostaje znacząco uproszczona.

// Generowanie wszystkich wyrazów kodu Graya


// o zadanej liczbie bitów
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <string>
using namespace std;
// W tablicy WyrazyGraya tworzone będą kolejne
// wyrazy kodowe. Tablica ta musi posiadać tyle
// elementów, ile jest wszystkich wyrazów kodu.
unsigned WyrazyGraya[65536];
// Funkcja oblicza potęgę liczby 2
//--------------------------------
unsigned Pot2(unsigned n)
{
unsigned p;
p = 1;
while(n-- > 0) p += p;
return(p);
}
// Procedura generacji wyrazów kodu Graya
//---------------------------------------
void Gray(unsigned n)
{
unsigned i, p;
p = Pot2(n);
for(i = 0; i < p; i++) WyrazyGraya[i] = i ^ (i >> 1);
}
// Procedura wyświetlająca zawartość tablicy WyrazyGraya
//------------------------------------------------------
void Pisz(unsigned n)
{
unsigned i, kg, p, m;
p = Pot2(n);
for(i = 0; i < p; i++)
{
kg = WyrazyGraya[i];
for(m = p >> 1; m > 0; m >>= 1) cout << ((kg & m) ? "1" : "0");
cout << endl;
};
}
int main()
{
unsigned n;
cout << "Generacja kodu Gray'a\n"
"---------------------\n"
"Ile bitow (1..16) ? ";
cin >> n;
cout << endl;
if((n < 1) || (n > 16))
cout << "Niepoprawna liczba bitow n!";
else
{
Gray(n); Pisz(n);
};
return 0;
}

Trzeci program odczytuje słowo kodu Gray'a i wyznacza odpowiadające mu słowo kodu binarnego.

// Konwersja z kodu Gray'a na kod NBC

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0004.php 23 / 253
Bit w zastosowaniach - Kod Gray'a 2014-10-03

// (C)2006 mgr Jerzy Wałaszek


// I LO w Tarnowie
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cout << "Konwersja z kodu Gray'a na kod NBC\n"
"----------------------------------\n\n"
"Slowo kodu Gray'a = ";
cin >> s;
cout << endl;
for(int i = 1; i < s.length(); i++) s[i] = ((int)s[i] ^ (int)s[i-1] | 48);
cout << s << "\n\nNacisnij klawisz Enter.\n";
return 0;
}

Konwersja z kodu Gray'a na kod NBC


----------------------------------
Slowo kodu Gray'a = 11111100001
10101000001
Nacisnij klawisz Enter.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0004.php 24 / 253
Bit w zastosowaniach - Minimalizacja funkcji logicznych 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Minimalizacja funkcji logicznych
Czym jest bit i po co jest on nam potrzebny
Kodowanie informacji za pomocą bitów
Algebra Boole'a
Kod Gray'a
Logika w C++
Operacje bitowe w C++

Minimalizacja funkcji logicznych polega na upraszczaniu wyrażeń logicznych, tak aby zawierały jak
najmniejszą liczbę tylko niezbędnych argumentów oraz operacji logicznych. Zadanie to ma podstawowe
znaczenie dla techniki cyfrowej, gdzie funkcje urządzenia realizowane są za pomocą tzw. bramek logicznych
(układów wykonujących podstawowe operacje logiczne). Jest chyba jasne, iż prostsze wyrażenie oznacza
mniejszą złożoność układu elektronicznego, a co za tym idzie mniejszy koszt wykonania (szczególnie w
dużych seriach i nie na potrzeby wojska), większą niezawodność (mniej elementów, które mogą przestać
działać) oraz zwykle szybsze działanie (mniej uzależnień powoduje szybszą stabilizację sieci logicznej).
Zadanie minimalizacji można wykonać na kilka sposobów. Jednym z nich jest zastosowanie Algebry Boole'a
do wykonania odpowiednich przekształceń i redukcji.
Zadanie jest następujące: zaprojektować minimalną funkcję logiczną zadaną poniższą tabelką stanów:

a b c f(a,b,c)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 0

Funkcja przyjmuje wartość 1 dla a,b,c = 010, 011, 100 i 101. Tworzymy odpowiednie wyrażenie logiczne wykorzystując
alternatywę, koniunkcję i negację:

Upraszczamy wyrażenie wykorzystując rozdzielność:

wykorzystując:

otrzymujemy:

Dzięki przekształceniom udało nam się sprowadzić początkowe wyrażenie:

do wyrażenia:

Wyrażenie końcowe jest dużo prostsze i nie zawiera argumentu c (mówimy, iż wartość funkcji nie zależy od tego argumentu).
Dokonaliśmy minimalizacji funkcji. Taki sposób postępowania jest oczywiście poprawny, jednakże wymaga przeprowadzania
uciążliwych transformacji logicznych. Na szczęście istnieje prostszy sposób zwany metodą map Karnaugha.

Mapy Karnaugha
Mapy Karnaugha zostały wynalezione w roku 1953 przez Maurice'a Karnaugha, który był inżynierem telekomunikacyjnym w
Bell Labs. Można je stosować do rozwiązywania problemów logicznych zawierających do 6 zmiennych. Pokażemy konstrukcję
krok po kroku mapy Karnaugha oraz sposoby jej wykorzystania do minimalizacji funkcji logicznych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0005.php 25 / 253
Bit w zastosowaniach - Minimalizacja funkcji logicznych 2014-10-03

Na początek rozważymy problem złożony z dwóch zmiennych. Funkcję logiczną f(a,b) zadajemy najczęściej tabelką wartości
(tabelka ta wynika z potrzeb użycia danej funkcji - stąd określamy wymagane wartości funkcji dla poszczególnych argumentów).

a b f(a,b)
0 0 1
0 1 1
1 0 1
1 1 0

Argumenty funkcji dzielimy na dwie grupy - będą służyły jako współrzędne elementów mapy Karnaugha. Ponieważ są tylko dwa
argumenty a i b, to w jednej grupie będzie argument a, a w drugiej będzie argument b:

Współrzędne wyznaczają prostokątne obszary (zaznaczone na żółto). W obszarach tych umieszczamy wartości minimalizowanej
funkcji. Otrzymujemy poniższą mapę Karnaugha:

Teraz na mapie Karnougha grupujemy razem ze sobą obszary zawierające wartość funkcji równą 1. Grupowany obszar musi mieć
rozmiary (ilość objętych kolumn i wierszy mapy) będące potęgami liczby dwa, zatem powinien obejmować 1, 2, 4 itd kolumny lub
wiersze. Zawsze staramy się zaznaczyć obszary maksymalne. W naszym przypadku na mapie można zaznaczyć dwa obszary A
i B:

W obszarze A argument b zmienia się z 0 na 1. Skoro tak, to nie ma on wpływu na wartość funkcji f(a,b) w tym obszarze. Zatem
dla obszaru A mamy:

Argument a musi być zanegowany, ponieważ obszar A leży w części mapy, dla której współrzędna a = 0.
W obszarze B jest odwrotnie - zmienia się argument a z 0 na 1. Zatem argument a nie ma wpływu na wartość funkcji w B. Wpływ
ma jedynie argument b.

Ponieważ obszary A i B pokrywają wszystkie wartości 1, zatem:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0005.php 26 / 253
Bit w zastosowaniach - Minimalizacja funkcji logicznych 2014-10-03

Teraz bardziej skomplikowany przykład (z początku artykułu). Funkcja trójargumentowa zadana tabelką:

a b c f(a,b,c)
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 0

Rozdzielamy argumenty na dwie grupy: ab oraz c (można również rozdzielić na a i bc - zmieni się tylko orientacja mapy z
pionowej na poziomą). Współrzędne na mapie Karnaugha są zawsze zapisywane w kodzie Graya.

W pola mapy wstawiamy wartości funkcji zgodnie z tabelką i otrzymujemy mapę Karnaugha:

Na mapie zaznaczamy obszary o wartości funkcji równej 1. Tutaj są tylko dwa takie obszary A i B:

Dla każdego obszaru uwzględniamy tylko te współrzędne, które w obszarze się nie zmieniają - w obu przypadkach rugujemy c,
ponieważ zmienia się z 0 na 1.

i ostatecznie:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0005.php 27 / 253
Bit w zastosowaniach - Minimalizacja funkcji logicznych 2014-10-03

Doszliśmy do identycznych rezultatów jak na początku rozdziału. Tylko tutaj nie musieliśmy wykonywać żadnych przekształceń
logicznych. To wielka zaleta map Karnaugha - funkcję otrzymujemy już w postaci zminimalizowanej.
Mamy funkcję czteroargumentową f(a,b,c,d) zadaną gotową mapą Karnaugha. Dokonać minimalizacji tej funkcji:

Cztery narożne obszary można połączyć w jeden obszar poprzez naprzeciwległe krawędzie - mapa Karnaugha łączy się na
krawędziach - warto o tym fakcie pamiętać.

Obszar A jest zależny tylko od parametrów b i d, ponieważ nie zmieniają one swoich wartości w tym obszarze. Obszar B jest
również zależny od tych samych parametrów:

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0005.php 28 / 253
Bit w zastosowaniach - Minimalizacja funkcji logicznych 2014-10-03

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0005.php 29 / 253
Bit w zastosowaniach - Logika w języku C++ 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Logika w języku C++
Czym jest bit i po co jest on nam potrzebny
Kodowanie informacji za pomocą bitów
Algebra Boole'a
Kod Gray'a
Minimalizacja funkcji logicznych
Operacje bitowe w C++

W języku C++ istnieją dwie wartości logiczne:

false - fałsz
true - prawda

Są to predefiniowane stałe, którymi możemy się posługiwać w wyrażeniach logicznych:

false = 0
true = 1

Przez wyrażenie logiczne rozumiemy wyrażenie, które jest albo prawdziwe (sprowadza się do wartości true lub jest różne od zera)
albo fałszywe (sprowadza się do wartości false lub do zera). Na przykład wyrażenie: a > 10 jest typowym wyrażeniem logicznym.
Wartość logiczna (true lub false) tego wrażenia zależy od bieżącej zawartości zmiennej a. Jeśli a faktycznie zawiera wartość
większą od 10, to wyrażenie ma wartość logiczną true (1). W przeciwnym razie wartość logiczna wyrażenia to false (0). Poniższy
przykład programowy obrazuje te zależności:

// Wartości logiczne
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
int a;
a = 25; cout << (a > 10) << endl;
a = 5; cout << (a > 10) << endl;
return 0;
}

Wynika z tego, iż w języku C++ wartości logiczne są traktowane jak liczby. Takie podejście znacznie ułatwia programowanie.
Umówmy się na przyszłość, iż wyrażenie jest prawdziwe, jeśli ma wartość różną od zera i fałszywe w przypadku przeciwnym.
Wyrażenia logiczne powstają często przy pomocy operatorów porównań:

operator opis przykład


< mniejszy niż a < 10
<= mniejszy lub równy a <= 10
== równy a == 10
!= różny a != 10
>= większy lub równy a >= 10
> większy niż a > 10

Logika w języku C++ ściśle opiera się na Algebrze Boole'a. Poniżej przedstawiamy dostępne w C++ operatory logiczne
odpowiadające bezpośrednio funkcjom logicznym Algebry Boole'a:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0006.php 30 / 253
Bit w zastosowaniach - Logika w języku C++ 2014-10-03

operator opis przykład opis


! negacja !(a < 10) prawdziwe, gdy a >= 10
|| alternatywa (a == 1) || (a == 2) prawdziwe, gdy a=1 lub a=2
&& koniunkcja (a >= 1) && (a <=2) prawdziwe, gdy a należy do przedziału <1,2>

Tabelki tych operatorów są następujące:

negacja alternatywa koniunkcja


a !a a b a || b a b a && b
false true false false false false false false
true false false true true false true false
true false true true false false
true true true true true true

Przy obliczaniu wartości wyrażenia logicznego w języku C++ obowiązuje tzw. zasada zwarcia (ang. boolean short circuit). Polega
ona na tym, iż wyrażenie jest obliczane tylko do momentu, gdy znana jest już jego wartość końcowa. Ma to głęboki sens. Na
przykład:

(i < 10) && (a[i] == 12)

W tym wyrażeniu pierwszy człon (i < 10) sprawdza zapewne wartość indeksu tablicy. Być może tablica a[] posiada tylko 10
elementów a[0], a[1], ..., a[9]. Jeśli pierwsze wyrażenie jest fałszywe (czyli indeks wskazuje element nie należący do tablicy), to
bez względu na wartość drugiego wyrażenia wynik jest również fałszywy (porównaj tabelkę dla && z pierwszym argumentem
równym false). Zatem nie ma sensu wyznaczać wartości drugiego członu (a[i] == 12). Dlatego to wyrażenie nie będzie już
wyznaczane (z drugiej strony nie ma ono nawet sensu, skoro i indeksuje poza tablicę) - nastąpi "zwarcie" po wyliczeniu
pierwszego wyrażenia.

Zastosowanie wyrażeń logicznych


W języku C++ wyrażenia logiczne można stosować w następujących sytuacjach:

wyrażenie logiczne ? wartość1 : wartość2


Operator ? wylicza wartość wyrażenia logicznego. Jeśli jest ono prawdziwe, to wynikiem całości jest wartość1. W przeciwnym
razie wynikiem jest wartość2. Na przykład wyrażenie:

((a > 5) && (a < 10)) ? a : -a

daje w wyniku a, jeśli a wpada w przedział otwarty (5,10) i -a w przypadku przeciwnym. Oto proste aplikacje operatora ?:

wyrażenie opis
(a > b) ? a : b większa z dwóch liczb a i b
(a < b) ? a : b mniejsza z dwóch liczb
(a > 0) ? a : -a wartość bezwzględna z a

if(wyrażenie logiczne) instrukcja1; else instrukcja2;


Instrukcja if (jeśli) jest tzw. instrukcją warunkową, która umożliwia tworzenie rozgałęzień w programie. Dzięki niej komputer może
podejmować decyzje, a zatem postępować inteligentnie i dopasowywać swoje działania do aktualnej sytuacji. Instrukcja if jako
argument przyjmuje wyrażenie logiczne. Jeśli wyrażenie to ma wartość prawdy (true lub większą od zera), to wykonana zostanie
instrukcja1. Jeśli wyrażenie jest fałszywe (ma wartość false lub jest równe zeru), to wykonana zostanie instrukcja2. Zatem w
zależności od wyniku wyrażenia logicznego wykonujemy różne instrukcje.
Człon else można pominąć - wtedy instrukcja1 będzie wykonywana warunkowo, gdy wyrażenie logiczne będzie prawdziwe.:

if(wyrażenie logiczne) instrukcja1

Poniższy program wczytuje trzy liczby a,b i c i wyznacza największą z nich.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0006.php 31 / 253
Bit w zastosowaniach - Logika w języku C++ 2014-10-03

// max(a,b,c)
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
int a,b,c,max;
cin >> a >> b >> c;
max = a;
if(b > max) max = b;
if(c > max) max = c;
cout << max << endl;
return 0;
}

Jeśli zamiast pojedynczej instrukcji chcemy wykonać więcej różnych operacji, to zastępujemy ją tzw. instrukcją złożoną, czyli
grupą instrukcji ujętych w klamry:

if(wyrażenie logiczne)
{
instrukcja1;
instrukcja2;
...
instrukcjan;
}
else
{
...
}

Zwróć uwagę, iż po klamerce zamykającej w instrukcji złożonej nie stosuje się już średnika.

while(wyrażenie logiczne) instrukcja;


Instrukcja while służy do tworzenia tzw. pętli warunkowych. Pętla jest to powtarzanie wybranej instrukcji (lub grupy instrukcji)
w programie. Jeśli powtarzanie jest uzależnione od jakiegoś warunku, mamy do czynienia z pętlą warunkową. Instrukcja while
wylicza wyrażenie logiczne. Jeśli jest ono prawdziwe, to wykonywana jest instrukcja (jeśli instrukcji ma być wykonane więcej
niż jedna, to należy zastosować instrukcję złożoną, czyli klamerki). Po wykonaniu instrukcji znów następuje wyliczenie wartości
wyrażenia logicznego i jeśli jest prawdziwe, ponowne wykonanie instrukcji. Całość się powtarza dotąd, aż w końcu warunek
przestanie być prawdziwy. Wtedy pętla jest przerywana i program przechodzi do wykonania następnej instrukcji poza pętlą.
Poniższy program odczytuje ze standardowego wejścia liczbę, a następnie wyświetla jej kolejne potęgi aż do momentu, gdy
przekroczą one wartość 1000.

// Pętla while
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
int a,p;
cin >> a;
p = a;
while(p <= 1000)
{
cout << p << endl;
p *= a;
}
cout << p << endl;
return 0;
}

Zwróć uwagę, iż pętla while może nie wykonać się ani jeden raz, jeśli wyrażenie logiczne jest już na samym początku fałszywe.
Jest to konsekwencja faktu, iż wartość wyrażenia logicznego sprawdzana jest przed wykonaniem obiegu pętli.

do instrukcja; while(wyrażenie logiczne);


Instrukcja do...while jest odmianą pętli warunkowej. Instrukcja zawarta w pętli powtarzana jest, jeśli wyrażenie logiczne jest

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0006.php 32 / 253
Bit w zastosowaniach - Logika w języku C++ 2014-10-03

prawdziwe. Jednakże w tym przypadku warunek kontynuacji pętli sprawdzany jest na końcu, po wykonaniu obiegu. Zatem
instrukcja zawsze będzie wykonana przynajmniej jeden raz. Czasami taka opcja jest bardzo pożądana.
Powyższy program w wersji do...while znacznie się upraszcza:

// Pętla do...while
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
int a,p;
cin >> a;
p = 1;
do
{
p *= a;
cout << p << endl;
} while(p <= 1000);
return 0;
}

for(instrukcja1; wyrażenie logiczne; instrukcja2) instrukcja3;


Instrukcja for jest ogólną instrukcją pętli warunkowej. Skupia ona w jednym miejscu wszystkie elementy sterujące pętlą:

instrukcja1 jest tzw. instrukcją inicjalizacyjną, która ma za zadanie przygotowanie pętli


wyrażenie logiczne steruje kontynuacją pętli. Pętla będzie wykonywana, jeśli wyrażenie to jest prawdziwe.
instrukcja2 jest instrukcją wykonywaną na samym końcu pętli. Umożliwia ona przygotowanie zakończenia danego obiegu.
instrukcja3 jest instrukcją powtarzaną w pętli.

Całość for(instrukcja1; wyrażenie logiczne; instrukcja2) instrukcja3; tłumaczone jest przez kompilator na następującą sekwencję
poleceń języka C++:
instrukcja1; // przygotowanie pętli
while(wyrażenie logiczne) // pętla warunkowa
{
instrukcja3; // powtarzana instrukcja
instrukcja2; // przygotowanie zakończenia danego obiegu
}
Poniżej nasz program wyliczający kolejne potęgi wprowadzonej liczby aż do momentu, gdy przekroczą 1000.

// pętla warunkowa for


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
int a,p;
cin >> a;
for(p = 1; p <= 1000; p *= a) cout << p << endl;
cout << p << endl;
return 0;
}

Instrukcja for służy najczęściej do tworzenia tzw. pętli iteracyjnych. Termin iteracja oznacza kolejne zliczanie. Pętla iteracyjna
to pętla, w której kolejne obiegi są zliczane, czyli po prostu posiadają swoje numery. Do zliczania obiegów potrzebujemy
zmiennej licznikowej. Poniższy program wykorzystuje instrukcję for do utworzenia pętli iteracyjnej, która wykonuje obiegi o
numerach od 1 do 9. Numery kolejnych obiegów są wypisywane na standardowym wyjściu.

// pętla iteracyjna for


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0006.php 33 / 253
Bit w zastosowaniach - Logika w języku C++ 2014-10-03

int main()
{
for(int i = 1; i <= 9; i++) cout << i << endl;
return 0;
}

Zmienne logiczne
Wartości logiczne można w języku C++ przechowywać w zmiennych logicznych, które deklarujemy na podstawie typu bool:

...
bool a,b,c;
...

Zmienna logiczna może przechowywać wartości true lub false. W pamięci komputera zajmuje 1 bajt (8 bitów). Poniższy program
sprawdza rozmiar typu bool na twoim komputerze. Wynik jest podawany w bajtach.

// rozmiar typu logicznego


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
cout << sizeof(bool) << endl;
return 0;
}

Poniższy program demonstruje przykładowe użycie zmiennej logicznej. Sprawdza on, czy liczba 10 występuje nieparzystą liczbę
razy w ciągu 400 liczb pseudolosowych z zakresu od 0 do 10. Jeśli tak, wypisuje napis "10 nieparzyste".

// Zmienna logiczna
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
int main()
{
bool t;
srand(time(NULL));
t = false;
for(int i = 0; i < 400; i++)
{
int x = rand() % 11;
if(x == 10) t = !t;
cout << setw(4) << x;
}
cout << endl;
if(t) cout << "10 nieparzyste\n\n";
return 0;
}

Uwaga. Jeśli sprawdzamy zawartość zmiennej logicznej, to nie musimy jej przyrównywać do false lub true, co często robią
uczniowie:

zamiast powinno być


if(t == true) ... if(t) ...
if(t == false) ... if(!t) ...

Jeśli wykorzystujemy operację logiczną do modyfikacji zmiennej, to możemy zastosować tzw. formy skrócone operacji
przypisania:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0006.php 34 / 253
Bit w zastosowaniach - Logika w języku C++ 2014-10-03

zamiast stosuje się


a = a || b; a ||= b;
a = a && b; a &&= b;

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0006.php 35 / 253
Bit w zastosowaniach - Operacje bitowe w języku C++ 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Pojęcie bitu
Operacje bitowe w C++
Czym jest bit i po co jest on nam potrzebny
Kodowanie informacji za pomocą bitów
Algebra Boole'a
Kod Gray'a
Minimalizacja funkcji logicznych
Logika w C++

W operacjach bitowych biorą udział słówka binarne. Operacje wykonywane są na odpowiadających sobie bitach tych słówek. W
języku C++ mamy następujące operacje bitowe:
~ negacja
Operator ~ zmienia wszystkie bity argumentu na przeciwne, czyli wykonuje operację negacji bitów:

~0110 = 1001

// negacja bitów
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void itob(unsigned a)
{
for(unsigned m = 8; m > 0; m >>= 1) cout << ((a & m) ? "1" : "0");
}
int main()
{
srand(time(NULL));
unsigned x = rand() % 16;
cout << "~";
itob(x);
cout << " = ";
itob(~x); // tutaj dokonujemy negacji bitów
cout << endl;
return 0;
}

| alternatywa
Operator | wykonuje operację alternatywy nad odpowiadającymi sobie bitami argumentów.

0101 | 0011 = 0111

// alternatywa bitów
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void itob(unsigned a)
{
for(unsigned m = 8; m > 0; m >>= 1) cout << ((a & m) ? "1" : "0");
}
int main()
{

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0007.php 36 / 253
Bit w zastosowaniach - Operacje bitowe w języku C++ 2014-10-03

srand(time(NULL));
unsigned x = rand() % 16;
unsigned y = rand() % 16;
itob(x);
cout << " | ";
itob(y);
cout << " = ";
itob(x | y); // tutaj dokonujemy alternatywy bitów
cout << endl;
return 0;
}

& koniunkcja
Operator & wykonuje operację koniunkcji nad odpowiadającymi sobie bitami argumentów.

0110 & 1011 = 0010

// koniunkcja bitów
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void itob(unsigned a)
{
for(unsigned m = 8; m > 0; m >>= 1) cout << ((a & m) ? "1" : "0");
}
int main()
{
srand(time(NULL));
unsigned x = rand() % 16;
unsigned y = rand() % 16;
itob(x);
cout << " | ";
itob(y);
cout << " = ";
itob(x & y); // tutaj dokonujemy koniunkcji bitów
cout << endl;
return 0;
}

^ różnica symetryczna / suma modulo 2


Operator wykonuje operację sumy modulo 2 nad odpowiadającymi sobie bitami argumentów.

0111 ^ 1001 = 1110

// suma modulo 2 bitów


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void itob(unsigned a)
{
for(unsigned m = 8; m > 0; m >>= 1) cout << ((a & m) ? "1" : "0");
}
int main()
{
srand(time(NULL));
unsigned x = rand() % 16;
unsigned y = rand() % 16;
itob(x);
cout << " | ";
itob(y);
cout << " = ";
itob(x ^ y); // tutaj dokonujemy sumy symetrycznej bitów
cout << endl;
return 0;
}

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0007.php 37 / 253
Bit w zastosowaniach - Operacje bitowe w języku C++ 2014-10-03

Tabelki opisanych powyżej operacji bitowych są następujące:

negacja alternatywa koniunkcja suma modulo 2


a ~a a b a |b a b a &b a b a^b
0 1 0 0 0 0 0 0 0 0 0
1 0 0 1 1 0 1 0 0 1 1
1 0 1 1 0 0 1 0 1
1 1 1 1 1 1 1 1 0

Uwaga:
W języku C++ istnieją dwie formy operatorów:
logiczne (ang. logical) !, || i &&, które traktują swoje argumenty jako wyrażenia logiczne przyjmujące
wartości true lub false. Wynikiem jest zawsze wartość logiczna true lub false.
bitowe (ang. bitwise) ~, |, & i ^, które traktują swoje argumenty jako słówka binarne i przeprowadzają
operację logiczną na odpowiadających sobie bitach w tych słówkach. Wynikiem jest zawsze słówko
binarne z bitami ustawionymi zgodnie z definicją danej operacji logicznej.

<<, >> przesunięcia bitowe


Operator >> przesuwa bity lewego argumentu o zadaną prawym argumentem ilość pozycji w prawo. Na przykład:

00111100 >> 2 = 00001111


10000000 >> 3 = 00010000

Bity, które wyjdą poza skrajną prawą pozycję są tracone. Przesunięcie bitów w prawo o 1 pozycję jest równoważne
dzieleniu przez dwa. Przesunięcie o n pozycji w prawo jest równoważne dzieleniu przez 2n. Operacje przesuwu są
bardzo szybkie - o wiele szybsze od dzielenia. Jeśli nasz algorytm dużo dzieli przez 2 (lub potęgę 2), to warto się
zastanowić, czy zamiast dzielenia, nie lepsza byłaby operacja przesuwu bitów w prawo. Operacja ta jest jednak
ograniczona tylko do liczb całkowitych, natomiast operacja dzielenia może operować na dowolnych typach
liczbowych.
Operator przesuwa bity lewego argumentu o zadaną prawym argumentem ilość pozycji w lewo. Na przykład:

00001111 << 3 = 01111000


00000001 << 5 = 00100000

Operacja przesuwu bitów w lewo jest równoważna mnożeniu przez 2. Przesunięcie bitów w lewo o n pozycji
odpowiada pomnożeniu przez 2n. Przesunięcie bitów jest o wiele szybsze od mnożenia.
Operacje bitowe często służą do modyfikacji zawartości zmiennej. Dlatego język C++ posiada formy skrócone
operacji przypisania z modyfikacją :

zamiast stosuje się


a = a | b; a |= b;
a = a & b; a &= b;
a = a ^ b; a ^= b;
a = a >> n; a >>= n;
a = a << n; a <<= n;

Poniższy program dokonuje szybkiej konwersji wprowadzonej liczby dziesiętnej na jej zapis w systemie binarnym.
Zasada działania opiera się na badaniu stanu kolejnych bitów liczby, która wewnętrznie jest przechowywana w
postaci binarnej. Badanie polega na wykonywaniu koniunkcji bitowej z maską, w której jest cyklicznie przesuwany bit
z pozycji najstarszej na najmłodszą. Wynik koniunkcji informuje nas o stanie badanego bitu.

// przesuw bitów
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0007.php 38 / 253
Bit w zastosowaniach - Operacje bitowe w języku C++ 2014-10-03

unsigned a,m;
cin >> a;
for(m = 2147483648; m > 0; m >>= 1) cout << ((a & m) ? "1" : "0");
cout << endl;
return 0;
}

12674523
00000000110000010110010111011011

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0007.php 39 / 253
Bit w zastosowaniach - Transmisja cyfrowa 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Przesyłanie bitów
Transmisja cyfrowa
Kody detekcyjne EDC
Kody korekcyjne ECC
Sieć lokalna Ethernet

Transmisja cyfrowa polega na przesyłaniu informacji w postaci bitów pomiędzy dwoma urządzeniami
cyfrowymi, np. komputerami. W rozdziale tym opiszemy podstawowe idee transmisji cyfrowej.
Zaczniemy od budowy toru transmisyjnego.

Tor transmisyjny
Zadaniem toru transmisyjnego jest przesłanie informacji binarnej od komputera nadawczego do
komputera odbiorczego. Typowy tor transmisji danych cyfrowych składa się z następujących
elementów:

Komputer nadawczy przekazuje informację do przesłania modemowi nadawczemu. Modem jest specjalnym urządzeniem, które
informację cyfrową w postaci bitów zamienia na odpowiedni dla danego ośrodka sygnał (falę radiową, prąd elektryczny, światło
lasera itp). Sygnał przenosi się (propaguje) przez ośrodek transmisyjny (przestrzeń, przewód elektryczny, światłowód itp). Po
drugiej stronie toru transmisyjnego sygnał dociera do modemu odbiorczego. Modem odbiorczy odczytuje sygnał i, odpowiednio go
interpretując, wydobywa z niego informację cyfrową, którą nadał modem odbiorczy. Wydobyta informacja jest przekazywana do
komputera odbiorczego. Kanał transmisyjny posiada zwykle łączność w obu kierunkach. Kanałem zwrotnym komputer odbiorczy
może przekazywać potwierdzenie odbioru danych - tzw. transmisja z potwierdzeniem (ang. hand shaking transmission).

Nazwa MODEM pochodzi od nazw MODULATOR i DEMODULATOR. Modulator jest układem wewnątrz modemu, który
odpowiednio kształtuje (moduluje) sygnał wysyłany do ośrodka w zależności od przesyłanej informacji cyfrowej. Sygnał ten
nazywamy sygnałem nośnym (ang. carrier). Demodulator wykonuje zadanie odwrotne - odebrany z ośrodka sygnał przekształca
(demoduluje) z powrotem w informację cyfrową dla komputera odbiorczego.

Modulacja sygnału
Słowo modulacja (ang. modulation) oznacza kształtowanie różnych parametrów sygnału propagującego się przez ośrodek za
pomocą informacji cyfrowej, którą ten sygnał ma przenieść. Sygnał najczęściej ma formę zbliżoną do kształtu sinusoidy (wykres
funkcji f(x) = sin(x)) i jest sygnałem okresowym (czyli takim, który powtarza się po określonym czasie). Fala sinusoidalna jest
bardzo rozpowszechnionym rodzajem fali w przyrodzie. Jeśli wrzucisz do spokojnego stawu kamień, to powstałe, rozchodzące się
fale będą właśnie falami sinusoidalnymi. Zobaczmy jakie parametry fali sinusoidalnej można modulować (kształtować):

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0008.php 40 / 253
Bit w zastosowaniach - Transmisja cyfrowa 2014-10-03

Fala sinusoidalna zmienia się w czasie odchylając się w górę i w dół od położenia naturalnego. Wartość maksymalnego
odchylenia od położenia równowagi nazywamy amplitudą sygnału i oznaczamy literką A:

f(t) = Asin(wt)

Drugim istotnym parametrem sygnału sinusoidalnego jest okres T. Jest to czas, po upływie którego fala zaczyna się powtarzać -
przyjmuje te same wartości wychylenia. Okres mierzymy w sekundach. Bezpośrednio z okresem związana jest częstotliwość fali,
czyli liczba okresów w ciągu jednej sekundy. Jednostką częstotliwości jest Hz (Herz - od nazwiska niemieckiego pioniera techniki
radiowej, Heinricha Rudolfa Herza). Np. fala, o okresie 0,2 sekundy ma częstotliwość 5 Hz, ponieważ w jednej sekundzie mieści
się jej pięć okresów. Wyższe jednostki częstotliwości to:

1 kHz = 1000 Hz = 1000 okresów w ciągu jednej sekundy


1 MHz = 1000 kHz = 1.000.000 Hz
1 GHz = 1000 MHz = 1.000.000 kHz = 1.000.000.000 Hz

Trzecim parametrem jest przesunięcie fazowe f . Sygnał przesunięty fazowo posiada taką samą amplitudę oraz okres, lecz w
stosunku do sygnału nie przesuniętego przyjmuje wartości wychylenia z pewnym opóźnieniem. Miarą przesunięcia fazowego jest
kąt w radianach.
Mamy zatem trzy różne parametry sygnału, które można modulować:
amplitudę - modulacja amplitudy - AM (ang. Amplitude Modulation)
częstotliwość - modulacja częstotliwości - FM (ang. Frequency Modulation)
fazę - modulacja fazy - PM (ang. Phase Modulation)
Sygnał zmodulowany jednym z powyższych sposobów przenosił będzie informację cyfrową, czyli bity. Transmisja pojedynczych
bitów jest transmisją szeregową. Dla każdego bitu przewidziany jest pewien krótki czas transmisji zwany oknem transmisji bitu
(ang. bit transmit window) lub ramką bitu (ang. bit transmit frame). Bity są przesyłane jeden po drugim.

Modulacja Amplitudy - AM
W modulacji amplitudy kształtujemy amplitudę sygnału w zależności od przesyłanego bitu 0 lub 1. Umówmy się, iż
bit 0 będzie reprezentowany sygnałem o małej amplitudzie, a bit 1 będzie reprezentowany sygnałem o amplitudzie
dużej.

Amplitudy dla bitu 0 i 1 muszą być tak dobrane, aby łatwo dały się odróżnić od siebie po stronie odbiorczej toru
transmisyjnego.
Modem odbiera od komputera nadawczego informację cyfrową w postaci bitów. Wykorzystując stany bitów modem
nadawczy moduluje odpowiednio amplitudę sygnału nośnego i wysyła go do ośrodka transmisyjnego. Poniżej
przedstawiamy w dużym uproszczeniu przykładowy kształt sygnału zmodulowanego amplitudowo dla informacji
binarnej 11010100.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0008.php 41 / 253
Bit w zastosowaniach - Transmisja cyfrowa 2014-10-03

Transmisja z modulacją amplitudy jest mało odporna na zakłócenia. Przez zakłócenie rozumiemy obcy sygnał, który
losowo pojawia się w kanale transmisyjnym i oddziałuje na sygnał nadawany. Zakłócenia powstają z różnych
powodów - wyładowania atmosferyczne, praca różnych urządzeń elektrycznych, iskrzenia styków, promieniowanie
kosmiczne tp. Sygnał zakłócający dodaje się do sygnału nadawanego zmieniając w ten sposób kształt fali.

Na powyższym przykładzie sygnał zakłócający (niebieski) spowodował taką zmianę sygnału nadawanego, iż
nastąpiło przekłamanie jednego bitu, zaznaczonego pod wykresem na czerwono.

Modulacja Częstotliwości - FM
W modulacji częstotliwości kształtujemy częstotliwość sygnału (długość okresu). W oknie bitu 0 częstotliwość jest
niska, w oknie bitu 1 częstotliwość jest wysoka.

Częstotliwości dla bitu 0 i dla bitu 1 muszą być tak dobrane, aby bez problemu można było odróżnić od siebie te dwa
sygnały. Na powyższym rysunku częstotliwość dla 1 jest dwa razy wyższa od częstotliwości dla 0. W praktyce
stosunki tych częstotliwości są inne (ze względu na tzw. harmoniczne, czyli fale pochodne o częstotliwościach
będących wielokrotnościami częstotliwości fali podstawowej), ale zasada pozostaje taka sama.

Powyżej widzimy kształt sygnału zmodulowanego częstotliwościowo dla danych binarnych 11010100. Ponieważ
amplituda sygnału nie niesie informacji, zakłócenia amplitudowe do pewnego stopnia nie wpływają na przekazywaną
informację. Dlatego modulacja FM jest dużo bardziej odporna na zakłócenia niż modulacja AM.

Modulacja Fazy - PM

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0008.php 42 / 253
Bit w zastosowaniach - Transmisja cyfrowa 2014-10-03

W modulacji fazy kształtujemy przesunięcie fazowe. Umówmy się, iż dla bitu 0 przesunięcie wynosi 0 radianów, a
dla bitu 1 przesunięcie wynosi p radianów (o takim sygnale mówimy, iż posiada fazę przeciwną).

Poniżej przedstawiamy przebieg sygnału zmodulowanego fazowo dla danych binarnych 11010100. Zwróć uwagę, iż
zmiana fazy występuje wtedy, gdy kolejne bity zmieniają swój stan np. z 1 na 0 lub z 0 na 1. Zamiast wykrywania
przesunięć fazowych można jedynie wykrywać zmianę fazy (co jest dużo prostsze) i odpowiednio zmieniać stan
odbieranych bitów.

Transmisja PM jest bardzo odporna na zakłócenia.


Aby zwiększyć przepustowość kanału transmisyjnego często łączy się ze sobą kilka modulacji (np. AM i FM). W
ten sposób można zwielokrotnić postać sygnału, a co za tym idzie w oknie bitowym przesyłać nie pojedynczy bit
lecz kilka bitów. Dla przykładu zademonstrujemy taką modulację AM/FM. Naraz będą przesyłane dwa bity wg
schematu:

Sygnał modulujemy amplitudowo i częstotliwościowo wg dwóch bitów danych. Poniżej przedstawiamy przykładowy
kształt sygnału dla danych binarnych 11010100. Zwróć uwagę, iż informację tą przesyłamy w dwa razy krótszym
czasie niż w przypadku modulacji prostej. Zwielokrotniliśmy przepustowość kanału transmisyjnego.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0008.php 43 / 253
Bit w zastosowaniach - Transmisja cyfrowa 2014-10-03

Pokazane sposoby modulacji nie wyczerpują wszystkich stosowanych w praktyce metod kształtowania sygnału. Naszym celem
było jedynie naszkicowanie problemów transmisji cyfrowej i sposobów ich rozwiązania.
Szybkość transmisji cyfrowej wyraża się w jednostkach zwanych bodami (ang.baud rate):

1 bod = 1 bit w ciągu jednej sekundy

Większe jednostki to

1 kilo bod = 1000 bitów / sekundę


1 mega bod = 1000 kilo bodów = 1.000.000 bodów

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0008.php 44 / 253
Bit w zastosowaniach - EDC 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Przesyłanie bitów
Kody detekcyjne - EDC
Transmisja cyfrowa
Kody korekcyjne ECC
Sieć lokalna Ethernet

W trakcie przesyłania sygnału przez ośrodek transmisyjny mogą pojawić się różne
zakłócenia, które spowodują deformację sygnału. Zakłócenia wywoływane są na
przykład przez wyładowania atmosferyczne, maszyny elektryczne, silniki
spalinowe, promieniowanie kosmiczne oraz wiele innych czynników. Nie zawsze da
się je wyeliminować. Jeśli zakłócony sygnał dotrze do odbiornika, to może być
nieprawidłowo odczytany. W transmisji cyfrowej błąd (przekłamanie) polega na
odczycie bitu o stanie przeciwnym w stosunku do nadanego:

nadano 1 ... odebrano 0


nadano 0 ... odebrano 1

Błąd może być pojedynczy lub seryjny - dotyczący grupy kolejnych bitów. Ochrona transmisji przed błędami polega na
odpowiednim kodowaniu przesyłanej informacji. Aby zrozumieć problem, przyjrzyjmy się poniższemu schematowi:

Nadajnik wysyła informację cyfrową 1011 (cokolwiek by ona znaczyła). W trakcie przesyłu tej informacji przez kanał transmisyjny
pojawia się zakłócenie, które powoduje, iż odbiornik odbiera informację 1001. Porównując informację nadaną i odebraną od razu
zauważymy różnicę na przedostatniej pozycji, gdzie zamiast bitu 1 pojawił się bit 0. Doszło do przekłamania przesyłanej
informacji. Ponieważ informacja nie była w żaden sposób zabezpieczona, to odbiornik nie ma pojęcia, iż odebrał dane z
przekłamaniem. Przecież nadajnik mógł wysłać dane 1001.

Dwukrotne przesyłanie informacji

Pierwszym narzucającym się rozwiązaniem tego problemu jest przesyłanie informacji dwukrotnie. Ponieważ odbiornik "wie", iż
informacja odebrana podwójnie, powinna być taka sama, może ją sobie porównać. Na przedostatniej pozycji jest różnica. Teraz
odbiornik wie już, iż odebrał dane z błędem. Kanałem zwrotnym może poprosić nadajnik o powtórzenie ostatniej transmisji danych.
Zwróć uwagę, iż w tym systemie nie wiemy, które z dwóch odebranych słówek jest poprawne, a które zawiera błąd. Sama różnica
ni e wystarcza do odtworzenia właściwej informacji. Dlatego taki kod nazywamy kodem wykrywającym błędy - kodem
detekcyjnym (ang. EDC - Error Detection Code). Prawdopodobieństwo, iż błąd pojawi się w obu przekazach na tej samej pozycji
(wtedy słówka będą oba błędne, ale takie same, co spowoduje ich akceptację przez odbiornik), jest naprawdę bardzo małe.

Bit parzystości
W praktyce nikt o zdrowych zmysłach nie zgodziłby się na opisany powyżej system zabezpieczania transmisji przed błędami.
Powodem jest dwukrotny spadek przepustowości (ilości przesyłanej informacji w jednostce czasu) kanału transmisyjnego -
ponieważ każdą informację musimy przesyłać dwa razy. Jeśli błędy pojawiają się w kanale transmisyjnym bardzo rzadko, stosuje
się bardziej oszczędny system kodowania przesyłanej informacji, zwany transmisją z bitem parzystości (ang. parity checking).
Polega to na tym, iż do przesyłanego słówka dodajemy jeden bit o takim stanie, aby liczba wszystkich bitów o stanie 1 w tak
powiększonym słowie informacyjnym była parzysta (czyli podzielna przez 2). Załóżmy, iż przesyłamy słówka 4-bitowe. Poniżej
przedstawiamy kilka przykładów rozszerzania takich słówek do 5-bitowych z bitem parzystości. Umówmy się, iż dodatkowy bit
dodajemy na początku nowego słowa:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0009.php 45 / 253
Bit w zastosowaniach - EDC 2014-10-03

słówko
słówko z bitem
informacyjne parzystości

0000 00000
0001 10001
0011 00011
0110 00110
1011 11011
1110 11110
1111 01111

Co nam to dało? Otóż dużo. Odbiornik wie teraz, iż zawsze w odebranym słowie liczba bitów o stanie 1 powinna być parzysta.
Może to sobie sprawdzić. Jeśli otrzyma liczbę nieparzystą, to znaczy, iż któryś z bitów został odebrany z przekłamaniem:

Jeśli błąd transmisji wywołał zmianę stanu bitu z 0 na 1, to w odebranym słowie otrzymamy o jeden więcej bitów 1. Skoro
nadano parzystą liczbę bitów 1, to w wyniku otrzymamy liczbę nieparzystą. Np. nadano 11110, odebrano 11111. Ilość
jedynek jest nieparzysta.
Jeśli z kolei błąd spowodował zmianę stanu bitu z 1 na 0, to w odebranym słowie będzie o 1 mniej bitów 1, czyli także
otrzymamy liczbę nieparzystą. Np. nadano 01111, odebrano 01011. Ilość jedynek jest nieparzysta.

Wynika z tego, iż pojedynczy błąd powoduje utratę parzystości w odebranym słówku danych. Również nieparzysta liczba błędów
(1,3,5,...) wywoła taką utratę parzystości. Natomiast błędy parzyste (na 2, 4, 6 ... bitach) przejdą niezauważone, ponieważ nie
powodują one utraty parzystości (spróbuj to udowodnić). Ponieważ jednak system ten stosuje się w przypadku, gdy błędy
pojawiają się bardzo rzadko, to możemy śmiało założyć, iż wystąpienie błędu podwójnego (parzystego) jest prawie niemożliwe.
Zabezpieczenie transmisji bitem parzystości jest już bardziej ekonomiczne od dwukrotnego przesyłania każdego słowa
informacyjnego. Spadek szybkości transmisji jest tym mniejszy, im więcej bitów informacyjnym mają przesyłane słowa danych.

Suma kontrolna
Kolejnym sposobem zabezpieczania transmisji przed błędami jest tzw. suma kontrolna (ang. checksum). Polega ona na tym, iż
kolejno przesyłane porcje danych traktujemy jak liczby binarne. Sumujemy je ograniczając wynik do określonej liczby bitów (np. 8,
16, 32 lub 64). Otrzymaną w ten sposób sumę dołączamy na koniec przesłanego bloku informacji. Odbiornik również tworzy sumę
kontrolną odbieranych danych. Następnie sprawdza swoją sumę z sumą odczytaną na końcu transmisji bloku danych. Jeśli sumy
się różnią, to znaczy, iż w odebranym bloku wystąpił błąd.
Innym, bardzo podobnym sposobem, jest potraktowanie przesyłanych danych jako liczb ze znakiem. Otrzymaną sumę kontrolną
neguje się arytmetycznie (wyznacza się wartość o przeciwnym znaku) i dołącza na końcu przesyłanego bloku danych. Odbiornik
po prostu sumuje wszystkie odebrane dane, łącznie z sumą kontrolną. Jeśli w wyniku otrzyma wartość różną od zera, to znaczy,
iż w odebranym bloku są błędy.
Poniższy program oblicza 8-bitową sumę kontrolną wg sposobu 2.

// Prosta suma kontrolna


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
char s[129];
cin.getline(s,128);
signed char suma = 0;
for(int i = 0; s[i]; i++) suma += s[i];
suma = -suma;
cout << (int) suma << endl;
return 0;
}

abc ABC
-12

ABC abc
-12

cba ACB
-12

Przyjrzyj się dokładnie wynikom działania programu dla różnych danych wejściowych. Otóż okazuje się, iż prosta suma kontrolna
nie wykrywa zmiany kolejności danych. Nie wykryje również błędów polegających na zwiększeniu o pewną wartość jednego
słówka kodowego a innego zmniejszeniu o tą samą wartość. Jeśli z transmisji znikną dane o wartości 0, to nie zostanie to
wykryte! Także dodanie dowolnej ilości danych 0 nie zmieni sumy kontrolnej. Zatem suma kontrolna jest pewnym
zabezpieczeniem transmisji przed błędami, lecz posiada wiele wad.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0009.php 46 / 253
Bit w zastosowaniach - EDC 2014-10-03

Adler-32
Aby usunąć niedogodności zwykłej sumy kontrolnej, wymyślono wiele efektywnych algorytmów wyznaczania złożonych sum
kontrolnych, które są czułe na wszelkie zmiany danych w zabezpieczanym bloku. Adler-32 jest jednym z algorytmów
wyznaczania takiej złożonej sumy kontrolnej. Został on wymyślony przez Marka Adlera.
Algorytm Adler-32 polega na wyliczaniu dwóch sum kontrolnych, które nazwiemy A i B. Obie sumy są 16-bitowe. Suma A
powstaje przez zsumowanie modulo 65521 danych w bloku - suma ma początkowo wartość 1. Suma B jest sumą modulo 65521
kolejnych wartości sumy A. Na końcu sumy A i B łączy się w jedną sumę kontrolną 32 bitową - B zajmuje starsze 16 bitów, A
zajmuje młodsze.
Użyta do operacji modulo liczba 65521 jest największą liczbą pierwszą mniejszą od 216 = 65536.
Matematycznie rachunki wyglądają następująco:

D = {d1 d2 d3 ... dn-1 dn} - blok danych.


A1 = (1 + d1) mod 65521
B1 = (0 + A1) mod 65521 = (1+d1) mod 65521
A2 = (A1 + d2) mod 65521 = (1+d1+d2) mod 65521
B2 = (B1 + A2) mod 65521 = ((1+d1) + (1+d1+d2)) mod 65521
A3 = (A2 + d3) mod 65521 = (1+ d1+d2+d3) mod 65521
B3 = (B2 + A3) mod 65521 = ((1+d1) + (1+d1+d2) + (1+d1+d2+d3)) mod 65521
...
An = (An-1 + dn) mod 65521 = (1+d1+d2+d3+ ... +dn-1+dn) mod 65521
Bn = (Bn-1 + A n) mod 65521 = ((1+d1) + (1+d1+d2) + (1+d1+d2+d3) +...+ (1+d1+d2+d3+ ... +dn-1) +
(1+d1+d2+d3+...+dn-1+dn)) mod 65521
Bn = (nd1 + (n-1)d2 + (n-2)d3 + ... + 2dn-1 + dn + n) mod 65521

Po wyznaczeniu końcowych sum kontrolnych An i Bn sumę Adler-32 tworzymy następująco:

SAdler-32 = 216 x Bn + An = 65536 x Bn + An.

Zamiast mnożenia możemy wykorzystać operację przesunięcia bitów Bn o 16 pozycji w lewo. Dodawanie można zrealizować za
pomocą alternatywy bitowej. W efekcie otrzymujemy 32 bitową sumę kontrolną, która jest już czuła na:
zmiany danych
zmiany kolejności danych
dodanie zer lub usunięcie zer z bloku
dodanie tej samej wartości do jednej danej i odjęcie tej wartości od innej danej
Poniżej przedstawiamy prosty program wyliczający sumę kontrolną Adler-32:

// Suma kontrolna Adler-32


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
char s[129];
cin.getline(s,128);
int A = 1;
int B = 0;
for(int i = 0; s[i]; i++)
{
A = (A + (unsigned)s[i]) % 65521;
B = (B + A) % 65521;
}
unsigned int SAdler32 = (B << 16) | A;
cout << SAdler32 << endl;
return 0;
}

abc ABC
150143501

ABC abc
124977677

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0009.php 47 / 253
Bit w zastosowaniach - EDC 2014-10-03

cba ACB
150471181

W przypadku sumy kontrolnej Adler-32 dostajemy różne wartości przy przestawieniu danych. Zatem jest ona dużo lepsza od
prostej sumy kontrolnej.

Suma kontrolna Fletchera


Jest to bardzo podobny algorytm do sumy kontrolnej Adler-32. Różnica polega na zastąpieniu operacji modulo 65521 operacją
modulo 65535 (jest to wartość 16-bitowa, w której wszystkie 16 bitów znajduje się w stanie 1). Sumy początkowe startują od
wartości 65535.
Poniżej przedstawiamy przykładowy program wyliczający sumę kontrolną Fletchera.

// Suma kontrolna Fletchera


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
char s[129];
unsigned A = 65535, B = 65535;
cin.getline(s,128);
for(int i = 0; s[i]; i++)
{
A += (unsigned)s[i];
B += A;
}
A %= 65535;
B %= 65535;
unsigned SFletcher = (B << 16) | A;
cout << SFletcher << endl;
return 0;
}

abc ABC
149684748

ABC abc
124518924

cba ACB
150012428

Sumy kontrolne pozwalają zabezpieczyć transmisję przed ewentualnymi błędami. Odbiornik ma możliwość sprawdzenia, czy
odebrał poprawne dane. Jeśli tak, przekazuje je komputerowi odbiorczemu. Jeśli nie, kanałem zwrotnym prosi nadajnik o
powtórzenie ostatniego bloku danych. Wynika stąd, iż kody detekcyjne można stosować tylko w przypadku tzw. transmisji z
potwierdzeniem.
Jeśli nie można powtórzyć transmisji informacji (np. olbrzymia odległość przekazu - próbniki kosmiczne) lub nic to nie daje (np.
uszkodzony nośnik CD), stosowanie kodów detekcyjnych nie ma większego sensu - w takich przypadkach stosuje się bardziej
zaawansowaną ochronę transmisji, czyli kody korekcyjne (ang. ECC - Error Correction Code), które nie tylko wykrywają błędy w
odebranym przekazie, ale często potrafią je naprawić. Kody takie opisujemy w kolejnym rozdziale.
Nie wyczerpaliśmy tematyki kodów detekcyjnych. Zainteresowanym czytelnikom proponujemy poszukanie w Internecie informacji
o cyklicznej kontroli nadmiarowości (ang. CRC - Cyclic Redundancy Check). Dział ten pominęliśmy z uwagi na zaawansowaną
matematykę binarną (wyznaczanie reszty z dzielenia przez wielomiany), która jest wykorzystywana. Kody CRC wymagają w
sumie nowego artykułu i wykraczają znacznie poza program szkoły średniej.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0009.php 48 / 253
Bit w zastosowaniach - EDC 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0009.php 49 / 253
Bit w zastosowaniach - ECC 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Przesyłanie bitów
Kody korekcyjne - ECC
Transmisja cyfrowa
Kody detekcyjne EDC
Sieć lokalna Ethernet

Kod korekcyjny (ang. ECC - Error Correction Code) ma za zadanie odtworzenie, naprawę
informacji w przypadku wystąpienia błędu (lub błędów) spowodowanych zakłóceniami sygnału
w kanale transmisyjnym. Kody ECC stosujemy zwykle tam, gdzie:
powtórzenie transmisji jest niemożliwe, np. odbiornik nie ma łączności z
nadajnikiem. Jako przykład można podać nadajniki strumieniowe (telewizja
cyfrowa, radio cyfrowe). Jeśli wystąpią zakłócenia dla pewnej grupy
odbiorników, to będą one musiały same poradzić sobie z tym problemem.
powtórzenie transmisji jest utrudnione, np. komunikacja z próbnikiem
kosmicznym znajdującym się w dużej odległości od Ziemi. Teoretycznie
transmisję można powtórzyć, lecz może to trwać kilka godzin i nie ma
pewności, iż powtórzony przekaz będzie bezbłędny z uwagi na częste
zakłócenia - promieniowanie słoneczne i kosmiczne..
powtórzenie transmisji nie usuwa błędu, np. zarysowany nośnik CD lub DVD.
Powtórne odtworzenie ścieżki nic nie daje, ponieważ zawsze wystąpi ubytek
odczytanych danych.

Potrójne przesyłanie danych


Najprymitywniejszym kodem ECC jest po prostu trzykrotne przesyłanie każdego bitu danych. Jeśli w trakcie transmisji nastąpi
przekłamanie jednego bitu, to dwa pozostałe pozwolą odtworzyć właściwy bit danych.

Nadajnik Kanał Odbiornik


transmisyjny
1 ... 111 ... 011 ... 011 → 1
0 ... 000 ... 001 ... 001 → 0
1 ... 111 ... 101 ... 101 → 1
1 ... 111 ... 110 ... 110 → 1

W powyższym przykładzie występuje błąd w trakcie każdej transmisji trójek bitów. Dlatego po stronie odbiornika odebrane trójki
zawierają różne bity. Za bit nadany odbiornik przyjmuje bit powtarzający się najczęściej. Oczywiście system ten zawiedzie, gdy
przekłamane zostaną dwa bity w trójce.

Kod Hamminga
Potrójne przesyłanie danych nie jest stosowane w praktyce - przepustowość kanału transmisyjnego spada trzykrotnie, na co nikt
nie mógłby sobie pozwolić ze względów ekonomicznych. Jeśli błędy pojawiają się rzadko w kanale transmisyjnym, to przesyłaną
informację można zabezpieczyć kodem Hamminga. Kod ten, wynaleziony przez Richarda Hamminga w 1950 roku, pozwala
naprawić pojedyncze przekłamania bitów w odebranym słowie binarnym. Poniżej przedstawiamy konstrukcję słówek kodu
Hamminga dla wiadomości 4-bitowych.
Na początek będzie nam potrzebna tablica liczb binarnych o wartościach od 0 do 7:

dziesiętnie binarnie
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Słówko danych składa się z 4 bitów b4b3b2b1. Bity te umieszczamy w słówku kodu Hamminga w sposób następujący:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0010.php 50 / 253
Bit w zastosowaniach - ECC 2014-10-03

Numer pozycji : 7 6 5 4 3 2 1
Słowo kodu Hamminga: b4 b3 b2 x4 b1 x2 x1

Pozycje o numerach będących kolejnymi potęgami liczby 2 (1, 2, 4, 8, 16, ...) są tzw. pozycjami kontrolnymi. Oznaczyliśmy je
literką x. Pozycje kontrolne musimy obliczyć na podstawie słowa danych. Zróbmy to na konkretnym przykładzie. Niech nasze
słowo informacyjne ma wartość:

b4b3b2b1 = 1011

Bity informacyjne wpisujemy na odpowiednie pozycje w słowie kodu Hamminga:

Numer pozycji : 7 6 5 4 3 2 1
Słowo kodu Hamminga: 1 0 1 x4 1 x2 x1

Zapiszmy wszystkie numery pozycji, na których występują bity o stanie 1. Są to pozycje 7, 5 i 3. Wykorzystując tabelkę konwersji
dziesiętno-dwójkowej zapiszmy wyznaczone numery pozycji binarnie: 7 = 111, 5 = 101 i 3 = 011. Teraz otrzymane liczby binarne
wpisujemy do poniższej tabelki:

x4 x2 x1
1 1 1
1 0 1
0 1 1

Aby wyznaczyć kolejne pozycje kontrolne x4, x2 i x1, pionowo w kolumnach uzupełniamy bity bitem parzystości (w danej kolumnie
liczba bitów 1 musi być parzysta). Otrzymane w ten sposób bity parzystości są wartościami dla pozycji kontrolnych:

x4 x2 x1
1 1 1
1 0 1
0 1 1
0 0 1

Bity parzystości kolumn przepisujemy do odpowiednich pozycji kontrolnych w słowie kodowym Hamminga:

Numer pozycji : 7 6 5 4 3 2 1
Słowo kodu Hamminga: 1 0 1 0 1 0 1

Gotowe, utworzyliśmy słowo kodu Hamminga dla danej informacji: 1011 → 1010101.

Przesyłamy wyznaczone powyżej słowo kodu Hamminga 1010101 przez kanał transmisyjny. Występuje przekłamanie na pozycji
nr 6 i w efekcie odbiornik odbiera słowo 1110101.

Numer pozycji : 7 6 5 4 3 2 1
Odebrane słowo kodu Hamminga: 1 1 1 0 1 0 1

Odbiornik wyznacza pozycje wszystkich bitów 1 w odebranym słowie: 7, 6, 5, 3 i 1. Numery pozycji przekształca na kod binarny
zgodnie z podaną wcześniej tabelą konwersji: 7 = 111, 6 = 110, 5 = 101, 3 = 011 i 1 = 001. Binarne numery pozycji odbiornik
umieszcza w tabeli i każdą kolumnę uzupełnia bitem parzystości:

7 1 1 1
6 1 1 0
5 1 0 1
3 0 1 1
1 0 0 1
bit parzystości 1 1 0

Otrzymaliśmy wartość 110. Wg tabeli konwersji jest to liczba 6, która oznacza pozycję w słowie kodowym Hamminga, na której
wystąpiło przekłamanie. Ponieważ przekłamanie w transmisji cyfrowej polega na odebraniu bitu o stanie przeciwnym do nadanego,
zatem wystarczy zanegować (zmienić stan na przeciwny) bit na pozycji 6, aby otrzymać nadane słowo Hamminga:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0010.php 51 / 253
Bit w zastosowaniach - ECC 2014-10-03

Numer pozycji : 7 6 5 4 3 2 1
Naprawione słowo kodu Hamminga: 1 0 1 0 1 0 1

Teraz usuwamy bity kontrolne i otrzymujemy informację nadaną: 1011. Jeśli w trakcie transmisji błąd nie wystąpi, to odbiornik
otrzyma w wyniku dekodowania pozycję 000 = 0. W takim przypadku usuwa jedynie bity kontrolne.
Poniższy program tworzy kody Hamminga dla 8-bitowych słówek b8b7b6b5b4b3b2b1. W przypadku słówek 8-bitowych słówko
kodowe Hamminga posiada 4 pozycje kontrolne x8, x4, x2 i x1:

Numer pozycji : 12 11 10 9 8 7 6 5 4 3 2 1
Słowo kodu Hamminga: b8 b7 b6 b5 x8 b4 b3 b2 x4 b1 x2 x1

Słówka informacyjne wprowadzamy do programu w postaci ciągu zer i jedynek.

// Kodowanie Hamminga
// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
char s[10];
int h,w,x,mw,mh,i;
cout << " dane = "; cin.getline(s,9);
// odczytane słówko przekształcamy na wartość
for(w = i = 0; (s[i]) && ((s[i] == '0') || (s[i] == '1')); i++)
w = w + w + (s[i] == '1');
// bity w umieszczamy na odpowiednich pozycjach h
// i wyznaczamy bity kontrolne x
x = h = 0;
for(i = 12, mh = 0x800, mw = 0x80; mw; mh >>= 1, mw >>= 1, i--)
{
if((mh == 0x80) || (mh == 0x08))
{
mh >>= 1; i--;
}
if(w & mw)
{
h |= mh; x ^= i;
}
}
// bity kontrolne x wstawiamy na odpowiednie pozycje w h
for(mh = 0x80, mw = 0x8; mw; mw >>= 1)
{
if(x & mw) h |= mh;
switch(mh)
{
case 0x80 : mh = 0x08; break;
case 0x08 : mh = 0x02; break;
case 0x02 : mh = 0x01; break;
}
}
// wyświetlamy gotowe słówko kodu Hamminga
cout << "kod Hamminga = ";
for(mh = 0x800; mh; mh >>= 1) cout << ((h & mh) ? "1" : "0");
cout << endl;
return 0;
}

dane = 11001110
kod Hamminga = 110001110011

Podane w tym artykule informacje nie wyczerpują zagadnienia kodów korekcyjnych. Zainteresowanych tym tematem czytelników
odsyłamy do źródeł w Internecie dotyczących kodów Golay'a, Reeda-Mullera i Reeda-Salomona. Wymagają one
zaawansowanej arytmetyki binarnej, wykraczającej poza zakres materiału dla szkoły średniej i dlatego zostały tutaj pominięte. Z
drugiej strony kody te są stosowane w popularnym sprzęcie Audio-CD oraz DVD do korekcji błędów odczytu z nośników
cyfrowych. Kody ECC Reeda-Salomona pozwalają odtworzyć informację przy wystąpieniu tzw. błędów seryjnych, czyli ciągu
kolejnych przekłamanych bitów (powstających np. przy zarysowaniu nośnika CD/DVD). Dzięki nim odtwarzarki CD i DVD mogą
poprawnie odczytywać zarysowane i poplamione płyty cyfrowe (oczywiście tylko do pewnego stopnia). Inteligentne urządzenia

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0010.php 52 / 253
Bit w zastosowaniach - ECC 2014-10-03

odtwarzające nawet radzą sobie w sytuacji, gdy fragment danych jest niemożliwy do odtworzenia. W takim przypadku, aby
zapobiec nieuniknionym trzaskom w odtwarzanym nagraniu, w miejsce uszkodzonego fragmentu utworu wstawiany jest fragment
bezpośrednio poprzedzający uszkodzenie. Niewprawne ucho nawet nie zauważy tego oszustwa w odtwarzanym utworze
muzycznym. Podobnie postępuje się w przypadku filmów DVD.

Obraz telewizyjny składa się z linii obrazowych wyświetlanych kolejno na ekranie kineskopu. Treść poszczególnych linii jest
zapisana cyfrowo na płycie DVD. Jeśli w wyniku błędów nośnika nie daje się odtworzyć jednej lub kilku sąsiednich linii, to
odtwarzacz DVD po prostu kopiuje w ich miejsce ostatnią dobrze odebraną linię obrazową. Uzyskany efekt jest zwykle
niewidoczny lub mniej irytujący niż w przypadku błędnego wyświetlenia uszkodzonego fragmentu obrazu.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0010.php 53 / 253
Bit w zastosowaniach - Sieć Ethernet 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1Dane do artykułu pochodzą z Wikipedii oraz z witryny How Stuff Works

Przesyłanie bitów
Sieć lokalna Ethernet
Transmisja cyfrowa
Kody detekcyjne EDC
Kody korekcyjne ECC

Informacje wstępne

Na początku lat siedemdziesiątych ubiegłego wieku w Centrum Badawczym Korporacji Xerox w


Palo Alto (znanego w świecie pod nazwą PARC - ang. Palo Alto Research Center) naukowiec o
nazwisku Bob Metcalfe zaprojektował i przetestował pierwszą na świecie sieć komputerową Ethernet
(sieć komputerowa to grupa komputerów połączonych ze sobą kanałami transmisyjnymi do wymiany
danych cyfrowych). W trakcie prac nad znalezieniem sposobu przyłączenia komputera "Alto" firmy
Xerox do drukarki Metcalfe wynalazł rozwiązanie problemu fizycznego połączenia urządzeń za pomocą
kabli elektrycznych. Rozwiązanie to nazwał Ethernet. Sieci Ethernet stały się od tego czasu
najpopularniejsze na całym świecie i najpowszechniej używane. Standard Ethernet rozwijał się i
obejmował coraz więcej nowych rozwiązań i technologii wraz z dojrzewaniem idei sieci komputerowych,
Bob Metcalfe lecz podstawy działania pozostały w zasadzie takie same jak w pierwszej sieci opracowanej przez
Metcalfe'a. Pierwotny Ethernet realizował wymianę danych poprzez pojedynczy kabel, który
współdzieliły wszystkie urządzenia w danej sieci. Po podłączeniu jakiegoś urządzenia do takiego kabla mogło ono prowadzić
wymianę danych z dowolnym innym urządzeniem, które było również podłączone do tego kabla. Zasada ta pozwala rozbudowywać
sieć w celu dołączania nowych urządzeń bez konieczności modyfikacji tych urządzeń, które już są dołączone do sieci.
Ethernet jest technologią niedużych, lokalnych sieci komputerowych, które zwykle działają w obrębie pojedynczego budynku,
łącząc urządzenia znajdujące się blisko siebie. Długość kabla Ethernet zwykle nie przekracza kilkaset metrów. Nowoczesne
rozwiązania pozwoliły zwiększyć te odległości do dziesiątek kilometrów. W transmisji danych stosowane są protokoły
komunikacyjne. Protokół sieciowy jest zbiorem zasad, wg których prowadzona jest wymiana danych w sieci. Odpowiada on
językowi ludzi. Aby czytać ten artykuł, musisz rozumieć język polski. Podobnie, aby dwa urządzenia w sieci komputerowej mogły
wymieniać ze sobą dane, muszą oba rozumieć ten sam protokół komunikacyjny.

Nieco słów technicznych


Ethernet działa wg prostych reguł. W celu lepszego zrozumienia tych reguł należy poznać podstawową terminologią związaną z tą
technologią.
Medium transmisyjne
Urządzenia pracujące we wspólnej sieci Ethernet są podłączone do wspólnego medium transmisyjnego, które
umożliwia przesyłanie sygnałów elektrycznych. Historycznie medium transmisyjne było realizowane za pomocą
kabla koncentrycznego (ang. coaxial cable), lecz obecnie zwykle stosuje się skręconą parę przewodów (ang.
twisted pair cable) lub włókna światłowodowe (ang. optical fiber cable).

Kabel koncentryczny Skrętka Włókno światłowodowe

Segment
Pojedyncze, wspólne medium transmisyjne nazywamy segmentem Ethernet.
Węzeł sieci
Urządzenie podłączone do segmentu nazywamy węzłem (ang. node), terminalem lub stacją roboczą (ang.
workstation).
Ramka sieciowa
Węzły komunikują się ze sobą za pomocą krótkich wiadomości nazywanych ramkami (ang. frames), które
przekazują fragmenty informacji o różnej długości. Ramki możemy porównać do zdań w naszym języku. Budowę
zdania w języku polskim definiuje gramatyka. W sieci Ethernet budowę ramki określa protokół sieciowy. Istnieją
ścisłe reguły co do minimalnej i maksymalnej długości ramek (liczby bitów, które ramka w sobie zawiera) oraz co do
ich zawartości. Każde urządzenie podłączone do sieci Ethernet posiada swój adres sieciowy, czyli numer
identyfikacyjny, zwany adresem MAC (ang. Media Access Control - Kontrola Dostępu do Medium). Ramki muszą

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0011.php 54 / 253
Bit w zastosowaniach - Sieć Ethernet 2014-10-03

zawierać w sobie adresy urządzenia nadającego ramkę oraz urządzenia, które ma tę ramkę odebrać, czyli adres
nadawcy i odbiorcy informacji. Dany adres w sposób jednoznaczny definiuje węzeł sieciowy, jak numer PESEL
jednoznacznie identyfikuje podatnika w naszym kraju. Dwa urządzenia Ethernet nie mogą posiadać identycznego
adresu sieciowego.
Budowa ramki Ethernet wygląda w uproszczeniu następująco:

Adres Adres Opcjonalne Typ Ethernet Przerwa


Preambuła SFD docelowy źródłowy pole 802.1Q lub długość Dane CRC między ramkami
7 bajtów 10101010 1 bajt 10101011 6 bajtów 6 bajtów (4 bajty) 2 bajty 46–1500 bajtów 4 bajty 12 bajtów
64–1522 bajtów
72–1530 bajtów
84–1542 bajtów

Preambuła oznacza początek ramki. Przesyłany wzór bitowy - naprzemiennie 1 i 0 - pozwala dobrze
zsynchronizować urządzenia nadawczo-odbiorcze węzłów.
SFD (ang. Start Frame Delimiter - ogranicznik początku ramki) jest bajtem przesyłanym po rozbiegówce. Oznacza
on koniec rozbiegówki.
Adres docelowy zawiera tzw. numer MAC odbiorcy ramki. W sieci Ethernet numery MAC są 6 bajtowe. Numer ten
jest albo ustalany przez wytwórcę urządzenia, albo definiowany przez administratora sieci w urządzeniach, których
adresy MAC można konfigurować.
Adres źródłowy definiuje urządzenie, które daną ramkę wysyła.
Pole Typ Ethernet zawiera albo dane określające rodzaj używanego protokołu Ethernet dla ramek sterujących lub
długość ramki dla ramek z danymi.
Pole z danymi może zawierać od 46 do 1500 bajtów danych.
Pole CRC zawiera 32 bitową sumę kontrolną (ang. Cyclic Redundancy Check - Cykliczne Sprawdzanie
Nadmiarowości), która umożliwia wykrywanie błędów w przesyłanych danych.
Przerwa między ramkami (ang. interframe gap) składa się z 12 bajtów o stanie równym ciszy w medium. Musi ona
wystąpić przed próbą wysłania kolejnej ramki. W trakcie przerwy inne węzły mogą próbować rozpocząć transmisję
swoich własnych ramek - patrz dalej.

Medium Ethernet
W zależności od stosowanego w sieci Ethernet medium istnieją różne sposoby podłączania kabla sieciowego do komputera. W
każdym przypadku komputer musi być wyposażony w specjalną kartę sieciową, która posiada odpowiednie gniazda (współcześnie
produkowane komputery przenośne posiadają gniazda Ethernet w swoim standardowym wyposażeniu).

Wtyczka na kabel koncentryczny Wtyczka na skrętkę Wtyczka na włókno światłowodowe

Karta Ethernet z gniazdkiem Karta Ethernet z gniazdkiem Karta Ethernet z gniazdkiem


na kabel koncentryczny na skrętkę na włókno światłowodowe

Technologia kabla koncentrycznego dzisiaj jest już przestarzała. Powszechnie są stosowane kable ze skrętek oraz kable
światłowodowe. Te ostatnie pozwalają na dużo wyższe prędkości transmisji, ponieważ kabel światłowodowy jest odporny na różne
zakłócenia, z którymi muszą walczyć kable elektryczne - wyładowania atmosferyczne, zakłócenia przemysłowe, pola
magnetyczne, sprzężenia pasożytnicze, itp.
Ponieważ sygnał w medium Ethernet dociera do każdego podłączonego węzła, adres docelowy jest niezbędny do określenia
zamierzonego odbiorcy ramki sieciowej.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0011.php 55 / 253
Bit w zastosowaniach - Sieć Ethernet 2014-10-03

Przykładowo na powyższym rysunku gdy komputer 2 wysyła dane do drukarki 3, to ramkę sieciową odbierają również komputery 1
i 4. Jednakże, gdy węzeł odbiera ramkę, to sprawdza adres odbiorcy, aby dowiedzieć się, czy jest ona dla niego przeznaczona.
Jeśli nie, odrzuca ramkę, nie czytając nawet jej zawartości. W sieci Ethernet istnieje tzw. adres rozsiewczy (ang. broadcast
address), który dotyczy wszystkich węzłów w sieci. Jeśli adres docelowy w ramce jest adresem rozsiewczym, to ramka zostanie
odczytana i przetworzona przez wszystkie węzły. System ten pozwala rozsyłać w sieci różne wiadomości sterujące.
Ethernet steruje przesyłem danych pomiędzy węzłami sieci za pomocą technologii CSMA/CD (ang. Carrier-Sense Multiple Access
with Collision Detection - wielodostęp z wykrywaniem sygnału nośnego oraz wykrywaniem kolizji). Gdy jeden z węzłów w sieci
Ethernet przesyła dane, wszystkie pozostałe węzły "słyszą" tę transmisję. W trakcie transmisji protokół zabrania innym węzłom
rozpoczynania własnej transmisji - nie miałoby to sensu, ponieważ doszłoby do zakłócenia obu sygnałów, i żaden z węzłów nie
byłby w stanie przesłać swoich danych - to zupełnie tak samo, jak dwóch lub więcej ludzi próbuje jednocześnie coś mówić,
zakłócając się nawzajem. Gdy pewien węzeł chce transmitować dane, czeka aż medium będzie wolne od innych transmisji - czyli
do momentu, gdy przestanie wykrywać sygnał nośny. Dopiero wtedy próbuje wysłać swoją ramkę danych.
Może się jednakże zdarzyć, iż w tym samym momencie inny węzeł wykrył koniec transmisji i sam również rozpoczął swoją
własną transmisję. Węzły Ethernet nasłuchują medium w trakcie wysyłania swoich danych, aby upewnić się, że są jedynymi
transmitującymi w tym czasie dane. Jeśli "usłyszą" swoje sygnały wracające w postaci zniekształconej, co zdarza się, gdy inny
węzeł rozpocznie w tym samym czasie transmisję, to "wiedzą", że doszło do kolizji. Pojedynczy segment Ethernet czasami jest
nazywany domeną kolizyjną, ponieważ żadne dwa węzły nie mogą w nim przesyłać danych w tym samym czasie bez wywołania
kolizji. Gdy węzły wykryją kolizję, przerywają transmisję, odczekują przypadkowy okres czasu i ponawiają próbę wysłania ramki,
gdy wykryją ciszę w medium.
Przypadkowa długość przerwy jest bardzo ważną częścią protokołu. Gdy dwa węzły wchodzą ze sobą w kolizję po raz pierwszy,
to oba będą musiały ponownie przesyłać dane. Przy następnej nadarzającej się okazji oba węzły uczestniczące w poprzedniej
kolizji będą posiadały dane przygotowane do wysłania. Gdyby wysyłały te dane przy pierwszej ciszy w medium, to
najprawdopodobniej doszłoby między nimi do kolejnej kolizji, a później do następnej, następnej... Dzięki przypadkowemu okresowi
opóźnienia sytuacja taka jest mało prawdopodobna i jeden z węzłów jako pierwszy zacznie transmisję. Wtedy drugi, zgodnie z
protokołem, będzie musiał czekać na ponowną ciszę w medium. Przypadkowość przerw gwarantuje, iż każdy z węzłów posiada
równe szanse w dostępie do medium i będzie mógł wysłać swoje dane.

Ograniczenia sieci Ethernet i sposoby ich omijania


Pojedynczy, wspólnie używany kabel może być podstawą pełnej sieci Ethernet. Jednakże w tym przypadku powstają praktyczne
ograniczenia maksymalnego rozmiaru takiej sieci, które wiążą się z ograniczeniami długości wspólnie wykorzystywanego kabla.
Sygnały elektryczne podróżują wzdłuż kabla bardzo szybko - prawie z szybkością światła, lecz, w miarę trwania tej podróży,
słabną, a elektryczne interferencje z sąsiednich urządzeń (na przykład świetlówek, silników, linii energetycznych, transformatorów,
itp.) mogą zniekształcać sygnał. Dlatego kabel powinien być na tyle krótki, aby urządzenie znajdujące się na jego drugim końcu
było w stanie odebrać czyste sygnały z minimalnym opóźnieniem. To nakłada ograniczenie w maksymalnej odległości pomiędzy
dwoma urządzeniami (zwane średnicą sieci - ang. network diameter) w sieci Ethernet. Dodatkowo, ponieważ przy technologii
CSMA/CD tylko jedno urządzenie może przesyłać dane w określonym momencie, istnieje praktyczne ograniczenie co do liczby
urządzeń, które mogą współistnieć w pojedynczej sieci. Podłączenie zbyt wielu węzłów do wspólnego segmentu powoduje wzrost
kolizji w dostępie do medium. Każdy węzeł musiałby czekać przez nadmiernie długi okres czasu zanim otrzymałby szansę
rozpoczęcia własnej transmisji.
Z tego powodu inżynierowie opracowali wiele urządzeń sieciowych, które usuwają te niedogodności.

Koncentrator Ethernet Sieć typu gwiazda oparta na koncentratorze.

Pierwszym popularnym medium Ethernet był koncentryczny kabel miedziany. Maksymalna długość takiego kabla wynosiła 500
metrów. W dużych budynkach czy w środowiskach campusów akademickich taka długość kabla nie zawsze była wystarczająca

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0011.php 56 / 253
Bit w zastosowaniach - Sieć Ethernet 2014-10-03

do podłączenia wszystkich urządzeń sieciowych. Z tego powodu został opracowany tzw. koncentrator sieciowy (ang. network
repeater lub network hub). Koncentratory łączą ze sobą wiele segmentów Ethernet, nasłuchując każdy z nich i powtarzając
usłyszany sygnał w każdym podłączonym segmencie. Dzięki koncentratorom można znacząco zwiększyć średnicę sieci - w
jednej sieci może być wiele koncentratorów.

Innym rozwiązaniem problemu dużej liczby węzłów jest podział segmentu sieci na wiele oddzielnych segmentów. Problemem jest
jednak to, iż rozdzielone segmenty nie mogą się ze sobą komunikować. Aby to umożliwić, zaprojektowano urządzenia łączące
segmenty sieci, które nazywają się mostkami sieciowymi (ang. network bridges). Łączą one ze sobą dwa lub więcej segmentów
Ethernet, zwiększając średnicę sieci, podobnie jak robią to koncentratory, lecz mostki dodatkowo pozwalają regulować ruch w
sieci. Potrafią one odbierać oraz nadawać dane jak każdy węzeł Ethernet, lecz zasada ich działania jest inna. Mostek sam z
siebie nie wysyła żadnych danych (nie jest to do końca prawdą, ponieważ mostki przesyłają pomiędzy sobą specjalne ramki
Ethernet, które pozwalają im komunikować się ze sobą, jednakże dane te nie są przeznaczone dla węzłów w sieci i są przez nie
ignorowane), lecz, podobnie jak koncentrator, przesyła dalej tylko to, co usłyszy od innych węzłów. Zadaniem mostków jest
przekazywanie danych pomiędzy segmentami sieci, kiedy jest to konieczne. Na powyższym rysunku mostek łączy segment 1 z
segmentem 2. Załóżmy, iż jeden z komputerów 1..4 wysyła ramkę danych. Ramka dociera do mostka. Teraz mostek sprawdza,
czy adresatem tej ramki jest komputer w innym segmencie sieci niż nadawca. Jeśli tak, przesyła ramkę do segmentu nadawcy.
Jeśli odbiorcą ramki jest komputer w tym samym segmencie sieci (np. komputer 1 przesyła dane do komputera 2 lub komputer 3
do komputera 4), mostek nie przekazuje jej do innych segmentów - tutaj jest różnica w pracy w stosunku do koncentratora. Dzięki
temu mostek zmniejsza ogólny ruch w sieci jako całość. Węzły są podzielona na grupy, które w swoich segmentach mogą
prowadzić niezależną transmisję danych, która nie zakłóca transmisji w innych segmentach sieci (np. komputery 1-2 oraz 3-4
mogą przesyłać dane między sobą w tym samym czasie). Również przesył ramki do innego segmentu ogranicza się tylko do
segmentu odbiorcy ramki - pozostałe segmenty nie są zakłócane zbędną dla nich transmisją. Dzięki tym własnościom mostki
przyczyniają się do zmniejszenia obciążenia sieci i pozwalają na efektywniejszą wymianę danych przy dużej liczbie węzłów.
Nowoczesny Ethernet często zupełnie nie przypomina swojego historycznego przodka. Dawniej węzły sieci łączone były ze sobą
za pomocą długich kabli koncentrycznych, dzisiaj stosuje się skręcone pary przewodów lub światłowody. Stary Ethernet zapewniał
transmisję na poziomie 10 megabitów na sekundę, nowoczesne sieci mogą pracować z szybkościami 100 (skrętka), czy nawet
1000 megabitów (światłowody)!

Najbardziej uderzającym postępem we współczesnych sieciach Ethernet jest stosowanie przełączanego Ethernetu. Sieci
przełączane zastępują przestarzałe wspólne medium transmisyjne. W sieciach tych każdy węzeł posiada swój własny segment
sieciowy, niezależny od innych. Segmenty te są podłączone do urządzenia zwanego przełącznikiem sieciowym (ang. network
switch), który działa podobnie do mostka sieciowego, lecz potrafi połączyć ze sobą naraz wiele z tych segmentów. Niektóre
współczesne przełączniki sieciowe potrafią współpracować z setkami oddzielnych segmentów. Ponieważ w każdym segmencie
jedynymi urządzeniami jest przełącznik sieciowy oraz węzeł końcowy, to przełącznik odczytuje każdą ramkę danych, zanim
dotrze ona do innego węzła. Następnie przełącznik przesyła dalej odebraną ramkę do właściwego segmentu, tak jak mostek, lecz
ponieważ w każdym segmencie jest tylko jeden węzeł, ramka dociera tylko do jej zamierzonego adresata. Pozwala to na
prowadzenie wielu równoległych transmisji w sieci przełączanej.
Przełączany Ethernet udostępnił kolejną korzyść: Ethernet full-duplex. Termin full-duplex oznacza w transmisji danych
możliwość równoczesnego nadawania i odbierania informacji (analogia do połączenia telefonicznego, gdzie obaj rozmówcy się
nawzajem słyszą). Stary Etherenet był typu half-duplex, co oznaczało, że informacja w danym czasie mogła być przesyłana
tylko w jednym kierunku (pojedynczy kabel nie pozwalał na dwukierunkową transmisję). W całkowicie przełączalnej sieci węzły
porozumiewają się tylko z przełącznikiem sieciowym i nigdy bezpośrednio ze sobą. Z tego powodu sieci przełączane wykorzystują
albo skręcane pary przewodów, albo włókna światłowodowe, w których kanały odbioru i nadawania danych są od siebie
odseparowane.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0011.php 57 / 253
Bit w zastosowaniach - Sieć Ethernet 2014-10-03

Skrętka UTP (ang. Unshielded Twisted Pair) Wtyk RJ-45 dla skrętki UTP

W takim rodzaju środowiska węzły Ethernet mogą zaniechać procesu wykrywania kolizji i transmitować wedle woli, ponieważ są
jedynymi urządzeniami z dostępem do medium w danym segmencie sieci. Dzięki temu węzeł może wysyłać dane do przełącznika
sieciowego w tym samym czasie, gdy przełącznik przesyła dane do węzła - obie transmisje odbywają się w oddzielnych kanałach
i nie dochodzi do ich zakłócania - uzyskujemy środowisko wolne od kolizji.
Więcej informacji na temat sieci Ethernet znajdziesz w artykule Sieci lokalne.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0011.php 58 / 253
Bit w zastosowaniach - Bramki logiczne 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Cyfrowe bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych
Zjawisko hazardu w sieciach logicznych

Współczesne komputery cyfrowe (istnieją również analogowe, ale tymi się tutaj nie
zajmujemy) zbudowane są z milionów elementów logicznych zwanych bramkami
cyfrowymi l u b bramkami logicznymi (ang. digital gate). Są to elementy
elektroniczne posiadające wejścia oraz wyjście danych:

Na wejścia bramki podajemy napięcia elektryczne, które mogą przyjmować dwa poziomy logiczne (dla układów TTL - Transistor-
Transistor-Logic):

poziom 0, L, F - napięcie w przedziale 0...0,8V


poziom 1, H, T - napięcie w przedziale 2...5V

Poziomy te odpowiadają ściśle wartościom logicznym stosowanym w Algebrze Boole'a. Poziom logiczny 0 jest oznaczany często
literką L od Low, czyli niski lub literką F od False, czyli fałsz. Podobnie poziom logiczny 1 jest oznaczany literką H od High, czyli
wysoki lub literką T od True, czyli prawda. Wynika z tego, iż w technice cyfrowej bity są reprezentowane poziomami napięć
elektrycznych (ta uwaga jest dla tych, którzy myślą, iż w komputerze jest dużo zer i jedynek - dosłownie... :) ).
Na wyjściu bramki również dostajemy napięcie elektryczne mieszczące się w przedziale dla 0 lub 1. Napięcie to jest funkcją
logiczną (np. negacją, alternatywą, koniunkcją itp.) realizowaną przez bramkę dla napięć wejściowych. W produkcji są bramki
realizujące wszystkie podstawowe funkcje logiczne Algebry Boole'a. Nie będziemy się zajmować budową wewnętrzną bramki
logicznej. Składa się ona z odpowiednio połączonych ze sobą elementów elektronicznych zwanych tranzystorami i opornikami.
Zrozumienie ich funkcji wymaga dosyć zaawansowanych wiadomości z zakresu elektroniki elementów półprzewodnikowych, zatem
darujemy sobie ten dział wiedzy, gdyż w sumie nie będzie nam on potrzebny. Potraktujemy bramkę logiczną jak czarną skrzynkę,
na której wejścia podaje się odpowiednie napięcia elektryczne, a na wyjściu otrzymuje się napięcie wynikowe w funkcji napięć
wejściowych - takie podejście jest zupełnie wystarczające do projektowania nawet bardzo złożonych sieci cyfrowych. Jednakże
bez kilku parametrów się nie obejdzie.

Obciążalność wyjść bramki


Wyjścia bramek można łączyć z wejściami innych bramek logicznych (samych wyjść nie wolno ze sobą łączyć, ponieważ
prowadzi to do zwarcia i w konsekwencji do uszkodzenia bramki) - w ten sposób powstaje sieć logiczna realizująca złożoną
funkcję logiczną. Każde wejście bramki dołączone do wyjścia innej bramki pobiera z niej pewien prąd elektryczny. Wyjścia bramek
mogą dostarczyć tylko określoną ilość prądu. Wynika z tego, iż do typowego wyjścia można podłączyć ograniczoną ilość wejść
innych bramek. Parametr ten nosi nazwę obciążalności wyjścia bramki. Zwykle przyjmuje się go na poziomie 10 (należy sprawdzić
w danych producenta) dla zwykłych bramek oraz 30 dla bramek o zwiększonej mocy wyjściowej.
Obciążalności wyjściowej bramki nie należy przekraczać, gdyż może to spowodować niestabilność sieci logicznej (kłopoty z
utrzymaniem odpowiedniego poziomu napięcia wyjściowego przez przeciążoną bramkę), a nawet spalenie niektórych jej
elementów.

Zapamiętaj:
Obciążalność wyjścia bramki logicznej określa ile wejść innych bramek można podłączyć do
tego wyjścia. Dla typowych bramek obciążalność wyjścia wynosi 10.

Czas propagacji
Poziom napięcia wyjściowego bramki jest funkcją logiczną Boole'a poziomu logicznego napięć wejściowych. Napięcie na wyjściu

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0012.php 59 / 253
Bit w zastosowaniach - Bramki logiczne 2014-10-03

nie zmienia się natychmiast po zmianie poziomu napięć wejściowych, lecz po pewnym czasie - typowo po 10 ns (należy
sprawdzić w danych producenta). Jest to spowodowane tym, iż tranzystory wewnątrz bramki muszą się odpowiednio
poprzełączać, a to wymaga czasu.

Zapamiętaj:
Czas propagacji bramki logicznej określa po jakim czasie od zmiany napięć wejściowych ustali się
napięcie na wyjściu. Czas propagacji typowo wynosi 10 ns dla bramek standardowych i 3 ns dla
bramek serii szybkiej. Im mniejszy czas propagacji, tym szybciej może pracować bramka.

Czas propagacji dla sieci logicznej jest sumą czasów propagacji bramek, poprzez które przechodzi kolejno sygnał logiczny. Czasy
te zawsze należy brać pod uwagę przy projektowaniu układów logicznych. W przeciwnym razie może wystąpić tzw. zjawisko
hazardu.

Symbole bramek logicznych


Na schematach elektronicznych (rysunkach obrazujących sposób połączenia wejść i wyjść bramek logicznych tworzących sieć
logiczną) bramki cyfrowe są reprezentowane przez unormowane symbole graficzne. Poniżej przedstawiamy te symbole wraz z
opisem funkcji logicznej realizowanej przez daną bramkę. Pamiętaj, iż symbole 0 i 1 oznaczają w rzeczywistości odpowiednie
poziomy napięć logicznych.
W symulacjach bramek i sieci logicznych kolor czerwony oznacza stan wysoki 1, kolor niebieski oznacza stan niski 0.
Bramka NOT
Bramka NOT realizuje operację negacji logicznej: y = a. W technice cyfrowej negację zaznaczamy albo jako NOT
a, albo a.

Bramka NOT a y=a


0 1
1 0

Bramka NOT często nazywana jest negatorem lub inwerterem, ponieważ "odwraca" poziom napięcia logicznego z
wejścia. Symbol kółeczka na wyjściu lub wejściu oznacza negację sygnału. Symbol inwertera można również
narysować jak poniżej:

Bramka NOT a y=a


0 1
1 0

Bramka AND
Bramka AND realizuje operację koniunkcji logicznej y = ab. W technice cyfrowej koniunkcję oznaczamy jako a
AND b lub ab.

a b y = ab
Bramka AND
0 0 0
0 1 0
1 0 0
1 1 1

Bramki logiczne mogą posiadać więcej niż dwa wejścia. Na przykład poniżej przedstawiamy bramkę AND
trójwejściową. Bramka realizuje funkcję logiczną y = abc.

a b c y = abc
0 0 0 0
Trójwejściowa 0 0 1 0
bramka AND
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1

Bramka OR

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0012.php 60 / 253
Bit w zastosowaniach - Bramki logiczne 2014-10-03

Bramka OR realizuje operację alternatywy logicznej y = a+b. W technice cyfrowej alternatywę oznaczamy jako a
OR b lub a+b.

a b y = a+b
Bramka OR
0 0 0
0 1 1
1 0 1
1 1 1

Bramka EX-OR i EX-NOR


Bramka EX-OR (ang. EXclusive-OR) realizuje funkcję różnicy symetrycznej:

y=a b

Bramka EX-NOR realizuje funkcję zaprzeczonej różnicy symetrycznej:

y=a b

a b y=a b a b y=a b
Bramka EX-OR Bramka EX-NOR
0 0 0 0 0 1
0 1 1 0 1 0
1 0 1 1 0 0
1 1 0 1 1 1

Bramki uniwersalne NAND i NOR


Zgodnie z prawami De Morgana każdą funkcję logiczną da się sprowadzić do kombinacji negacja/koniunkcja lub
negacja/alternatywa. Dlatego przemysł elektroniczny produkuje tzw. bramki uniwersalne NAND = NOT/AND i NOR =
NOT/OR, z których da się budować dowolne sieci logiczne. Korzyść jest oczywista - w budowanym urządzeniu
stosujemy jeden typ elementów, co obniża koszty produkcji. Na schematach logicznych bramki NAND i NOR mogą
posiadać dwa różne symbole (oparte na prawach De Morgana).

Bramka NAND Bramka NOR


a b y = ab a b y = a+b
0 0 1 0 0 1
0 1 1 0 1 0
1 0 1 1 0 0
1 1 0 1 1 0

Poniżej przedstawiamy sposoby uzyskania podstawowych funkcji logicznych przy pomocy bramek uniwersalnych
NAND i NOR.

Bramka NOT z bramki NAND z bramki NOR


= =

z bramek NAND
Bramka OR z bramek NOR
= =

z bramek NOR
Bramka AND z bramek NAND
= =

Musimy jednakże pamiętać, iż takie rozwiązanie jest gorsze od zastosowania właściwej bramki logicznej - zwiększa
się obciążenie wyjść bramek sterujących (w niektórych układach łączone ze sobą dwa wejścia bramki) oraz
zwiększa się czas propagacji (bramki pracują szeregowo).
Wzmacniacze-bufory

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0012.php 61 / 253
Bit w zastosowaniach - Bramki logiczne 2014-10-03

Bramki buforowe stosowane są do wzmacniania sygnałów cyfrowych lub do sterowania pracą różnych układów (np.
wyświetlaczem LED). Nie powodują one zmiany sygnału wejściowego (poza pewnym opóźnieniem spowodowanym
czasem proagacji).

Bramka buforowa
a y=a
0 0
1 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0012.php 62 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Scalone układy cyfrowe
Bramki logiczne
Zasilanie układów TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych
Zjawisko hazardu w sieciach logicznych

W latach 60 ubiegłego wieku wynaleziono układy scalone. Są to małe elementy


elektroniczne zawierające w swojej strukturze gotowe układy zbudowane z
dziesiątek, setek, tysięcy lub więcej tranzystorów. Dzięki układom scalonym stała
się możliwa budowa współczesnych komputerów. Nawet najprostszy komputer IBM
składa się wewnętrznie z milionów tranzystorów. Bez układów scalonych budowa
takiego komputera byłaby bardzo kosztowna i czasochłonna - na pewno nie byłoby
nas stać na własny, domowy komputer osobisty.
Bramki cyfrowe są umieszczane w układach scalonych, które produkuje wiele
różnych firm na całym świecie. Najpopularniejsze serie to obecnie TTL (bramki
zbudowane z tzw. tranzystorów bipolarnych) oraz CMOS (bramki zbudowane z
tranzystorów polowych).

Parametr TTL CMOS


Zasilanie 5V 3...15V
Poziom 0 0,4...0,8V 0V
Poziom 1 2...5V VDD
Czas propagacji 1,5...3 ns 30 ns
Obciążalność wyjść 10 duża

Układy TTL są zwykle 10 razy szybsze od układów CMOS (chociaż niektóre


współczesne konstrukcje CMOS niewiele ustępują w szybkości układom
TTL). Za to układy CMOS mogą być zasilane napięciem o dużej rozpiętości
oraz pobierają znikomą moc (szczególnie istotne dla urządzeń zasilanych
bateryjnie).
Z zewnątrz układ scalony przypomina małą kostkę z wyprowadzonymi metalowymi końcówkami, do których doprowadzamy lub z
których pobieramy sygnały elektryczne. Wewnątrz układu scalonego wyprowadzenia są połączone z małą płytką silikonową, na
której w drodze skomplikowanych procesów utworzono strukturę elektroniczną złożoną z setek lub tysięcy tranzystorów i
oporników.
Nóżki układu scalonego są odpowiednio numerowane. Zwróć uwagę, iż na obudowie znajduje się małe wycięcie lub mała dziurka.
Układ ustawiamy nóżkami w dół tak, aby wcięcie na obudowie znalazło się po stronie lewej. Wtedy numeracja nóżek rozpoczyna
się od lewego dolnego rogu i biegnie wokół układu scalonego. Poniżej przedstawiamy widok z góry układu o 14 wyprowadzeniach.

Gdy umiemy już odczytywać numery wyprowadzeń układów scalonych, możemy zdefiniować ich zawartość. Poniżej
przedstawiamy definicje wyprowadzeń kilku układów cyfrowych zawierających podstawowe bramki logiczne. Są to układy TTL serii
SN74xx oraz CMOS serii CD40xx. GND oznacza masę dla TTL (minus zasilania), VSS dla CMOS. VCC oznacza napięcie
zasilające układ scalony TTL (+5V), VDD dla CMOS. Wiedza ta pozwala na samodzielne konstruowanie prostych urządzeń
cyfrowych. Układy zestawiliśmy tak, aby w obu seriach otrzymać funkcjonalne odpowiedniki. Dlatego kolejność numeracji układów
CMOS nie jest zachowana.

Układy TTL serii SN74xx Układy CMOS serii CD40xx

CD4000 - dwie 3-wejściowe bramki NOR i inwerter

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 63 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

Brak odpowiednika TTL

SN7400 - cztery 2-wejściowe bramki uniwersalne NAND CD4011 - cztery 2-wejściowe bramki uniwersalne NAND

SN7402 - cztery 2-wejściowe bramki uniwersalne NOR CD4001 - cztery 2-wejściowe bramki uniwersalne NOR

SN7404 - sześć inwerterów


CD4009 - sześć inwerterów

SN7407 - sześć wzmacniaczy buforowych


CD4010 - sześć wzmacniaczy buforowych

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 64 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

SN7408 - cztery 2-wejściowe bramki AND CD4081 - cztery 2-wejściowe bramki AND

SN7410 - trzy 3-wejściowe bramki uniwersalne NAND CD4023 - trzy 3-wejściowe bramki uniwersalne NAND

SN7411 - trzy 3-wejściowe bramki AND CD4073 - trzy 3-wejściowe bramki AND

SN7420 - dwie 4-wejściowe bramki uniwersalne NAND CD4012 - dwie 4-wejściowe bramki uniwersalne NAND

SN7437 - cztery 2-wejściowe bramki buforowe NAND

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 65 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

Brak odpowiednika CMOS

SN7440 - dwie 4-wejściowe bramki buforowe NAND

Brak odpowiednika CMOS

SN7421 - dwie 4-wejściowe bramki AND CD4082 - dwie 4-wejściowe bramki AND

CD4002 - dwie 4-wejściowe bramki uniwersalne NOR

Brak odpowiednika TTL

CD4072 - dwie 4-wejściowe bramki OR

Brak odpowiednika TTL

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 66 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

SN7427 - trzy 3-wejściowe bramki uniwersalne NOR CD4025 - trzy 3-wejściowe bramki uniwersalne NOR

CD4075 - trzy 3-wejściowe bramki OR

Brak odpowiednika TTL

SN7430 - jedna 8-wejściowa bramka uniwersalna NAND CD4068 - jedna 8-wejściowa bramka uniwersalna NAND

CD4078 - jedna 8-wejściowa bramka uniwersalna NOR

Brak odpowiednika TTL

SN7432 - cztery 2-wejściowe bramki OR CD4071 - cztery 2-wejściowe bramki OR

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 67 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

SN7486 - cztery 2-wejściowe bramki EX-OR CD4070 - cztery 2-wejściowe bramki EX-OR

CD4077 - cztery 2-wejściowe bramki NOT-EX-OR

Brak odpowiednika TTL

Zasady łączenia wejść i wyjść


Do jednego wyjścia bramki można podłączyć kilka wejść innych bramek. Musimy tylko pamiętać, aby nie przekroczyć
obciążalności wyjścia bramki. Typowe wyjście bramki TTL może wysterować około 10 wejść innych bramek. Do bramek CMOS
reguła ta się nie odnosi, ponieważ pobierają one bardzo mały prąd wejściowy - mówimy, iż posiadają dużą oporność wejściową.
Nieużywane wejścia bramek należy podłączyć poprzez opornik 1kΩ (jeśli możemy zagwarantować, iż napięcie VCC nie przekroczy
5,5V, to wejście można połączyć bezpośrednio) do zasilania +5V (bramki AND i NAND) lub bezpośrednio do masy (bramki OR i
NOR). Nie wolno pozostawiać wejścia "wiszącego", ponieważ powoduje to pogorszenie warunków pracy bramki (zwiększa się czas
propagacji oraz zmniejsza się odporność na zakłócenia) i w konsekwencji może powodować błędy w działaniu urządzenia
cyfrowego.

Nie wolno łączyć ze sobą wyjść bramek, gdyż prowadzi to do zwarcia i w konsekwencji może uszkodzić układ cyfrowy.

Podłączanie diod LED


Dioda LED (ang. Light Emitting Diode) jest elementem elektronicznym, który przewodzi prąd tylko w jednym
kierunku. Gdy prąd płynie przez diodę LED, emituje ona światło. Kolor świecenia zależy od materiału użytego do
konstrukcji diody.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 68 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

konstrukcji diody.
Diody LED bardzo często wykorzystywane są w technice cyfrowej jako różnego rodzaju wskaźniki i oświetlenie -
np. zegary wyświetlają przy ich pomocy cyfry czasu i daty, telefony komórkowe używają ich do podświetlania
swoich ekranów i klawiatur.
Co powinniśmy wiedzieć o diodzie LED?
1. Gdy dioda przewodzi prąd utrzymuje się na niej względnie stałe napięcie UF. Jeśli napięcie
zasilające jest niższe od UF, dioda świecić nie będzie. Napięcie to jest różne dla różnych diod -
należy zawsze sprawdzać w katalogach producentów.
2. W trakcie świecenia dioda pobiera pewien prąd IF. Nie wolno przekraczać wartości maksymalnej
tego prądu, inaczej dioda ulegnie spaleniu.
3. Światło powstaje w diodzie LED na zasadzie generacji fotonów w strukturze półprzewodnika przy
przepływie prądu i nie jest spowodowane efektem cieplnym, jak w żarówce. Prawidłowo
wysterowana dioda LED jest zimna i może świecić dziesiątki lat.
4. Dioda posiada dwa wyprowadzenia: anodę (+A) i katodę (-K). Dioda przewodzi prąd, jeśli do anody
zostanie przyłożony plus napięcia zasilania, a do katody minus (zgodnie z rysunkiem obok). Przy
odwrotnej polaryzacji dioda LED nie przewodzi prądu.
Zwykle diody o średnicy 5mm (najbardziej popularne cenowo) pobierają prąd IF = 20mA. Jeśli chcemy uzyskać niezawodność
świecenia, to obniżamy ten prąd do 15mA (tyle może na wyjściu dostarczyć standardowa bramka TTL). Napięcie UF określamy z
poniższej tabelki:

Rodzaj diody LED Napięcie UF Prąd IF


zwykłe, czerwone 1,7V 15mA
jasne, czerwone
wysokowydajne, czerwone 1,9V 15mA
niskoprądowe, czerwone
pomarańczowe i żółte 2V 15mA
zielone 2,1V 15mA
jasne, białe
jasne, zielone bez żółtozielonego 3,4V 12mA
niebieskie zwykłe
jasne, niebieskie 4,6V 10mA

Do naszych celów najlepsze będą diody o UF = 1,7V ... 2,1V. Diody o wyższym napięciu wymagają tranzystora sterującego, który
zapewni im odpowiednie warunki zasilania. Diodę LED można podłączyć do wyjścia bramki TTL na dwa sposoby. W obu
przypadkach należy odpowiednio dobrać opór ograniczający napięcie i prąd diody LED. Poniżej przedstawiamy odpowiednie wzory
obliczeniowe:

Dioda świeci przy stanie wysokim Dioda świeci przy stanie niskim

Dla diody czerwonej o UF = 1,7V i IF = 0,015A otrzymamy:

Dla wersji pierwszej napięcie 3,5V jest napięciem wyjściowym bramki TTL w stanie wysokim. Napięcie to rozkłada się na opornik R
oraz diodę LED. Gdy odejmiemy od niego napięcie UF diody LED, to pozostanie napięcie na oporniku R. Dzieląc to napięcie przez
pożądany prąd IF otrzymujemy wartość opornika R, którą należy w tym układzie zastosować.
Dla wersji drugiej jest podobnie. Napięcie 4,6V jest napięciem zasilania pomniejszonym o napięcie 0,4V, które pojawia się na
wyjściu bramki w stanie niskim.
Powyższe dwa układy można połączyć w jeden - dioda LED1 będzie świeciła w stanie niskim, a dioda LED2 będzie świeciła w
stanie wysokim.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 69 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

Dobierając oporniki pamiętaj, iż w sprzedaży są wartości tworzące następujące szeregi:

E3 50% 10, 22, 47


E6 20% 10, 15, 22, 33, 47, 68
E12 10% 10, 12, 15, 18, 22, 27, 33, 39, 47, 56, 68, 82
E24 5% 10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47, 51, 56, 62, 68, 75, 82, 91

Wartości w szeregach mogą być mnożone przez potęgi liczby 10. W ten sposób otrzymujemy np. 33 x 1000 = 33kΩ. To dlatego w
drugim przykładzie zaokrągliłem wynik 193,333... do najbliższej, dostępnej wartości 200W (szereg E24, wartość 20 x 10). To małe
oszustwo nie wpłynie w sposób istotny na działanie opisywanego układu.
Więcej na temat szeregów oporników i kondensatorów znajdziesz w dowolnym podręczniku elektroniki oraz w Wikipedii.

Symulacja układów elektronicznych


Jeśli zainteresował cię temat konstruowania układów cyfrowych, to wiele pieniędzy zaoszczędzisz zaopatrzywszy się w
odpowiedni program symulacyjny. Godnym polecenia jest Electronic Workbench. Jest to wszechstronny symulator obwodów
elektronicznych, w tym również cyfrowych. Zanim zbudujemy dany układ, możemy go przetestować na symulatorze, wyłapując
różne błędy. Dzięki Electronic Workbench możesz posiadać swoje własne laboratorium elektroniczne.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 70 / 253
Bit w zastosowaniach - TTL i CMOS 2014-10-03

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0013.php 71 / 253
Bit w zastosowaniach - Zasilanie układów cyfrowych 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Zasilanie układów TTL i CMOS
Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych
Zjawisko hazardu w sieciach logicznych

UWAGA!
Niektóre z opisanych w tym rozdziale układów są zasilane napięciem sieciowym, które jest
niebezpieczne dla życia. Jeśli nie masz doświadczenia w pracy z napięciem sieciowym, nie
próbuj wykonywać samodzielnie tych układów - poproś kogoś doświadczonego lub kup zasilacz
fabryczny. Nierozważne eksperymenty z napięciem sieciowym mogą zakończyć się śmiertelnym
porażeniem prądem elektrycznym.

W pewnym momencie być może zechcesz samodzielnie zbudować jakieś urządzenie cyfrowe (wcale nie jest to takie trudne). W młodości sam
konstruowałem różne urządzenia - organy elektroniczne, zegary, liczniki, interfejsy do komputera itp. Podstawowym problemem do rozwiązania
jest zasilanie.

Zasilanie układów CMOS


Układy CMOS są mało wybredne co do parametrów zasilania. Napięcie zasilające może wynosić od 3V do 18V. Z tego powodu
oraz z uwagi na znikomy pobór mocy układy CMOS można zasilać bateryjnie (2-3 paluszki lub bateria 9V), co umożliwia budowę
urządzeń przenośnych lub pracujących w miejscu, gdzie trudno byłoby doprowadzić zasilanie sieciowe.
Lepszym rozwiązaniem jest zastosowanie zasilacza sieciowego o napięciu 6V..12V. Zasilacz nie musi być stabilizowany. Można
skorzystać z bogatej oferty zasilaczy, sprzedawanych w sklepach elektronicznych lub poprzez Internet. Koszt gotowego zasilacza
to około 20...40 zł.
Drugim rozwiązaniem jest samodzielne skonstruowanie zasilacza. Potrzebne nam będą następujące elementy:

Transformator
Transformator jest urządzeniem elektrycznym, które umożliwia zasilanie urządzeń o niższym napięciu
niż napięcie 230V w sieci elektrycznej w naszych domach. Zwykle składa się z dwóch uzwojeń
nawiniętych na specjalnym korpusie osadzonym na ferromagnetycznym rdzeniu. Pierwsze uzwojenie,
zwane uzwojeniem pierwotnym, jest zasilane bezpośrednio z sieci energetycznej 230V. Zmienny prąd
elektryczny pobierany z sieci przez uzwojenie pierwotne wytwarza w rdzeniu transformatora zmienny
strumień magnetyczny. Strumień przenika drugie uzwojenie, zwane wtórnym, indukując w nim zmienną
siłę elektromotoryczną. Jeśli do uzwojenia wtórnego zostanie przyłączony odbiornik, to popłynie w nim
prąd elektryczny. Napięcie elektryczne na uzwojeniu wtórnym jest zależne od stosunku liczby zwojów w uzwojeniu
pierwotnym i wtórnym oraz od napięcia zasilającego uzwojenie pierwotne. Zależność jest następująca:

n1 - liczba zwojów w uzwojeniu pierwotnym transformatora


n2 - liczba zwojów w uzwojeniu wtórnym transformatora
U1 - napięcie na uzwojeniu pierwotnym
U2 - napięcie na uzwojeniu wtórnym
n1 U1

n2 U2

Podany wzór jest przybliżony, ponieważ w rzeczywistym transformatorze występują różne straty - np. na grzanie się
rdzenia, na rozproszenie strumienia magnetycznego, na wewnętrznej oporności uzwojeń, na przemagnesowaniu
rdzenia itp. Na szczęście nie musimy wcale obliczać i budować transformatora - kupimy gotowy produkt w sklepie
elektronicznym lub poprzez Internet. Poniżej podaję dla ułatwienia parametry kilku polskich transformatorów
sieciowych, które z powodzeniem można wykorzystać na zasilacz układów CMOS:

Symbol Napięcie - Prąd AxBxC Moc


[V] - [A] [mm] [VA]
TS2/034 12V - 0,17A

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0014.php 72 / 253
Bit w zastosowaniach - Zasilanie układów cyfrowych 2014-10-03

TS2/035 12V - 0,17A

TS2/036 2 X 12V - 2 X 0,08A


TS2/037
TS2/040 10V - 0,14A
TS2/048 8,5V -0,15A
TS2/14 8,2V - 0,22A
TS2/15
TS2/34 10,1V - 0,18A 36 x 32 x 31 2
TS2/16 6V - 0,22A
TS2/33 8.6V - 0.16A
TS2/36 8,8V - 0,22A
TS2/39 10,6V - 0,2A
TS2/20
TS2/44 14V - 0,1A
TS2/56 15V - 0,1A
TS4/006 10V - 0,3A
TS4/022 12V - 0,33A
TS4/023
TS4/33 9V - 0,3A
TS4/34 13,3V - 0,2A
TS4/37 9,5V - 0,3A
42 x 38 x 35 4..5
TS4/40 8,5V - 0,5A
TS4/47 11V - 0,3A
TS5/10
TS5/3
10V - 0,5A
TS5/6
TS6/34
TS5/9 8V - 0,4A
TS6/12
TS6/16 8,5V - 0,7A

TS6/25 10V - 0,6A


TS6/30 8,5V - 0,7A 50 x 43 x 40 6
TS6/46 9V - 0,5A
TS6/49 8,5V - 0,5A
TS6/63 12V - 0,5A
TS8/029 12V 0,67A
49 x 43 x 41
TS8/17 10,5V - 0,5A 8
TS8/36 9V - 0,7A
TS10/018
TS10/019 12V - 0,8A
55 x 45 x 45
TS10/35 9V - 1A 10

TS10/4 13,7V - 0,65A


TS12/12 9,1V - 1,2A
60 x 47 x 50
TS12/3 11,5V - 1A 12
TS12/013 9V - 1,3A 55 x 45 x 45
TS15/29 9,4V - 1,9A 60 x 47 x 50 15
TS18/10 10,5V - 1,3A
18
TS18/16 12V - 1,4A
TS20/036 12V - 1,7A 60 x 50 x 50
TS20/038 10V - 2A
TS20/039
TS20/13 14V - 1,5A 20
TS20/14 12V - 1,5A
TS20/16 13,8V - 1,2A
TS20/20 8,7V - 2,3A 67 x 55 x 55
TS25/009 12V - 2A
TS25/010 25
TS25/25 13V - 3A

Dobierając transformator sieciowy musimy również zwrócić uwagę na maksymalną moc pobieraną przez urządzenie
cyfrowe. Aby nie przeciążyć zbytnio transformatora, powinien on posiadać moc 1,5 do 2 razy większą. Moc
pobieraną przez urządzenie obliczymy sumując moce tracone na każdym układzie scalonym - odpowiednie dane
uzyskamy w katalogu producenta, który jest również dostępny w sieci Internet.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0014.php 73 / 253
Bit w zastosowaniach - Zasilanie układów cyfrowych 2014-10-03

Prostownik mostkowy
Napięcie pobierane z uzwojenia wtórnego transformatora sieciowego jest
napięciem naprzemiennym, sinusoidalnym (ang. AC - Alternative Current). W
takiej formie nie może być użyte do zasilania układów cyfrowych, które
wymagają napięcia stałego (ang. DC - Direct Current). Musimy zastosować
prostownik (ang. rectifier). Prostownik zbudowany jest z diod (ang. diode).
Dioda jest elementem elektronicznym, który przewodzi prąd tylko w jednym
kierunku:

Dzięki tej własności diody stosowane są do prostowania napięcia zmiennego. W tym celu łączy się je w tzw. układ
mostka Grätza (ang. Graetz bridge rectifier). Jest to prostownik dwupołówkowy, którego zasadę działania wyjaśnia
poniższy rysunek:

Prostownik mostkowy Grätza możemy zbudować sami z 4 diod, jednakże lepszym


rozwiązaniem będzie zakup gotowego elementu. W sprzedaży są scalone prostowniki mostkowe
o prądzie od 1 do ponad 100A. Na nasze potrzeby zwykle wystarczy prostownik o prądzie od 1
do 5A. Scalone prostowniki mostkowe posiadają 4 wyprowadzenia - tzw. nóżki (ang. pins) . Do
nóżek oznaczonych znakiem ~ podłączamy wyjście uzwojenia wtórnego transformatora - to
będzie źródło napięcia zmiennego. Na nóżkach oznaczonych + i - pojawi się wyprostowane
napięcie stałe, którym będziemy zasilać urządzenie cyfrowe CMOS.
Na prostowniku mostkowym występuje zawsze spadek napięcia około 1,2V...1,4V (po 0,6...0,7V
na diodę).

Kondensator elektrolityczny
Pozostaje ostatni problem do rozwiązania. Napięcie na wyjściu prostownika mostkowego jest napięciem pulsującym:

W tej postaci napięcie pulsujące powodowałoby zakłócenia w pracy


układów cyfrowych. Musimy je wygładzić. Do tego celu stosuje się
kondensatory elektrolityczne o dużej pojemności - 1000µF...
4700µF/25V. Kondensator magazynuje i oddaje ładunki elektryczne.
Dzięki tej własności zmniejsza się pulsacja napięcia wyjściowego z
prostownika mostkowego - w momencie zaniku napięcia zasilającego,
napięcie utrzymuje kondensator:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0014.php 74 / 253
Bit w zastosowaniach - Zasilanie układów cyfrowych 2014-10-03

Zasilacz niestabilizowany
Poniżej przedstawiony jest schemat prostego zasilacza dla układów cyfrowych CMOS. Na wyjściu dodatkowo
zastosowano kondensator filtrujący o pojemności 0,1µF. Ma on na celu eliminację zakłóceń o wyższych
częstotliwościach, które mogą przedostawać się z sieci energetycznej.

Zasilanie układów TTL


Cyfrowe układy scalone TTL wymagają zasilania napięciem stałym, stabilizowanym o wartości 5V (odchyłka wynosi tylko 0,25V).
Budując urządzenie cyfrowe oparte na układach TTL mamy kilka opcji realizacji zasilania:
Zakup gotowego zasilacza - przemysł elektroniczny produkuje zasilacze stabilizowane o napięciu wyjściowym 5V, które idealnie
nadają się do zasilania urządzeń cyfrowych. Zasilacze te są dostępne w sklepach elektronicznych lub wysyłkowo w sklepach
internetowych. Koszt około 30 ... 40 zł.

Jeśli urządzenie cyfrowe pobiera dosyć dużą moc, to ciekawą opcją jest wykorzystanie zasilacza impulsowego ze starego
komputera IBM PC. Zasilacze AT można za bezcen kupić z drugiej ręki (np. na www.allegro.pl). Posiadają one dużą moc - około
150 - 200W, co w zupełności wystarcza nawet dla dużych urządzeń cyfrowych. Adaptacja takiego zasilacza nie powinna sprawić
wiele kłopotów - można nawet wykorzystać obudowę starego komputera PC-AT:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0014.php 75 / 253
Bit w zastosowaniach - Zasilanie układów cyfrowych 2014-10-03

Oznaczenia kabli
czarny - masa (minus)
czerwony - +5V
żółty - +12V

Wadą zasilaczy komputerowych jest wentylator, który może powodować uciążliwy hałas.
Trzecia opcja, to zbudowanie od podstaw prostego zasilacza stabilizowanego 5V. Będą nam potrzebne następujące elementy:

Transformator sieciowy o odpowiedniej mocy (6VA...8VA). Napięcie na uzwojeniu wtórnym powinno wynosić około 9V...12V.
Prostownik mostkowy o prądzie 1A.
Kondensatory elektrolityczne o pojemności 1000µF/16V i 10µF/16V do wygładzania pulsacji napięcia.
Dwa kondensatory o pojemności 0,1µF do filtrowania zakłóceń.
Scalony stabilizator LM 7805
Stabilizator LM 7805 jest układem scalonym, w którym umieszczono elektroniczny układ stabilizujący napięcie do
wartości 5V. Układ ten posiada bardzo dobre parametry i jest ogólnie dostępny w sklepach elektronicznych.
Zastosowanie tego układu znacznie uprości budowę zasilacza. Dodatkowo układ LM 7805 posiada wewnętrzne
zabezpieczenia przed zwarciem oraz przeciążeniem prądowym (maksymalny prąd zasilacza wynosi około 1A).
Układ posiada trzy wyprowadzenia, które na fotografii obok oznaczyliśmy 1, 2 i 3. Wyprowadzenie środkowe (2)
zawsze łączymy z masą układu (minus zasilania). Do wyprowadzenia (1) doprowadzamy napięcie niestabilizowane o
wartości ponad 9V. Z wyprowadzenia (3) pobieramy napięcie stabilizowane 5V. Jeśli zasilany układ pobiera prąd
większy od 0,1A, to układ LM7805 powinien być umieszczony na odpowiednio dużym radiatorze - w przeciwnym razie
zasilacz co pewien czas może się wyłączać przy przegrzaniu układu stabilizatora.
Schemat elektryczny zasilacza stabilizowanego 5V jest następujący:

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0014.php 76 / 253
Bit w zastosowaniach - Zasilanie układów cyfrowych 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0014.php 77 / 253
Bit w zastosowaniach - Układy kombinatoryczne 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Układy kombinatoryczne z bramek cyfrowych
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Z bramek logicznych buduje się tzw. sieci logiczne, czyli układy cyfrowe realizujące pewną funkcję
logiczną. Przy bardziej skomplikowanych funkcjach zamiast bramek stosuje się zwykle scalone
mikrokontrolery, czyli jednoukładowe komputery wyposażone we własny procesor, pamięć i układy
wejścia/wyjścia. Realizują one w sposób programowy funkcje sieci logicznej. Korzyść jest oczywista -
jeden uniwersalny układ kontrolera można stosować w olbrzymiej liczbie różnych urządzeń cyfrowych
(pralki, lodówki, telewizory, radia, odtwarzacze CD, itd.). Po prostu tak jest szybciej i taniej. Nie znaczy to
jednak, iż bramki cyfrowe odchodzą do lamusa. Są one wciąż szeroko stosowane w prostszych (i nie
tylko) urządzeniach cyfrowych, również w tych, które zostały wyposażone w scalony mikrokontroler.
Dla nas bramki cyfrowe będą materiałem do nauki logiki i techniki cyfrowej. Dzięki tej wiedzy zrozumiemy
dokładnie działanie poszczególnych składników komputera, co przyda nam się bardzo przy programowaniu, gdyż będziemy je
uprawiali świadomie, a nie na podstawie czarów i zaklęć.
W tym podrozdziale zebraliśmy kilkanaście prostych projektów układów cyfrowych, tzw. cegiełek, z których buduje się bardziej
zaawansowane urządzenia cyfrowe. Proponujemy zainstalowanie programu Electronic Workbench lub Hades, które umożliwiają
interaktywną symulację układów cyfrowych. W naszych projektach zastosowaliśmy symulację w Macromedia Flash, jednakże
wymienione oprogramowanie pozwala na wprowadzanie różnych zmian do układów i testowanie nowych rozwiązań. Możesz
również, o ile posiadasz cierpliwość i fundusze, pokusić się o realizację praktyczną niektórych projektów. Doświadczenia zdobyte
przy konstrukcji nawet najprostszego urządzenia cyfrowego są nieocenione - tego raczej nie nauczysz się w liceum na lekcjach
informatyki.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0015.php 78 / 253
Bit w zastosowaniach - Układy kombinatoryczne 2014-10-03

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0015.php 79 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Bramka sterowana OR - AND - EXOR - NAND
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
Bramka sterowana realizuje różne funkcje logiczne na sygnałach wejściowych a i b w zależności od stanu wejść sterujących s1 i
s2. Tego typu układy występują w procesorach w tzw. jednostce arytmetyczno-logicznej, która, w zależności od odczytanego z
pamięci rozkazu, wykonuje różne operacje arytmetyczne lub logiczne.

Określenie funkcji logicznych


Na początek zdefiniujmy zachowanie się naszej bramki. Będzie ona posiadała dwa wejścia danych a i b, dwa wejścia wyboru
funkcji s1 i s2 oraz jedno wyjście danych y:

Na wyjściu y bramki pojawia się stan logiczny będący funkcją stanów na wejściach a i b. Rodzaj funkcji określają wejścia
sterujące s1 i s2 zgodnie z poniższą tabelką:

s1 s2 Realizowana
funkcja Nazwa funkcji

0 0 y = a+b Alternatywa - OR
0 1 y = ab Koniunkcja - AND
1 0 y=aÅb Suma modulo 2 - EXOR
1 1 y = ab Zanegowana koniunkcja - NAND

Zadanie rozwiążemy wykorzystując do minimalizacji funkcji logicznej mapy Karnaugha. W tym celu rozpiszmy wszystkie
argumenty i wyniku funkcji. Dane zbierzemy w poniższej tabelce:

a b y s1 s2 Funkcja
0 0 0 0 0
0 1 1 0 0
OR
1 0 1 0 0
1 1 1 0 0

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0016.php 80 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

0 0 0 0 1
0 1 0 0 1
AND
1 0 0 0 1
1 1 1 0 1
0 0 0 1 0
0 1 1 1 0
EX-OR
1 0 1 1 0
1 1 0 1 0
0 0 1 1 1
0 1 1 1 1
NAND
1 0 1 1 1
1 1 0 1 1

Na podstawie tych danych tworzymy mapę Karnaugha. Z sygnałów wejściowych tworzymy dwie grupy współrzędnych mapy: ab
oraz s1s2. Pierwsze współrzędne zapisujemy w kodzie Graya po lewej stronie mapy, drugie współrzędne zapisujemy również w
kodzie Graya u góry mapy:

Współrzędne wyznaczają pola na mapie Karnaugha. W polach wpisujemy wartości funkcji y odczytane z tabelki:

Pola zawierające 1 łączymy w prostokątne obszary - pamiętamy, iż wymiary tych obszarów muszą być potęgami liczby 2
(1,2,4,8...):

Otrzymaliśmy 6 obszarów zawierających po dwa pola mapy. Rozpiszmy funkcje logiczne dla poszczególnych obszarów.

y1 = as1s2
y2 = bs1s2
y3 = abs1 y = y1 + y2 + y3 + y4 + y5 + y6
y4 = abs1 y = as1s2 + bs1s2 + abs1 + abs1 + as1s2 + abs1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0016.php 81 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

y5 = as1s2
y6 = abs1

Otrzymana funkcja nie jest jeszcze dla nas wygodna. Funkcje przekształcimy tak, aby można było w niej zastosować tylko bramki
uniwersalne NAND. Najpierw, stosując zasady Algebry Boole'a, dokonamy kilku uproszczeń:

y = as1s2 + bs1s2 + abs1 + abs1 + as1s2 + abs1


y = as1(s2 + b) +bs1s2 + abs1 + as1s2 + abs1
y = as1(s2 + b) +bs1(s2 + a) + as1s2 + abs1
y = as1(s2 + b) +bs1(s2 + a) + a(s1s2 + bs1)

Wyrażenia w nawiasach negujemy podwójnie (nie zmienia to wartości logicznej wyrażenia). Zgodnie z prawami DeMorgana
otrzymamy w nawiasach funkcję NAND:

Całość funkcji ponownie poddajemy podwójnej negacji:

Wynikowa funkcja zawiera jedynie negacje koniunkcji - zatem da się przedstawić w postaci sieci zbudowanej tylko z bramek
NAND.

Testowy program w języku C++


Aby sprawdzić działanie sieci przed jej budową, przygotowałem prosty program symulacyjny w C++. Program wypisuje dane i
wyniki zgodnie z podaną powyżej tabelką stanów logicznych.

// Symulacja sieci logicznej bramki sterowanej


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
int s1,s2,a,b,y;
cout << "a b y 1 2\n";
for(s1 = 0; s1 <= 1; s1++)
for(s2 = 0; s2 <= 1; s2++)
for(a = 0; a <= 1; a++)
for(b = 0; b <= 1; b++)
{
int xx = !(!a && s1 && !(!s2 && !b));
int yy = !(b && !s1 && !(s2 && !a));
int zz = !(a && !(!(!s1 && !s2) && !(!b && s1)));
y = !(xx && yy && zz);
cout << a << " " << b << " " << y << " " << s1 << " " << s2 << endl;
}
cout << endl;
return 0;
}

a b y s1 s2 Funkcja
0 0 0 0 0
0 1 1 0 0
OR
a b y 1 2 1 0 1 0 0
0 0 0 0 0 1 1 1 0 0
0 1 1 0 0
1 0 1 0 0 0 0 0 0 1
1 1 1 0 0
0 0 0 0 1 0 1 0 0 1
0 1 0 0 1 AND
1 0 0 0 1
1 0 0 0 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0016.php 82 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

1 0 0 0 1
1 1 1 0 1 1 1 1 0 1
0 0 0 1 0
0 1 1 1 0 0 0 0 1 0
1 0 1 1 0 0 1 1 1 0
1 1 0 1 0 EX-OR
0 0 1 1 1 1 0 1 1 0
0 1 1 1 1
1 0 1 1 1 1 1 0 1 0
1 1 0 1 1 0 0 1 1 1
0 1 1 1 1
NAND
1 0 1 1 1
1 1 0 1 1

Symulacja sieci logicznej


Wartości generowane przez program zgadzają się z tabelką, zatem możemy na podstawie wyprowadzonej funkcji zbudować sieć z
bramek NAND.

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: a - 2, b - 2, s1 - 3, s2 - 2

SN7400 x 2

SN7404 x 1

SN7410 x 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0016.php 83 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0016.php 84 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Czytnik klawiatury numerycznej
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
W tym artykule zaprojektujemy prosty czytnik klawiatury numerycznej (trochę mniej
skomplikowanej od tej po lewej stronie). Nasz układ będzie odczytywał wciśnięcia
pojedynczych klawiszy numerycznych 0,1,...,9 i zamieniał je na kod binarny 8421, który pojawi
się na wyjściu urządzenia.
Kod 8421 jest naturalnym, czterobitowym kodem. Jeśli bity zapiszemy numerując je od
ostatniego: b8 b4 b2 b1, to bit o stanie 1 posiada wartość: b8 = 8, b4 = 4, b2 = 2 i b1 = 1 -
stąd nazwa kodu 8421. Bit o stanie 0 ma wartość 0. Na przykład zapis: 0110
oznacza liczbę 6, ponieważ b8 = 0, b4 = 4, b2 = 2 i b1 = 0. Gdy zsumujemy poszczególne
wagi, otrzymamy 6. Poniższa tabelka podaje wartości kolejnych cyfr dziesiętnych w kodzie
8421.

Kod
8421 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Cyfra 0 1 2 3 4 5 6 7 8 9

Umówimy się, iż nasz czytnik będzie dawał na wyjściu kod 1111, gdy żaden klawisz nie jest naciśnięty. Łatwo zauważyć, iż 1111
nie reprezentuje w kodzie 8421 żadnej cyfry dziesiętnej - jest to zatem "bezpieczna" wartość. Każdy klawisz będzie zwykłym
włącznikiem, który, w przypadku naciśnięcia, zewrze linię klawisza do masy, czyli wymusi poziom logiczny 0. Gdy klawisz nie
jest naciśnięty, włącznik jest rozwarty i dzięki opornikowi na linii klawisza utrzymuje się poziom logiczny 1.

Określenie funkcji logicznych


Na linii klawisza aktywny zatem jest poziom logiczny 0 (oznacza wciśnięcie klawisza). Określmy sygnały wejściowe i wyjściowe
dla naszego czytnika klawiatury:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0017.php 85 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Ponieważ nasz układ ma kilka sygnałów wyjściowych, każdy z nich rozważymy jako osobną funkcję logiczną danych
wejściowych. Interesuje nas, kiedy sygnał wyjściowy bn przyjmuje wartość 0 (tak, 0, gdyż w tym projekcie stan 1 jest stanem
nieaktywnym - pracujemy w tzw. logice ujemnej):

b1 = 0, gdy naciśnięto klawisz: K0, K2, K4, K6, K8


b2 = 0, gdy naciśnięto klawisz: K0, K1, K4, K5, K8, K9
b4 = 0, gdy naciśnięto klawisz: K0, K1, K2, K3, K8, K9
b8 = 0, gdy naciśnięto klawisz: K0, K1, K2, K3, K4, K5, K6, K7

W każdym innym przypadku odpowiedni sygnał wyjściowy jest równy 1. Stąd otrzymujemy wzory:

Dlaczego takie? Odpowiedź jest bardzo prosta. Jeśli którykolwiek z klawiszy będzie naciśnięty, to jego linia Kn przyjmie stan 0, a
pozostałe linie będą w stanie 1. Wtedy wartość koniunkcji też wyniesie 0. Otrzymane funkcje zamieniamy na NAND negując
dwukrotnie:

Symulacja sieci logicznej

Zwróć uwagę, iż nasza sieć została zaprojektowana tylko dla pojedynczych klawiszy. Jeśli użytkownik naciśnie naraz kilka
klawiszy, to odczyt nie jest poprawny.

Zestawienie elementów
SN7400 x 1 SN7430 x 4

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0017.php 86 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Scalony dekoder klawiatury - SN74147


Jeśli klawiatura wyposażona jest tylko w 9 klawiszy (od 1 do 9), to zamiast bramek można zastosować scalony konwerter 1 z 9 na
kod 8421. Układ ten ma symbol SN74147 i pracuje w logice ujemnej (aktywny jest stan 0).
SN74147 - transkoder 1 z 9 na kod 8421

Układ osiada 9 wejść ponumerowanych od 1 do 9. Do wejść tych podłączamy linie klawiszy w identyczny sposób, jak w naszym
rozwiązaniu. Na 4 wyjściach D, C, B i A pojawia się zanegowany kod 8421 naciśniętego klawisza. Tabelka stanów dla układu
SN74147 jest następująca:

Wejścia Wyjścia
1 2 3 4 5 6 7 8 9 D C B A
1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 0
X 0 1 1 1 1 1 1 1 1 1 0 1
X X 0 1 1 1 1 1 1 1 1 0 0
X X X 0 1 1 1 1 1 1 0 1 1
X X X X 0 1 1 1 1 1 0 1 0
X X X X X 0 1 1 1 1 0 0 1
X X X X X X 0 1 1 1 0 0 0
X X X X X X X 0 1 0 1 1 1
X X X X X X X X 0 0 1 1 0

Stan X oznacza 0 lub 1, czyli stan wejść poprzedzających dany klawisz jest bez znaczenia. W przypadku jednoczesnego
naciśnięcia dwóch lub więcej klawiszy układ SN74147 zwraca kod najstarszego klawisza (zatem układ ten działa lepiej od naszej
sieci).

Symulacja pracy dekodera SN74147

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0017.php 87 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Wnioski
Dzięki zastosowaniu gotowego dekodera klawiatury, sieć logiczna uległa znacznemu uproszczeniu. Również ilość układów
scalonych zmniejszyła się z 5 do 2. Wniosek jest jeden. Warto stosować gotowe rozwiązania wszędzie tam, gdzie jest to
możliwe.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0017.php 88 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Transkoder kodu 8421 na kod Gray'a
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Określenie funkcji logicznych


Konwerter (lub transkoder) jest układem cyfrowym, który przekształca wyrazy jednego kodu binarnego w odpowiadające im wyrazy
innego kodu. Nasz konwerter tłumaczy wyrazy kodu 8421 w wyrazy kodu Gray'a. Konwerter posiada 4 wejścia, na które podajemy
wyrazy w kodzie 8421, i 4 wyjścia, na których pojawia się odpowiedni dla danych wejściowych wyraz w kodzie Gray'a.

Tablica stanów wejściowych i wyjściowych dla konwertera jest następująca:

Kod 8421 Kod Gray'a


b8 b4 b2 b1 D C B A
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 0 0 0 1 1
0 0 1 1 0 0 1 0
0 1 0 0 0 1 1 0
0 1 0 1 0 1 1 1
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 0
1 0 0 0 1 1 0 0
1 0 0 1 1 1 0 1
1 0 1 0 1 1 1 1
1 0 1 1 1 1 1 0
1 1 0 0 1 0 1 0
1 1 0 1 1 0 1 1
1 1 1 0 1 0 0 1
1 1 1 1 1 0 0 0

Przy wyznaczaniu funkcji logicznych wyjść D, C, B i A możemy wykorzystać mapy Karnaugha. Jednakże istnieje dużo prostszy
sposób, który opisaliśmy w artykule o kodzie Gray'a. Otóż jeśli chcemy z wyrazu kodu 8421 uzyskać odpowiadający mu wyraz w
kodzie Gray'a, to wykonujemy operację różnicy symetrycznej (EX-OR) nad danym wyrazem 8421 i jego przesunięciem o 1 bit w
prawo. Na przykład, dla wyrazu kodu 8421 1011 wyraz kodu Gray'a jest równy:

01011
http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0018.php 89 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

01011
Å1011
1110

Stąd już można prosto wyprowadzić odpowiednie funkcje logiczne dla wyjść transkodera:

D = b8
C = b8 Å b4
B = b4 Å b2
A = b2 Å b1

Symulacja sieci logicznej

Zestawienie elementów
Obciążenia wejść: b1 - 1, b2 - 2, b4 - 2, b8 - 1 + obciążenie linii D.
SN7486 x 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0018.php 90 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0018.php 91 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Transkoder kodu Gray'a na kod 8421
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Określenie funkcji logicznych


Konwerter (transkoder) jest układem cyfrowym, który przekształca wyrazy jednego kodu binarnego w odpowiadające im wyrazy
innego kodu. Nasz konwerter tłumaczy wyrazy kodu Gray'a na wyrazy kodu 8421. Konwerter posiada 4 wejścia, na które
podajemy wyrazy w kodzie Gray'a, i 4 wyjścia, na których pojawia się odpowiedni dla danych wejściowych wyraz w kodzie 8421.

Tablica stanów wejściowych i wyjściowych dla konwertera jest następująca:

Kod Gray'a Kod 8421


D C B A b8 b4 b2 b1
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 0
0 0 1 0 0 0 1 1
0 1 1 0 0 1 0 0
0 1 1 1 0 1 0 1
0 1 0 1 0 1 1 0
0 1 0 0 0 1 1 1
1 1 0 0 1 0 0 0
1 1 0 1 1 0 0 1
1 1 1 1 1 0 1 0
1 1 1 0 1 0 1 1
1 0 1 0 1 1 0 0
1 0 1 1 1 1 0 1
1 0 0 1 1 1 1 0
1 0 0 0 1 1 1 1

Do wyznaczenia funkcji logicznych dla wyjść b8, b4, b2 i b1 wykorzystujemy algorytm opisany w rozdziale o kodzie Gray'a.
Najstarszy bit b8 jest równy bitowi D. Pozostałe bity wyznaczamy na podstawie bitów wyznaczonych wcześniej.

b8 = D

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0019.php 92 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

b4 = C Å b8
b2 = B Å b4
b1 = A Å b2

Sieć działa kaskadowo. Oznacza to, iż sygnał wyjściowy ustali się dopiero po czasie równym sumie czasów propagacji dla
poszczególnych bramek.

Symulacja sieci logicznej

Zestawienie elementów
SN7486 x 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0019.php 93 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Generator bitu parzystości
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Określenie funkcji logicznych


Bit parzystości umożliwia pewną ochronę transmisji danych przed błędami. Dokładnie opisaliśmy jego zastosowanie w rozdziale o
kodach EDC. W tym projekcie naszym zadaniem jest stworzenie sieci logicznej, która generuje bit parzystości dla 8 bitów danych
informacyjnych. Sieć będzie posiadała 8 wejść, na które podajemy kolejne bity informacyjne, oraz jedno wyjście, na którym
pojawia się bit parzystości. Poniżej przedstawiamy schemat blokowy takiej sieci:

Stworzenie układu cyfrowego dodającego bit parzystości na pierwszy rzut oka wydaje się trudne. W rzeczywistości tak nie jest.
Przypomnijmy sobie funkcję różnicy symetrycznej realizowaną przez bramkę EX-OR (układ TTL - SN7486, CMOS - CD4070) :

a b y
Bramka EX-OR
0 0 0
0 1 1
1 0 1
1 1 0

Na wyjściu otrzymujemy 1, jeśli na wejściu bramki jest nieparzysta liczba jedynek. Własność tą wykorzystamy w układzie
generacji bitu parzystości. Nad każdą parą bitów w zbiorze wejściowym {b1,b2,b3,b4,b5,b6,b7,b8} wykonujemy operację różnicy
symetrycznej:

w1 = b1 Å b2
w2 = b3 Å b4
w3 = b5 Å b6
w4 = b7 Å b8

W wyniku otrzymujemy nowy zbiór 4-elementowy:

{w1,w2,w3,w4}

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0020.php 94 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Jeśli w zbiorze {b1,b2,b3,b4,b5,b6,b7,b8} była parzysta liczba jedynek, to w zbiorze {w1,w2,w3,w4} również musi ich być ilość
parzysta. Ta sama własność jest również spełniona dla nieparzystości. Po prostu operacja różnicy symetrycznej zachowuje
parzystość i nieparzystość. Uzasadnienie jest bardzo proste:

Parzystość:
Zakładamy, iż zbiór {b1,b2,b3,b4,b5,b6,b7,b8} zawiera parzystą liczbę jedynek. Jeśli w parze kolejnych bitów
występują dwie jedynki lub dwa zera, to różnica symetryczna da nam w wyniku 0, które jest zawsze parzyste. Jeśli
w jednej z par bity są różne, to dostaniemy w wyniku 1, lecz z uwagi na parzystość zbioru wejściowego, w innej
parze również muszą być dwa różne bity. Zatem dostaniemy dwie jedynki, a to jest ilość parzysta. W wyniku
zawsze dostaniemy parzystą ilość bitów 1. Innych możliwości nie ma.

Nieparzystość:
Zakładamy, iż zbiór {b1,b2,b3,b4,b5,b6,b7,b8} zawiera nieparzystą liczbę jedynek. Wynika z tego, iż ilość par
kolejnych bitów, które różnią się od siebie jest liczbą nieparzystą. Każda taka para zostanie zamieniona przez
różnicę symetryczną na 1. Zatem w zbiorze wynikowym ilość jedynek będzie nieparzysta. Innych możliwości nie ma.

Udowodniliśmy, iż zbiór wynikowy {w1,w2,w3,w4} zachowuje parzystość/nieparzystość zbioru wejściowego


{b1,b2,b3,b4,b5,b6,b7,b8}, ale liczba bitów jest dwukrotnie mniejsza. Nad zbiorem wynikowym znów wykonujemy operację różnicy
symetrycznej:

x1 = w1 Å w2
x2 = w3 Å w4

Otrzymujemy kolejny zbiór wynikowy {x1,x2}, który zachowuje parzystość/nieparzystość zbioru {w1,w2,w3,w4}, a zatem także
parzystość/nieparzystość zbioru wejściowego {b1,b2,b3,b4,b5,b6,b7,b8}. Nad bitami x1 i x2 znów wykonujemy operację różnicy
symetrycznej:

y = x1 Å x2

Wynik y jest równy 1, jeśli zbiór wejściowy zawierał nieparzystą ilość bitów 1, a 0, gdy liczba bitów 1 była parzysta. Zatem y jest
poszukiwanym bitem parzystości. Aby otrzymać pełną funkcję zastąpmy kolejne symbole x i w wykonanymi operacjami:

y = x1 Å x2
y = (w1 Å w2) Å (w3 Å w4)
y = {(b1 Å b2) Å (b3 Å b4)} Å {(b5 Å b6) Å (b7 Å b8)}

Testowy program w języku C++


Otrzymaliśmy poszukiwaną funkcję logiczną. Poniżej przedstawiamy program w C++, który wykorzystuje tę funkcję do generacji
bitu parzystości.

// Generacja bitu parzystości


// (C)2006 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
for(int i = 0; i < 256; i++)
{
int v = i;
// Generujemy bit parzystości
v ^= v >> 1;
v ^= v >> 2;
v ^= v >> 4;
// Bit parzystości wstawiamy ponad bit b8 w słowie danych
v = (i | (v << 8)) & 0x1ff;
// Wyświetlamy wynik
for(int m = 0x100; m; m >>= 1) cout << ((v & m) ? 1 : 0);
cout << " ";
}

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0020.php 95 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

cout << endl << endl;


return 0;
}

000000000 100000001 100000010 000000011 100000100 000000101 000000110 100000111


100001000 000001001 000001010 100001011 000001100 100001101 100001110 000001111
100010000 000010001 000010010 100010011 000010100 100010101 100010110 000010111
000011000 100011001 100011010 000011011 100011100 000011101 000011110 100011111
100100000 000100001 000100010 100100011 000100100 100100101 100100110 000100111
000101000 100101001 100101010 000101011 100101100 000101101 000101110 100101111
000110000 100110001 100110010 000110011 100110100 000110101 000110110 100110111
100111000 000111001 000111010 100111011 000111100 100111101 100111110 000111111
101000000 001000001 001000010 101000011 001000100 101000101 101000110 001000111
001001000 101001001 101001010 001001011 101001100 001001101 001001110 101001111
001010000 101010001 101010010 001010011 101010100 001010101 001010110 101010111
101011000 001011001 001011010 101011011 001011100 101011101 101011110 001011111
001100000 101100001 101100010 001100011 101100100 001100101 001100110 101100111
101101000 001101001 001101010 101101011 001101100 101101101 101101110 001101111
101110000 001110001 001110010 101110011 001110100 101110101 101110110 001110111
001111000 101111001 101111010 001111011 101111100 001111101 001111110 101111111
110000000 010000001 010000010 110000011 010000100 110000101 110000110 010000111
010001000 110001001 110001010 010001011 110001100 010001101 010001110 110001111
010010000 110010001 110010010 010010011 110010100 010010101 010010110 110010111
110011000 010011001 010011010 110011011 010011100 110011101 110011110 010011111
010100000 110100001 110100010 010100011 110100100 010100101 010100110 110100111
110101000 010101001 010101010 110101011 010101100 110101101 110101110 010101111
110110000 010110001 010110010 110110011 010110100 110110101 110110110 010110111
010111000 110111001 110111010 010111011 110111100 010111101 010111110 110111111
011000000 111000001 111000010 011000011 111000100 011000101 011000110 111000111
111001000 011001001 011001010 111001011 011001100 111001101 111001110 011001111
111010000 011010001 011010010 111010011 011010100 111010101 111010110 011010111
011011000 111011001 111011010 011011011 111011100 011011101 011011110 111011111
111100000 011100001 011100010 111100011 011100100 111100101 111100110 011100111
011101000 111101001 111101010 011101011 111101100 011101101 011101110 111101111
011110000 111110001 111110010 011110011 111110100 011110101 011110110 111110111
111111000 011111001 011111010 111111011 011111100 111111101 111111110 011111111

Na powyższym wydruku bit parzystości jest pierwszym bitem każdej wyświetlonej danej. Ponieważ program działa poprawnie, to
wnioskujemy, iż nasza funkcja również jest poprawna.

Symulacja sieci logicznej

Zestawienie elementów
SN7486 x 2

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0020.php 96 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0020.php 97 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Konwerter kodu BCD na kod Aikena
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
K od BCD (ang. Binary Coded Decimal - Dziesiętny Kodowany Binarnie) jest
powszechnie stosowany w przemyśle przy sterowaniu różnych wyświetlaczy
cyfrowych - kasy, czujniki temperatury, wskaźniki itp. W kodzie BCD kodujemy
binarnie poszczególne cyfry liczby dziesiętnej. Ponieważ cyfr jest 10, to każda z
nich jest kodowana przy pomocy 4 bitów:

cyfra 0 1 2 3 4 5 6 7 8 9
BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001

Zwróć uwagę, iż kod BCD jest zwykłym, okrojonym kodem binarnym 8421. Wartość
słówka kodowego odpowiada bezpośrednio wartości reprezentowanej przez niego
cyfry. Pozostałe kombinacje bitów (1010, 1011, 1100, 1101, 1110 i 1111) nie są w
kodzie BCD używane (można je wykorzystać do reprezentacji innych obiektów niż
cyfry: kropka dziesiętna, minus, plus itp.). Na przykład 4cyfrowa liczba dziesiętna
2158 zostanie zakodowana w kodzie BCD jako 4 słowa kodowe:
2158(10) = 0010 0001 0101 1000(BCD)
Więcej na temat kodu BCD znajdziesz tutaj.

Howard Hathaway Aiken (ur. 8-03-1900, zm. 14-03-1973) był amerykańskim matematykiem,
pionierem komputeryzacji, twórcą jednego z pierwszych komputerów Mark I. Opracował on kod
binarny do zapisu cyfr liczb dziesiętnych, który nazwano kodem Aikena (dzisiaj posiadający tylko
znaczenie dydaktyczne):

cyfra 0 1 2 3 4 5 6 7 8 9
Kod Aikena 0000 0001 0010 0011 0100 1011 1100 1101 1110 1111

W kodzie Aikena bity posiadają kolejno wagi 2 4 2 1, co bardzo łatwo sprawdzić na podstawie
powyższej tabelki. Jeśli porównamy ze sobą kod BCD i kod Aikena:

cyfra 0 1 2 3 4 5 6 7 8 9 Howard Hathaway Aiken


BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Kod Aikena 0000 0001 0010 0011 0100 1011 1100 1101 1110 1111

to zauważymy, iż dla cyfr 0,1,2,3 i 4 są one takie same. Różnica powstaje dopiero od cyfry 5. Jeśli rozpiszemy wszystkie kolejne
kombinacje 4-bitów, to otrzymamy następujące położenia słówek kodujących cyfry dziesiętne w obu kodach:

8421 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
BCD 0 1 2 3 4 5 6 7 8 9 niewykorzystane
Kod Aikena 0 1 2 3 4 niewykorzystane 5 6 7 8 9

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0021.php 98 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Począwszy od cyfry 5 słowa wartości słówek kodowych kodu Aikena są przesunięte o 6 pozycji w stosunku do słówek kodu BCD.

Określenie funkcji logicznych


Po tym krótkim wstępie przejdźmy do projektu - naszym zadaniem jest zaprojektowanie sieci logicznej, która konwertuje kody cyfr
BCD na kody cyfr w kodzie Aikena. Zdefiniujmy sygnały wejściowe i wyjściowe naszego transkodera:

Na wejścia abcd transkodera podajemy słowo kodu BCD. Na wyjściach ABCD otrzymujemy odpowiednik w kodzie Aikena. Na
podstawie poniższej tabelki zamian wyrazów kodowych określimy funkcje logiczne dla poszczególnych wyjść A,B,C i D:

BCD Aiken
Cyfra
d c b a D C B A
0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1
2 0 0 1 0 0 0 1 0
3 0 0 1 1 0 0 1 1
4 0 1 0 0 0 1 0 0
5 0 1 0 1 1 0 1 1
6 0 1 1 0 1 1 0 0
7 0 1 1 1 1 1 0 1
8 1 0 0 0 1 1 1 0
9 1 0 0 1 1 1 1 1

Do minimalizacji funkcji wykorzystamy mapy Karnaugha (ponieważ nasz koder nie wykorzystuje wszystkich kombinacji bitów
wejściowych, stan X oznacza dowolną wartość bitu wyjściowego w zależności od potrzeb) :
Sygnał D

Obszar D1 Obszar D2 Obszar D3

00 01 11 10 00 01 11 10 00 01 11 10
00 0 0 0 0 00 0 0 0 0 00 0 0 0 0

01 0 1 1 1 01 0 1 1 1 01 0 1 1 1

11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X
D1 = ca D2 = cb D3 = d

Sygnał C

Obszar C1 Obszar C2 Obszar C3

00 01 11 10 00 01 11 10 00 01 11 10
00 0 0 0 0 00 0 0 0 0 00 0 0 0 0

01 1 0 1 1 01 1 0 1 1 01 1 0 1 1

11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X
C1 = ca C2 = cb C3 = d

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0021.php 99 / 253
Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Sygnał B

Obszar B1 Obszar B2 Obszar B3

00 01 11 10 00 01 11 10 00 01 11 10
00 0 0 1 1 00 0 0 1 1 00 0 0 1 1

01 0 1 0 0 01 0 1 0 0 01 0 1 0 0

11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X
B1 = cba B2 = cb B3 = d

Sygnał A

Obszar A

00 01 11 10
00 0 1 1 0

01 0 1 0 0

11 X X X X

10 0 1 X X
A=a

Podsumujmy otrzymane wyniki:

Testowy program w języku C++


Za pomocą prostych przekształceń Algebry Boole'a otrzymaliśmy wzory funkcji logicznych wyjść A, B, C i D, w których występują
jedynie funkcje NAND - pozwoli to zrealizować układ kodera za pomocą jednorodnych układów scalonych. Najpierw jednak
napiszemy program testujący wyznaczone funkcje logiczne:

// Symulacja sieci konwertera kodu BCD na kod Aikena


// (C)2007 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
bool we[4],wy[4];
int i,j,m;
cout << "CYFRA BCD AIKEN\n"
"------d-c-b-a--D-C-B-A\n";
for(i = 0; i < 10; i++)
{
// obliczamy kod BCD kolejnej cyfry

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0021.php 100 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

for(m = 8, j = 3; m; j--, m >>= 1) we[j] = (i & m) > 0 ;


// kod BCD -> kod Aikena
wy[0] = we[0];
wy[1] = !(!(we[2] && !we[1] && we[0]) && !(!we[2] && we[1]) && !we[3]);
wy[2] = !(!(we[2] && !(we[0] && !we[1])) && !we[3]);
wy[3] = !(!(we[2] && !(!we[0] && !we[1])) && !we[3]);
// prezentujemy wyniki
cout << " " << i << " ";
for(j = 3; j >= 0; j--) cout << we[j] << " ";
cout << " ";
for(j = 3; j >= 0; j--) cout << wy[j] << " ";
cout << endl;
}
cout << endl;
return 0;
}

BCD Aiken
Cyfra
d c b a D C B A
0 0 0 0 0 0 0 0 0
CYFRA BCD AIKEN
------d-c-b-a--D-C-B-A 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 1 0
1 0 0 0 1 0 0 0 1
2 0 0 1 0 0 0 1 0 3 0 0 1 1 0 0 1 1
3 0 0 1 1 0 0 1 1
4 0 1 0 0 0 1 0 0 4 0 1 0 0 0 1 0 0
5 0 1 0 1 1 0 1 1 5 0 1 0 1 1 0 1 1
6 0 1 1 0 1 1 0 0
7 0 1 1 1 1 1 0 1 6 0 1 1 0 1 1 0 0
8 1 0 0 0 1 1 1 0
9 1 0 0 1 1 1 1 1 7 0 1 1 1 1 1 0 1
8 1 0 0 0 1 1 1 0
9 1 0 0 1 1 1 1 1

Symulacja sieci logicznej


Otrzymane w programie wyniki dokładnie odpowiadają tabeli konwersji kodów. Zatem możemy przystąpić do konstrukcji sieci z
bramek NAND.

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: a - 3, b - 2, c - 3, d - 1,

SN7400 x 2

SN7404 x 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0021.php 101 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

SN7410 x 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0021.php 102 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Konwerter kodu Aikena na kod BCD
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Określenie funkcji logicznych


W poprzednim rozdziale zaprojektowaliśmy sieć logiczną. która przekształcała kod BCD na kod Aikena. Teraz zaprojektujemy
sieć realizującą zadanie odwrotne - przekształcanie kodu Aikena na kod BCD. Na początek, jak zwykle, określimy sygnały
wejściowe i wyjściowe naszego transkodera:

Na wejścia abcd transkodera podajemy słowo kodu Aikena. Na wyjściach ABCD otrzymujemy odpowiednik w kodzie BCD. Na
podstawie poniższej tabelki zamian wyrazów kodowych określimy funkcje logiczne dla poszczególnych wyjść A, B, C i D:

Aiken BCD
Cyfra
d c b a D C B A
0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1
2 0 0 1 0 0 0 1 0
3 0 0 1 1 0 0 1 1
4 0 1 0 0 0 1 0 0
5 1 0 1 1 0 1 0 1
6 1 1 0 0 0 1 1 0
7 1 1 0 1 0 1 1 1
8 1 1 1 0 1 0 0 0
9 1 1 1 1 1 0 0 1

Sygnał D

Obszar D

00 01 11 10
00 0 0 0 0

01 0 X X X

11 0 0 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0022.php 103 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

10 X X 0 X
D = cb

Sygnał C

Obszar C1 Obszar C2

00 01 11 10 00 01 11 10
00 0 0 0 0 00 0 0 0 0

01 1 X X X 01 1 X X X

11 1 1 0 0 11 1 1 0 0

10 X X 1 X 10 X X 1 X
C1 = cb C2 = dc

Sygnał B

Obszar B1 Obszar B2

00 01 11 10 00 01 11 10
00 0 0 1 1 00 0 0 1 1

01 0 X X X 01 0 X X X

11 1 1 0 0 11 1 1 0 0

10 X X 0 X 10 X X 0 X
B1 = db B2 = db

Sygnał A

Obszar A

00 01 11 10
00 0 1 1 0

01 0 X X X

11 0 1 1 0

10 X X 1 X
A=a

Podsumujmy otrzymane wyniki:

Testowy program w języku C++


Przed realizacją sieci z bramek logicznych tworzymy prosty program symulacyjny, w którym sprawdzimy otrzymane
funkcje logiczne.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0022.php 104 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

// Symulacja sieci konwertera kodu Aikena na kod BCD


// (C)2007 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
bool we[4],wy[4];
int i,j,m;
cout << "CYFRA AIKEN BCD\n"
"------d-c-b-a--D-C-B-A\n";
for(i = 0; i < 10; i++)
{
// obliczamy kod Aikena kolejnej cyfry
for(m = 8, j = 3; m; j--, m >>= 1) we[j] = (i + ((i > 4) ? 6 : 0) & m) > 0 ;
// kod Aikena -> kod BCD
wy[0] = we[0];
wy[1] = !(!(we[3] && !we[1]) && !(!we[3] && we[1]));
wy[2] = !(!(we[2] && !we[1]) && !(we[3] && !we[2]));
wy[3] = !(!(we[2] && we[1]));
// prezentujemy wyniki
cout << " " << i << " ";
for(j = 3; j >= 0; j--) cout << we[j] << " ";
cout << " ";
for(j = 3; j >= 0; j--) cout << wy[j] << " ";
cout << endl;
}
cout << endl;
return 0;
}

Aiken BCD
Cyfra
d c b a D C B A
0 0 0 0 0 0 0 0 0
CYFRA AIKEN BCD
------d-c-b-a--D-C-B-A 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 1 2 0 0 1 0 0 0 1 0
2 0 0 1 0 0 0 1 0 3 0 0 1 1 0 0 1 1
3 0 0 1 1 0 0 1 1
4 0 1 0 0 0 1 0 0 4 0 1 0 0 0 1 0 0
5 1 0 1 1 0 1 0 1
6 1 1 0 0 0 1 1 0 5 1 0 1 1 0 1 0 1
7 1 1 0 1 0 1 1 1 6 1 1 0 0 0 1 1 0
8 1 1 1 0 1 0 0 0
9 1 1 1 1 1 0 0 1 7 1 1 0 1 0 1 1 1
8 1 1 1 0 1 0 0 0
9 1 1 1 1 1 0 0 1

Symulacja sieci logicznej


Wyniki z programu są zgodne z tabelą konwersji kodów, zatem funkcje możemy zrealizować w postaci sieci logicznej.

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: a - 0, b - 3, c - 3, d - 3,

SN7400 x 2

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0022.php 105 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

SN7404 x 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0022.php 106 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Sterowanie wyświetlaczem kostki do gry
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
Różnego rodzaju gry elektroniczne są wciąż bardzo popularne i w przyszłości zapewne sytuacja ta
nie ulegnie zmianie. Gry losowe wykorzystują przypadkowość różnych zdarzeń - np. ułożenie kart
w potasowanej talii, zatrzymanie się kulki na odpowiednim polu ruletki, układ oczek na kostce itp.
Samodzielne zaprojektowanie losowej gry logicznej może być bardzo ambitnym wyzwaniem. Ten
rozdział może wam w tym pomóc.

Określenie funkcji logicznych


W tym rozdziale zaprojektujemy sterownik elektronicznej kostki do gry. Na wejściu będziemy podawać w kodzie 8421 liczbę od 0
do 7, a na wyjściu otrzymamy sygnały sterujące 7 diodami LED, tworzącymi oczka kostki. Opisany sterownik może posłużyć jako
element gry elektronicznej w kości, ale to już inny temat. Poniżej przedstawiamy definicje sygnałów wejściowych i wyjściowych
sterownika:

W poniższej tabeli zestawiliśmy kody wejściowe oraz wynikowe stany kostki. W ostatnim wierszu są podane wyjścia sterownika,
które mają stan wysoki dla danego układu kostki.

kod 000 001 010 011 100 101 110 111

kostka

wyjścia - D BF BDF ABFG ABDFG ABCEFG ABCDEFG

Na kostce nie występuje nigdy układ 7 oczek - wprowadziliśmy go jednak umyślnie wraz z układem zerowym (a nóż się przyda).
Na podstawie powyższej tabeli tworzymy mapy Karnaugha dla poszczególnych wyjść, sterujących diodami LED w kostce.

Wyjścia A i G : 100, 101, 110, 111

00 01 11 10
0 0 0 0 0
1 1 1 1 1
A=G=c

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0023.php 107 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Wyjścia B i F : 010, 011, 100, 101, 110, 111

00 01 11 10 00 01 11 10
0 0 0 1 1 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1
B1 = c B2 = b

Wyjścia C i E : 110, 111

00 01 11 10
0 0 0 0 0
1 0 0 1 1

Wyjście D : 001, 011, 101, 111

00 01 11 10
0 0 1 1 0
1 0 1 1 0
D=a

Podsumujmy:

A=G=c

D=a

Symulacja sieci logicznej


Na podstawie wyprowadzonych funkcji projektujemy sieć logiczną z bramek NAND. Symulację tej sieci przedstawiamy poniżej. W
rzeczywistym układzie cyfrowym wyjścia sterownika muszą być zbuforowane, ponieważ pojedyncza bramka może nie być w
stanie wysterować dwie diody LED, które sumarycznie pobierają prąd ponad 30 mA.

Zestawienie elementów
SN7400 x 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0023.php 108 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

SN7404 x 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0023.php 109 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Sterowanie wyświetlaczem cyfrowym LED
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
Wyświetlacze cyfrowe LED (ang. Light Emitting Diode - dioda emitująca światło, LED
display, digital LED display, BCD to seven segment decoder/driver) są powszechnie
stosowane w różnym sprzęcie elektronicznym - radia, telewizory, zasilacze, urządzenia
pomiarowe, termometry cyfrowe, zegary itp. Zbudowane są z diod LED, które pod wpływem
przyłożonego napięcia (około 2...2,4V) świecą różnymi kolorami, najczęściej na czerwono,
chociaż obecnie inne kolory również stają się popularne.
Świecenie diody LED nie ma nic wspólnego z procesami termicznymi, jak np. w żarówce.
Pod wpływem przepływu elektronów przez specjalnie dobrany półprzewodnik następuje
wzbudzanie jego atomów i generacja fotonów o ściśle określonych długościach fal, które
wydostają się na zewnątrz dając efekt świecenia diody. Procesy te są bardzo szybkie -
diodę LED można załączać i wyłączać miliony razy na sekundę (własność tę wykorzystują
np. nadajniki światłowodowe). Ponieważ w trakcie świecenia dioda nie rozgrzewa się do
wysokich temperatur, jej bezawaryjny czas pracy jest bardzo długi - około 50...100 tysięcy
godzin. Więcej na temat diod LED znajdziesz tutaj.

Budowa cyfrowego wyświetlacza LED


Typowy, cyfrowy wyświetlacz LED zbudowany jest z 7 segmentów, za pomocą których można wyświetlać wszystkie cyfry oraz
kilkanaście liter i innych znaków (do liter stosuje się wyświetlacze alfanumeryczne, które posiadając dodatkowe segmenty
pozwalają wyświetlać wszystkie litery alfabetu).

Każdy segment jest podświetlany przez oddzielną diodę LED. Aby zaoszczędzić na liczbie wyprowadzeń wyświetlacza,
wewnętrznie diody są ze sobą połączone katodami (wyświetlacz o wspólnej katodzie - ang. common cathode) lub anodami
(wyświetlacz o wspólnej anodzie - ang. common anode).

Wspólna katoda Wspólna anoda

Wyświetlacz o wspólnej katodzie zaświeca segmenty, jeśli na ich wejścia sterujące podamy poziom wysoki. Z kolei wyświetlacz o
wspólnej anodzie reaguje na poziom niski na wejściach sterujących. Należy na ten fakt zwrócić uwagę przy konstruowaniu
urządzenia cyfrowego. Praktycznie wszystkie wyświetlacze LED są produkowane w obu wariantach połączeń.

Określenie funkcji logicznych

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 110 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

W tym projekcie zbudujemy sterownik wyświetlacza LED ze wspólną katodą. Na początek określmy sygnały wejściowe i
wyjściowe

Sterownik posiada cztery wejścia D, C, B, A, na które podajemy cyfrę dziesiętną w kodzie BCD. W odpowiedzi na wyjściach a, b,
c, d, e, f i g pojawiają się sygnały sterujące odpowiednimi segmentami wyświetlacza LED. Poniższa tabelka definiuje sygnały
wyjściowe w funkcji sygnałów wejściowych.

wejście wyjście
cyfra
D C B A a b c d e f g
0 0 0 0 1 1 1 1 1 1 0

0 0 0 1 0 1 1 0 0 0 0

0 0 1 0 1 1 0 1 1 0 1

0 0 1 1 1 1 1 1 0 0 1

0 1 0 0 0 1 1 0 0 1 1

0 1 0 1 1 0 1 1 0 1 1

0 1 1 0 1 0 1 1 1 1 1

0 1 1 1 1 1 1 0 0 1 0

1 0 0 0 1 1 1 1 1 1 1

1 0 0 1 1 1 1 1 0 1 1

Na podstawie tabelki tworzymy tablice Karnaugha dla poszczególnych sygnałów wyjściowych i dokonujemy minimalizacji funkcji
logicznych, sprowadzając je do funkcji NAND.

Obszar a1 Obszar a2 Obszar a3 Obszar a4

00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10
00 1 0 1 1 00 1 0 1 1 00 1 0 1 1 00 1 0 1 1

01 0 1 1 1 01 0 1 1 1 01 0 1 1 1 01 0 1 1 1

11 X X X X 11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X 10 1 1 X X

a1 = D a2 = B a3 = AC a4 = A C

Obszar b1 Obszar b2 Obszar b3

00 01 11 10 00 01 11 10 00 01 11 10
00 1 1 1 1 00 1 1 1 1 00 1 1 1 1

01 1 0 1 0 01 1 0 1 0 01 1 0 1 0

11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 111 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

b1 = C b2 = A B b3 = AB

Obszar c1 Obszar c2 Obszar c3

00 01 11 10 00 01 11 10 00 01 11 10
00 1 1 1 0 00 1 1 1 0 00 1 1 1 0

01 1 1 1 1 01 1 1 1 1 01 1 1 1 1

11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X

c1 = B c2 =A c3 = C

Obszar d1 Obszar d2 Obszar d3 Obszar d4 Obszar d5

00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10
00 1 0 1 1 00 1 0 1 1 00 1 0 1 1 00 1 0 1 1 00 1 0 1 1

01 0 1 0 1 01 0 1 0 1 01 0 1 0 1 01 0 1 0 1 01 0 1 0 1

11 X X X X 11 X X X X 11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X 10 1 1 X X 10 1 1 X X

d1 = D d2 = AB d3 = B C d4 = ABC d5 = A C

Obszar e1 Obszar e2

00 01 11 10 00 01 11 10
00 1 0 0 1 00 1 0 0 1

01 0 0 0 1 01 0 0 0 1

11 X X X X 11 X X X X

10 1 0 X X 10 1 0 X X

e1 = AB e2 = A C

Obszar f1 Obszar f2 Obszar f3

00 01 11 10 00 01 11 10 00 01 11 10
00 1 0 0 0 00 1 0 0 0 00 1 0 0 0

01 1 1 1 1 01 1 1 1 1 01 1 1 1 1

11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X

f1 = A B f2 = C f3 = D

Obszar g1 Obszar g2 Obszar g3 Obszar g4

00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10
00 0 0 1 1 00 0 0 1 1 00 0 0 1 1 00 0 0 1 1

01 1 1 0 1 01 1 1 0 1 01 1 1 0 1 01 1 1 0 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 112 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

11 X X X X 11 X X X X 11 X X X X 11 X X X X

10 1 1 X X 10 1 1 X X 10 1 1 X X 10 1 1 X X

g1 = B C g2 = D g3 = AB g4 = B C

Podsumujmy otrzymane funkcje logiczne dla poszczególnych wyjść sterownika:

Testowy program w języku C++


Przed budową sieci logicznej sprawdzimy poprawność funkcji za pomocą prostego programu w języku C++. Program wygeneruje
kolejne wartości sygnałów wejściowych D, C, B i A, a następnie na ich podstawie wyliczy wartości sygnałów wyjściowych a, b, c ,
d, e, f i g. Jeśli otrzymamy zgodność z tabelką, to funkcje są wyprowadzone poprawnie.

// Test funkcji dla sterownika wyświetlacza LED


//---------------------------------------------
// (C)2007 mgr Jerzy Wałaszek I-LO w Tarnowie
//---------------------------------------------
#include <iostream>
using namespace std;
int main()
{
bool A,B,C,D,a,b,c,d,e,f,g;
int i;
cout << " D C B A | a b c d e f g | X \n"
"---------+---------------+---\n";
for(i = 0; i < 10; i++)
{
// obliczamy sygnały wejściowe
D = (i & 8) > 0;
C = (i & 4) > 0;
B = (i & 2) > 0;
A = (i & 1) > 0;
// obliczamy sygnały wyjściowe
a = !((!B&&!D)&&!(A&&C)&&!(!A&&!C));
b = !(C&&!(!A&&!B)&&!(A&&B));
c = !(!A&&B&&!C);
d = !(!D&&!(!A&&B)&&!(!C&&!(A&&!B))&&!(A&&!B&&C));
e = !!(!A&&!(!B&&C));
f = !(!(!A&&!B)&&!C&&!D);
g = !(!(!B&&C)&&!D&&!(B&&!(A&&C)));
// wyświetlamy wyniki
cout << " "
<< D << " " << C << " " << B << " " << A << " | "
<< a << " " << b << " " << c << " " << d << " "
<< e << " " << f << " " << g << " | " << i << endl;
}
cout << endl;
return 0;
}

D C B A a b c d e f g X
D C B A | a b c d e f g | X 0 0 0 0 1 1 1 1 1 1 0 0
---------+---------------+-- 0 0 0 1 0 1 1 0 0 0 0 1
0 0 0 0 | 1 1 1 1 1 1 0 | 0
0 0 0 1 | 0 1 1 0 0 0 0 | 1 0 0 1 0 1 1 0 1 1 0 1 2
0 0 1 0 | 1 1 0 1 1 0 1 | 2 0 0 1 1 1 1 1 1 0 0 1 3

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 113 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

0 0 1 0 | 1 1 0 1 1 0 1 | 2 0 0 1 1 1 1 1 1 0 0 1 3
0 0 1 1 | 1 1 1 1 0 0 1 | 3 0 1 0 0 0 1 1 0 0 1 1 4
0 1 0 0 | 0 1 1 0 0 1 1 | 4
0 1 0 1 | 1 0 1 1 0 1 1 | 5 0 1 0 1 1 0 1 1 0 1 1 5
0 1 1 0 | 1 0 1 1 1 1 1 | 6 0 1 1 0 1 0 1 1 1 1 1 6
0 1 1 1 | 1 1 1 0 0 1 0 | 7
1 0 0 0 | 1 1 1 1 1 1 1 | 8 0 1 1 1 1 1 1 0 0 1 0 7
1 0 0 1 | 1 1 1 1 0 1 1 | 9 1 0 0 0 1 1 1 1 1 1 1 8
1 0 0 1 1 1 1 1 0 1 1 9

Otrzymane wyniki zgadzają się z tabelką sygnałów wejściowych i wyjściowych sterownika, zatem wyprowadzone funkcje są
poprawne i możemy przystąpić do budowy sieci logicznej.

Symulacja sieci logicznej

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: A - 5, B - 5, C - 5, D - 1,
SN7400 x 3

SN7404 x 1

SN7410 x 2

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 114 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

SN7420 x 1

Scalony sterownik wyświetlacza LED - SN7448


Sieć logiczna sterownika wyświetlacza cyfrowego LED wymaga zastosowania aż 7 układów scalonych TTL. Ponieważ
wyświetlacze LED są powszechnie stosowane w różnym sprzęcie cyfrowym, przemysł elektroniczny produkuje scalone sterowniki,
które zawierają taką sieć wewnątrz pojedynczego układu, udostępniając dodatkowe funkcje. Takim właśnie scalonym sterownikiem
jest na przykład układ scalony TTL SN7448 (również SN7446, SN7447 i SN7449 - sterują wyświetlaczami o wspólnej anodzie).

SN7448

Układ SN7448 pozwala bezpośrednio sterować 7 segmentowym wyświetlaczem LED o wspólnej katodzie, czyli realizuje podobne
funkcje do naszego sterownika. Typowa aplikacja dla tego układu jest następująca:

Sygnały sterujące LT, BI/RBO i RBI (LT - LED Test, BI - Blanking Input - wejście wygaszające, RBO - Ripple-Blanking Output -
wyjście sztafetowego wygaszania, RBI - Ripple-Blanking Input - wejście sztafetowego wygaszania) umożliwiają testowanie
wyświetlacza oraz wygaszanie początkowych zer w układach sterujących większą liczbą wyświetlaczy cyfr. Więcej informacji na

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 115 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

temat tego układu znajdziesz w katalogach producenta. Poniższa tabelka przedstawia zależności pomiędzy sygnałami
wejściowymi i wyjściowymi dla układu SN7448. Zwróć uwagę na uboższe o jeden segment wyświetlanie cyfr 6, 7 i 9.

Wejścia Wyjścia
BI/RBO LED Uwagi
LT RBI D C B A a b c d e f g
1 1 0 0 0 0 1 1 1 1 1 1 1 0
1 X 0 0 0 1 1 0 1 1 0 0 0 0
1 X 0 0 1 0 1 1 1 0 1 1 0 1
1 X 0 0 1 1 1 1 1 1 1 0 0 1
1 X 0 1 0 0 1 0 1 1 0 0 1 1
Cyfry
1 X 0 1 0 1 1 1 0 1 1 0 1 1
1 X 0 1 1 0 1 0 0 1 1 1 1 1
1 X 0 1 1 1 1 1 1 1 0 0 0 0
1 X 1 0 0 0 1 1 1 1 1 1 1 1
1 X 1 0 0 1 1 1 1 1 0 0 1 1
1 X 1 0 1 0 1 0 0 0 1 1 0 1
1 X 1 0 1 1 1 0 0 1 1 0 0 1
1 X 1 1 0 0 1 0 1 0 0 0 1 1 Znaki
1 X 1 1 0 1 1 1 0 0 1 0 1 1 specjalne
1 X 1 1 1 0 1 0 0 0 1 1 1 1
1 X 1 1 1 1 1 0 0 0 0 0 0 0
X X X X X X 0 0 0 0 0 0 0 0 Wygaszenie
1 0 0 0 0 0 0 0 0 0 0 0 0 0 Wygaszenie zera
0 X X X X X 1 1 1 1 1 1 1 1 Test diod LED

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0024.php 116 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Konwerter kodu BCD na kod 1 z 10
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
Kod 1 z 10 jest kodem binarnym, w którym poszczególne bity reprezentują cyfry dziesiętne. W słowie kodowym może być
ustawiony tylko jeden bit. Pozostałe bity muszą być w stanie przeciwnym. Cyfry dziesiętne są przyporządkowane poszczególnym
bitom. Poniższa tabelka opisuje poszczególne słówka kodu 1 z 10.

logika dodatnia logika ujemna


Cyfra
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
1 0 1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1
2 0 0 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 1
3 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1
4 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1
5 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1
6 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 1 1 1
7 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1
8 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 0 1
9 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0

Tego typu kody nadają się do sterowania wyświetlaczy lampowych, w których poszczególne bity sterują włókienkami w
wyświetlaczu, uformowanymi w kształcie odpowiedniej cyfry. Również mogą mieć zastosowanie w różnych układach zamków
cyfrowych i rozdzielaczach sygnałów cyfrowych.

Określenie funkcji logicznych


Zaprojektujemy teraz prosty konwerter kodu BCD na kod 1 z 10, przy czym wybierzemy logikę ujemną - cyfra reprezentowana
stanem niskim odpowiadającego jej bitu. Najpierw zdefiniujemy sygnały wejściowe i wyjściowe:

Realizacja funkcji wyjściowych qi jest bardzo prosta. Każde wyjście qi reaguje tylko na jeden stan sygnałów wejściowych A, B, C i
D. Skoro tak, dla każdego wyjścia zastosujemy 4 wejściową bramkę NAND. Do wejść bramki doprowadzimy odpowiednie
kombinację sygnałów i ich zaprzeczeń. Kombinacja ta powinna być taka, aby dla danego kodu BCD na wejściach bramki były
same jedynki logiczne - wtedy wyjście bramki NAND przyjmie stan 0. Skorzystamy z poniższej tabelki:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0025.php 117 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

D C B A D C B A Funkcja
0 0 0 0 1 1 1 1

0 0 0 1 1 1 1 0

0 0 1 0 1 1 0 1

0 0 1 1 1 1 0 0

0 1 0 0 1 0 1 1

0 1 0 1 1 0 1 0

0 1 1 0 1 0 0 1

0 1 1 1 1 0 0 0

1 0 0 0 0 1 1 1

1 0 0 1 0 1 1 0

Symulacja sieci logicznej


Na wejściu zastosowano inwertory w celu ograniczenia obciążenia wnoszonego przez poszczególne wejścia A, B, C i D, które
muszą wysterować wejścia bramek NAND. Dzięki temu rozwiązaniu każde wejście wnosi obciążalność równą 1.

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: A - 1, B - 1, C - 1, D - 1,

SN7404 x 2

SN7420 x 5

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0025.php 118 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Scalony konwerter kodu BCD na kod 1 z 10 - SN7442


Sieć logiczna konwertera wymaga zastosowania aż 7 układów scalonych TTL. To samo zadanie realizuje jeden układ scalonego
konwertera BCD na kod 1 z 10 o symbolu SN7442. Schemat wyprowadzeń tego układu przedstawiamy poniżej.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0025.php 119 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Sterownik wskaźnika postępu z 10 diod LED
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
Wskaźniki postępu (ang. LED Light Bar Graph Displays) są zbudowane z kilkunastu
diod LED, które zapalają się w ten sposób, iż tworzą słupek świetlny o różnych
wysokościach. Stosuje się je powszechnie w sprzęcie audiowizualnym do wskazywania
poziomu sygnałów wejściowych lub wyjściowych - człowiek lepiej reaguje na sygnały
ilościowe (długość paska, wychylenie wskazówki), niż na liczby. Z tego powodu do
dzisiaj wciąż używa się w lotnictwie wskaźniki analogowe zamiast czysto cyfrowych.

Sam wskaźnik można zakupić jako gotowy produkt lub zbudować samemu z pojedynczych diod LED. Diody łączy się anodami lub
katodami, uzyskując w ten sposób różne schematy zasilania z wyjść układów cyfrowych:

Wspólna anoda Wspólna katoda

dla Ud = 1,8V dla Ud = 1,8V


otrzymujemy: otrzymujemy:

Dioda świeci przy Dioda świeci przy


stanie niskim na stanie wysokim na
wyjściu bramki wyjściu bramki
sterującej sterującej

Określenie funkcji logicznych


Zaprojektujemy sterownik wskaźnika postępu zbudowanego z 10 czerwonych diod LED połączonych anodami - stanem aktywnym
będzie stan niski. Na wejścia sterownika podamy wartość od 0 do 10 w kodzie 8421. Na wyjściu otrzymamy sygnały sterujące
poszczególnymi diodami LED wskaźnika.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 120 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Funkcje logiczne wyjść q1 ... q10 określimy na podstawie tabelki:

Wartość D C B A q1 q2 q3 q4 q5 q6 q7 q8 q9 q10
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 0 1 1 1 1 1 1 1 1 1
2 0 0 1 0 0 0 1 1 1 1 1 1 1 1
3 0 0 1 1 0 0 0 1 1 1 1 1 1 1
4 0 1 0 0 0 0 0 0 1 1 1 1 1 1
5 0 1 0 1 0 0 0 0 0 1 1 1 1 1
6 0 1 1 0 0 0 0 0 0 0 1 1 1 1
7 0 1 1 1 0 0 0 0 0 0 0 1 1 1
8 1 0 0 0 0 0 0 0 0 0 0 0 1 1
9 1 0 0 1 0 0 0 0 0 0 0 0 0 1
10 1 0 1 0 0 0 0 0 0 0 0 0 0 0

Układamy tablice Karnaugha i odczytujemy z nich zminimalizowane funkcje wyjść sterownika. Funkcje sprowadzamy do operacji
NAND.

Obszar q1

00 01 11 10
00 1 0 0 0

01 0 0 0 0

11 X X X X

10 0 0 X 0

Obszar q2

00 01 11 10
00 1 1 0 0

01 0 0 0 0

11 X X X X

10 0 0 X 0

Obszar q3A Obszar q3B

00 01 11 10 00 01 11 10
00 1 1 0 1 00 1 1 0 1

01 0 0 0 0 01 0 0 0 0

11 X X X X 11 X X X X

10 0 0 X 0 10 0 0 X 0

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 121 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Obszar q4

00 01 11 10
00 1 1 1 1

01 0 0 0 0

11 X X X X

10 0 0 X 0

Obszar q5A Obszar q5B

00 01 11 10 00 01 11 10
00 1 1 1 1 00 1 1 1 1

01 1 0 0 0 01 1 0 0 0

11 X X X X 11 X X X X

10 0 0 X 0 10 0 0 X 0

Obszar q6A Obszar q6B

00 01 11 10 00 01 11 10
00 1 1 1 1 00 1 1 1 1

01 1 1 0 0 01 1 1 0 0

11 X X X X 11 X X X X

10 0 0 X 0 10 0 0 X 0

Obszar q7A Obszar q7B Obszar q7C

00 01 11 10 00 01 11 10 00 01 11 10
00 1 1 1 1 00 1 1 1 1 00 1 1 1 1

01 1 1 0 1 01 1 1 0 1 01 1 1 0 1

11 X X X X 11 X X X X 11 X X X X

10 0 0 X 0 10 0 0 X 0 10 0 0 X 0

Obszar q8

00 01 11 10
00 1 1 1 1

01 1 1 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 122 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

11 X X X X

10 0 0 X 0

Obszar q9A Obszar q9B

00 01 11 10 00 01 11 10
00 1 1 1 1 00 1 1 1 1

01 1 1 1 1 01 1 1 1 1

11 X X X X 11 X X X X

10 1 0 X 0 10 1 0 X 0

Obszar q10

00 01 11 10
00 1 1 1 1

01 1 1 1 1

11 X X X X

10 1 1 X 0

Podsumujmy otrzymane funkcje wyjść q sterownika:

Testowy program w języku C++


Przed przystąpieniem do budowy sieci logicznej sprawdzamy poprawność wyprowadzonych funkcji wyjść q w odpowiednio
przygotowanym programie testowym w języku C++.

// Test funkcji dla sterownika wskaźnika postępu


//----------------------------------------------
// (C)2007 mgr Jerzy Wałaszek I-LO w Tarnowie
//----------------------------------------------
#include <iostream>
using namespace std;
int main()
{
bool A,B,C,D,q[11];
int i,j;

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 123 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

cout << " D C B A | 1 2 3 4 5 6 7 8 9 10|\n"


"---------+---------------------+\n";
for(i = 0; i <= 10; i++)
{
// obliczamy sygnały wejściowe
D = (i & 8) > 0;
C = (i & 4) > 0;
B = (i & 2) > 0;
A = (i & 1) > 0;
// obliczamy sygnały wyjściowe
q[1] = !!(!A&&!B&&!C&&!D);
q[2] = !!(!B&&!C&&!D);
q[3] = !!(!(A&&B)&&!C&&!D);
q[4] = !!(!C&&!D);
q[5] = !!(!(!(!A&&!B)&&C)&&!D);
q[6] = !!(!(B&&C)&&!D);
q[7] = !!(!(A&&B&&C)&&!D);
q[8] = !D;
q[9] = !(!(!A&&!B)&&D);
q[10] = !(!A&&B&&!C&&D);
// wyświetlamy wyniki
cout << " " << D << " " << C << " " << B << " " << A << " | ";
for(j = 1; j <= 10; j++) cout << q[j] << " ";
cout << "|\n";
}
cout << endl;
return 0;
}

DCB A q1 q2 q3 q4 q5 q6 q7 q8 q9 q10
D C B A | 1 2 3 4 5 6 7 8 9 10| 000 0 1 1 1 1 1 1 1 1 1 1
---------+---------------------+ 000 1 0 1 1 1 1 1 1 1 1 1
0 0 0 0 | 1 1 1 1 1 1 1 1 1 1 |
0 0 0 1 | 0 1 1 1 1 1 1 1 1 1 | 001 0 0 0 1 1 1 1 1 1 1 1
0 0 1 0 | 0 0 1 1 1 1 1 1 1 1 | 001 1 0 0 0 1 1 1 1 1 1 1
0 0 1 1 | 0 0 0 1 1 1 1 1 1 1 | 010 0 0 0 0 0 1 1 1 1 1 1
0 1 0 0 | 0 0 0 0 1 1 1 1 1 1 |
0 1 0 1 | 0 0 0 0 0 1 1 1 1 1 | 010 1 0 0 0 0 0 1 1 1 1 1
0 1 1 0 | 0 0 0 0 0 0 1 1 1 1 | 011 0 0 0 0 0 0 0 1 1 1 1
0 1 1 1 | 0 0 0 0 0 0 0 1 1 1 | 011 1 0 0 0 0 0 0 0 1 1 1
1 0 0 0 | 0 0 0 0 0 0 0 0 1 1 |
1 0 0 1 | 0 0 0 0 0 0 0 0 0 1 | 100 0 0 0 0 0 0 0 0 0 1 1
1 0 1 0 | 0 0 0 0 0 0 0 0 0 0 | 100 1 0 0 0 0 0 0 0 0 0 1
101 0 0 0 0 0 0 0 0 0 0 0

Wyprowadzone funkcje są poprawne - możemy na ich podstawie zbudować sieć logiczną.

Symulacja sieci logicznej


Zwróć uwagę, iż sterownik działa poprawnie tylko dla kodów wejściowych od 0 do 10. Po prostu nie określaliśmy zachowania się
sieci logicznej dla pozostałych kodów.

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: A - 1, B - 1, C - 1, D - 1,

SN7400 x 3

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 124 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

SN7404 x 3

SN7410 x 1

SN7420 x 1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 125 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0026.php 126 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
4-bitowy multiplekser
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Określenie funkcji logicznych


Multiplekser (selektor danych) jest układem cyfrowym posiadającym n wejść danych, jedno wyjście y oraz wejścia adresowe. Na
wyjściu y pojawia się stan wejścia danych, którego numer podany został na wejścia adresowe. Przykładowy projekt dotyczy
układu z czterema wejściami danych D0, D1, D2, D3, z jednym wyjściem Y oraz dwoma wejściami adresowymi A i B.

Poniższa tabelka definiuje stan wyjścia w zależności od sygnałów wejściowych.

B A D0 D1 D2 D3 Y
0 0 0 X X X 0
0 1 X 0 X X 0
1 0 X X 0 X 0
1 1 X X X 0 0
0 0 1 X X X 1
0 1 X 1 X X 1
1 0 X X 1 X 1
1 1 X X X 1 1

Na podstawie tabelki układamy tablice Karnaugha.

Obszar Y1 Obszar Y2 Obszar Y3 Obszar Y4


00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1
0 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1
0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0027.php 127 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0
0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0
1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1
1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1
1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1
1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0

Testowy program w języku C++


Wyprowadzoną funkcję testujemy w odpowiednio przygotowanym programie w języku C++.

// Test funkcji Y dla 4-bitowego multipleksera


//--------------------------------------------
// (C)2007 mgr Jerzy Wałaszek I-LO w Tarnowie
//--------------------------------------------
#include <iostream>
using namespace std;
int main()
{
bool D0,D1,D2,D3,A,B,Y;
int i,j,gray;
cout << "D0 D1 D2 D3 | 00 01 11 10 \n"
"------------+-------------\n";
for(i = 0; i < 16; i++)
{
// Wyznaczamy wyraz kodu Gray'a dla danych D0...D3
gray = i ^ (i >> 1);
D0 = (gray & 8) > 0;
D1 = (gray & 4) > 0;
D2 = (gray & 2) > 0;
D3 = (gray & 1) > 0;
// Wyświetlamy kolejne dane D0...D3
cout << " " << D0 << " " << D1 << " " << D2 << " " << D3 << " | ";
// Generujemy wartości Y dla kolejnych adresów A i B:
for(j = 0; j < 4; j++)
{
gray = j ^ (j >> 1);
B = (gray & 2) > 0;
A = (gray & 1) > 0;
Y = !(!(!A&&!(!(!B&&D0)&&!(B&&D2)))&&!(A&&!(!(!B&&D1)&&!(B&&D3))));
cout << Y << " ";
}
cout << endl;
}
cout << endl;
system("PAUSE");
}

D0 D1 D2 D3 | 00 01 11 10
------------+-------------
0 0 0 0 | 0 0 0 0
0 0 0 1 | 0 0 1 0
0 0 1 1 | 0 0 1 1
0 0 1 0 | 0 0 0 1
0 1 1 0 | 0 1 0 1
0 1 1 1 | 0 1 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0027.php 128 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

0 1 1 1 | 0 1 1 1
0 1 0 1 | 0 1 1 0
0 1 0 0 | 0 1 0 0
1 1 0 0 | 1 1 0 0
1 1 0 1 | 1 1 1 0
1 1 1 1 | 1 1 1 1
1 1 1 0 | 1 1 0 1
1 0 1 0 | 1 0 0 1
1 0 1 1 | 1 0 1 1
1 0 0 1 | 1 0 1 0
1 0 0 0 | 1 0 0 0

Otrzymane wyniki zgadzają się z tabelą stanów, zatem wyprowadzona funkcja logiczna wyjścia Y jest poprawna. Możemy
przystąpić do budowy sieci logicznej.

Symulacja sieci logicznej

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: A - 1, B - 1, D0 - 1, D1 - 1, D2 - 1, D3 - 1

SN7400 x 3

SN7404 x 1

Scalone multipleksery
Ponieważ funkcje spełniane przez multipleksery są bardzo popularne w urządzeniach cyfrowych, przemysł
elektroniczny produkuje je w postaci pojedynczych układów scalonych średniej skali integracji - MSI.
Typowy scalony multiplekser posiada określoną liczbę wejść danych (16, 8, 4 lub 2), wejścia adresowe,
wyjście danych Y, wyjście zanegowane Y i wejście strobujące S.
Linie adresowe wybierają jedno z wejść danych o numerze odpowiadającym adresowi. Stan wybranego
wejścia przenoszony jest na wyjście Y (a w postaci zanegowanej na wyjście Y). Wejście strobujące S
umożliwia blokowanie multipleksera. Jeśli podamy na nie stan niski (kółeczko na wejściu oznacza, iż stan
niski jest stanem aktywnym, czyli włączającym funkcję strobowania), to na wyjściu Y pojawi się stan
wejścia, którego numer podano na wejścia adresowe. Przy stanie wysokim na wyjściu mamy zawsze 0 bez
względu na stany wejść. Jest to pomocne przy łączeniu multiplekserów do wybierania sygnałów z większej
liczby linii wejściowych (np. 32 lub 64).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0027.php 129 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Po lewej stronie przedstawiamy typowy symbol multipleksera, stosowany na schematach układów


cyfrowych. Poniżej prezentujemy cztery popularne układy scalone, zawierające różne multipleksery.

SN74150 - szesnastowejściowy multiplekser Adres


S Y
DCBA
XXXX1 1
0 0 0 0 0 D0
0 0 0 1 0 D1
0 0 1 0 0 D2
0 0 1 1 0 D3
0 1 0 0 0 D4
0 1 0 1 0 D5
0 1 1 0 0 D6
0 1 1 1 0 D7
1 0 0 0 0 D8
1 0 0 1 0 D9
1 0 1 0 0 D10
1 0 1 1 0 D11
1 1 0 0 0 D12
1 1 0 1 0 D13
Układ SN74150 posiada 16 wejść danych D0...D15, cztery wejścia adresowe A, B, C, D, wejście 1 1 1 0 0 D14
strobujące S oraz wyjście Y. Adres wybiera jedno z wejść D0...D15. Stan wybranego wejścia 1 1 1 1 0 D15
pojawia się w postaci zanegowanej na wyjściu Y.

SN74151 - ośmiowejściowy multiplekser

Adres
S Y Y
CBA
XXX1 0 1
0 0 0 0 D0 D0
0 0 1 0 D1 D1
0 1 0 0 D2 D2
0 1 1 0 D3 D3
1 0 0 0 D4 D4
1 0 1 0 D5 D5
1 1 0 0 D6 D6
1 1 1 0 D7 D7

Układ SN74151 posiada 8 wejść danych D0...D7, trzy wejścia adresowe A, B, C, wejście
strobujące S oraz dwa komplementarne wyjścia Y i Y. Adres wybiera jedno z wejść D0...D7. Stan
wybranego wejścia pojawia się na wyjściu Y oraz w postaci zanegowanej na wyjściu Y.

SN74153 - dwa czterowejściowe multipleksery o wspólnym adresowaniu

Adres
S Y
B A
X X 1 0
0 0 0 D0
0 1 0 D1
1 0 0 D2
1 1 0 D3

Układ SN74153 zawiera dwa czterowejściowe multipleksery - bardzo podobne w działaniu do


multipleksera, który stworzyliśmy w tym projekcie. Multipleksery posiadają wspólne wejścia
adresowe - zatem wejścia są wybierane parami. Wewnętrznie wejścia adresowe są buforowane i
wnoszą obciążenie 1. Niezależne są natomiast sygnały strobujące.

SN74157 - cztery dwuwejściowe multipleksery o wspólnym adresowaniu i


strobowaniu

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0027.php 130 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Adres
S Y
A
X 1 0
0 0 D0
1 0 D1

Układ SN74157 zawiera cztery multipleksery, z których każdy posiada dwa wejścia danych D0, D1,
jedno wyjście Y, jedno wspólne wejście adresowe A oraz jedno wspólne wejście strobowania S.
Wewnętrznie adres i strobowanie są buforowane i wnoszą obciążenie równe 1.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0027.php 131 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
4-bitowy demultiplekser
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Określenie funkcji logicznych


Demultiplekser jest elementem cyfrowym, który przesyła dane z wejścia na jedno z wyjść, którego numer określa stan wejść
adresowych. Pełni on zatem rolę przeciwną do multipleksera, który utworzyliśmy w poprzednim projekcie. Teraz stworzymy prosty
demultiplekser, który będzie posiadał jedno wejście danych G, cztery wyjścia Y0, Y1, Y2, Y3 oraz dwa wejścia adresowe A i B.

Dla każdego wyjścia możemy bezpośrednio napisać funkcję logiczną, która będzie iloczynem adresu i wejścia danych:

A B G Y0 Y1 Y2 Y3
0 0 0 0 1 1 1
0 1 0 1 0 1 1
1 0 0 1 1 0 1
Wynikowe funkcje przekształcamy w funkcję NAND negując funkcję AND oraz 1 1 0 1 1 1 0
argument G. Wynik nie jest dokładnie tą samą funkcją - wyjścia nieaktywne przechodzą
w stan wysoki (jeśli potrzebowalibyśmy demultipleksera z niskim stanem wyjść X X 1 1 1 1 1
nieaktywnych, to należałoby pozostawić funkcje AND). W tabelce po prawej stronie
zebraliśmy stany wejściowe i wyjściowe naszego demultipleksera.

Symulacja sieci logicznej

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: A - 1, B - 1, G - 1,

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0028.php 132 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

SN7404 x 1

SN7410 x 2

Scalone demultipleksery
Przemysł elektroniczny produkuje demultipleksery w postaci pojedynczych układów
scalonych średniej skali integracji - MSI. Służą one do konstruowania różnego rodzaju
koderów.
Typowy scalony demultiplekser posiada jedno lub dwa wejścia danych G (jeśli dwa, to
wewnętrznie podłączone są do bramki NOR - umożliwia to tworzenie układów złożonych z
kilku demultiplekserów), określoną liczbę wyjść danych Yn (n = 16, 8, 4 lub 2) i wejścia
adresowe,
Linie adresowe wybierają jedno z wyjść danych Yi o numerze i odpowiadającym adresowi.
Stan wejścia G przenoszony jest na zaadresowane wyjście Yi. Jeśli wyjście nie jest
zaadresowane, to znajduje się w stanie wysokim 1.
Po lewej stronie przedstawiamy typowy symbol demultipleksera, stosowany na
schematach układów cyfrowych. Poniżej prezentujemy dwa popularne układy scalone,
zawierające różne demultipleksery.

SN74154 - szesnastowyjściowy demultiplekser

Układ SN74154 posiada dwa wejścia danych G1 i G2 (jedno z nich można traktować jako wejście strobujące - stan wysoki na nim
blokuje wyjścia demultipleksera). Zwróć uwagę, iż wejścia te pracują w logice ujemnej - świadczy o tym kółeczko na symbolu
demultipleksera. Oznacza to, iż sygnał wejściowy jest negowany, a stanem aktywnym wejścia jest stan niski 0. Aby na wybranym
wyjściu demultipleksera otrzymać stan niski, oba wejścia G1 i G2 muszą również znajdować się w stanie niskim. Wejścia
adresowe D, C, B i A służą do wyboru jednego z 16 wyjść Y0 ... Y15. Wyjścia są również zanegowane, jednakże z powodu
zanegowania wejść, stan wyjścia wybranego adresem odpowiada sygnałowi wejściowemu na G1 i G2. Poniżej umieściliśmy
tabelkę stanów demultipleksera SN74154.

Wejścia Wyjścia
G1 G2 D C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 Y11 Y12 Y13 Y14 Y15

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0028.php 133 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1
0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1
0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1
0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
0 1 X X X X 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 X X X X 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 X X X X 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Zwróć uwagę, iż jeżeli wejścia G1 i G2 ustawimy w stan niski 0, to układ SN74154 może
pełnić funkcję konwertera kodu 8421 na kod 1 z 16. Słowo kodu 8421 podajemy w takim
przypadku na wejścia adresowe D, C, B i A, a na wyjściach Y0...Y15 otrzymujemy
zanegowane słowo w kodzie 1 z 16. Obok przedstawiamy schemat ideowy transkodera
8421 na kod 1 z 16. Inwertory na wyjściach są konieczne do otrzymania kodu w logice
dodatniej.
Tego typu układy stosuje się np. do sekwencyjnego sterowania różnych urządzeń
cyfrowych.

SN74155 - dwa demultipleksery z dwóch linii na cztery linie

Układ scalony SN74155 zawiera dwa demultipleksery z dwóch linii na cztery linie. Dzielą one wspólne wejścia adresowe B i A - nie
można zatem adresować niezależnie wyjść demultiplekserów - pracują one zawsze w parze. Pierwszy demultiplekser posiada
zanegowane wejście danych, co powoduje jego odmienne działanie.
Każdy z demultiplekserów zawiera jedno wejście danych C, jedno wejście strobowania G, dwa wspólne wejścia adresowe B i A,
które wybierają aktywne wyjście oraz cztery wyjścia Y0 ... Y3. Poniżej umieściliśmy tabelki stanów dla obu demultiplekserów.

Wejścia Wyjścia Wejścia Wyjścia


B A 1G 1C 1Y0 1Y1 1Y2 1Y3 B A 2G 2C 2Y0 2Y1 2Y2 2Y3
0 0 0 1 0 1 1 1 0 0 0 0 0 1 1 1
0 1 0 1 1 0 1 1 0 1 0 0 1 0 1 1
1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 1
1 1 0 1 1 1 1 0 1 1 0 0 1 1 1 0
X X 1 X 1 1 1 1 X X 1 X 1 1 1 1
X X X 0 1 1 1 1 X X X 1 1 1 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0028.php 134 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0028.php 135 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
1-bitowy sumator
Bramki logiczne Projekty
Cyfrowe układy scalone TTL i CMOS Bramka sterowana OR - AND - EXOR - NAND
Zasilanie układów TTL i CMOS Czytnik klawiatury numerycznej
Zjawisko hazardu w sieciach logicznych Konwerter kodu 8421 na kod Gray'a
Konwerter kodu Gray'a na kod 8421
8-bitowy generator bitu parzystości
Konwerter kodu BCD na kod Aikena
Konwerter kodu Aikena na kod BCD
Sterowanie wyświetlaczem kostki do gry
Sterowanie wyświetlaczem cyfrowym LED
Konwerter kodu BCD na kod 1 z 10
Sterownik wskaźnika postępu z 10 diod LED
4-bitowy multiplekser
4-bitowy demultiplekser
1-bitowy sumator

Opis
Sumator (ang. adder) jest układem cyfrowym realizującym operację
dodawania. Tabliczka dodawania w systemie dwójkowym jest szczególnie
prosta:

0+0=0
0+1=1
1+0=1
1 + 1 = 0 i przeniesienie do następnej kolumny.

Przeniesienie (ang. carry) powstaje wtedy, gdy wynik dodawania nie mieści
się w jednym bicie. W takim przypadku oprócz dodawania cyfr, w następnej
kolumnie musimy dodać jeszcze jedynkę z przeniesienia. Zasady te są
identyczne jak w systemie dziesiętnym. Dokładniejsze omówienie operacji
arytmetycznych w systemie dwójkowym znajdziesz w artykule o binarnym
kodowaniu liczb.
Uwzględniając przeniesienie z poprzedniej pozycji możemy rozszerzyć podane
reguły dodawania. Oznaczmy indeksem 1 przeniesienie z poprzedniej pozycji
(w pierwszej kolumnie przeniesienie to po prostu wynosi 0), które musimy
dodać do wyniku dodawania cyfr na bieżącej pozycji, a indeksem 2
przeniesienie do następnej pozycji. Otrzymamy następujące reguły dodawania
pojedynczych bitów:

0 + 0 + 01 = 0 i 02
0 + 1 + 01 = 1 i 02
1 + 0 + 01 = 1 i 02
1 + 1 + 01 = 0 i 12
0 + 0 + 11 = 1 i 02
0 + 1 + 11 = 0 i 12
1 + 0 + 11 = 0 i 12
1 + 1 + 11 = 1 i 12

Według powyższego schematu dodaje się dowolnie długie ciągi bitów:

101 1 Dodawanie rozpoczynamy od ostatniej kolumny. Postępujemy zgodnie z podanymi regułami dodawania z przeniesieniem. Na
+011 0 początku przeniesienie wynosi 0, zatem:
1 1 + 0 + 01 = 1 i 02

0
10 1 1 Przeniesienie 0 zapisujemy w następnej kolumnie małą cyferką. Wykonujemy dodawanie:
+01 1 0 1 + 1 + 01 = 0 i 12
0 1
1 0
10 1 1 Przeniesienie 1 zapisujemy w następnej kolumnie małą cyferką. Wykonujemy dodawanie:
+0 1 1 0 0 + 1 + 11 = 0 i 12
0 0 1
1 1 0
Przeniesienie 1 zapisujemy w następnej kolumnie małą cyferką. Wykonujemy dodawanie:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0029.php 136 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

1 0 1 1 Przeniesienie 1 zapisujemy w następnej kolumnie małą cyferką. Wykonujemy dodawanie:


+ 0 1 1 0 1 + 0 + 11 = 0 i 12
0 0 0 1
1 1 1 0 Przeniesienie 1 zapisaliśmy w kolumnie, w której nie ma już cyfr. Brakujące cyfry możemy zastąpić cyframi 0. W takim
przypadku wykonamy ostatnie dodawanie:
1 0 1 1
+ 0 1 1 0 0 + 0 + 11 = 1 i 02
1 0 0 0 1 Cyfry się skończyły, przeniesienie do następnej kolumny wynosi 0, zatem dodawanie jest wykonane.

Sprawdźmy, czy otrzymaliśmy poprawny wynik:

1011(2) + 0110(2) = 10001(2)


1011(2) = 1 + 2 + 8 = 11(10)
0110(2) = 2 + 4 = 6(10)
10001(2) = 1 + 16 = 17(10)
11 + 6 = 17 - zgadza się.

Określenie funkcji logicznych


Celem projektu jest stworzenie jednobitowego sumatora. Określmy sygnały wejściowe i wyjściowe:

Sumator będzie posiadał dwa wejścia danych A i B, na które podajemy bity do zsumowania. Na wejście C1 podajemy
przeniesienie z poprzedniej pozycji. Na wyjściu Y otrzymujemy wynik sumowania bitów A, B oraz C1. Na wyjściu C2 otrzymujemy
przeniesienie do następnej pozycji.
Funkcje logiczne dla sygnałów wyjściowych Y i C2 otrzymamy na podstawie reguł dodawania z przeniesieniem. W tym celu
układamy tablice Karnaugha:

Obszar Y Obszar C2A Obszar C2B Obszar C2C


0 1 0 1 0 1 0 1
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 1

1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1

1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1

Podsumujmy:

Testowy program w języku C++


Wyprowadzone funkcje logiczne sprawdzamy w programie testowym:

// Test funkcji dla 1 bitowego sumatora


//-------------------------------------------
// (C)2007 mgr Jerzy Wałaszek I-LO w Tarnowie
//-------------------------------------------

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0029.php 137 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

#include <iostream>
using namespace std;
int main()
{
int A,B,C1,C2,Y;
cout << " A B C1 | Y C2\n"
"--------+-----\n";
for(C1 = 0; C1 <= 1; C1++)
for(A = 0; A <= 1; A++)
for(B = 0; B <= 1; B++)
{
Y = !(!(C1&&!(!(!A&&!B)&&!(A&&B)))&&!(!C1&&!(!(!A&&B)&&!(A&&!B))));
C2 = !(!(A&&B)&&!(!(!A&&!B)&&C1));
cout << " " << A << " " << B << " " << C1 << " | " << Y << " " << C2 << endl;
}
cout << endl;
return 0;
}

0 + 0 + 01 = 0 i 02
A B C1 | Y C2
--------+----- 0 + 1 + 01 = 1 i 02
0 0 0 | 0 0 1 + 0 + 01 = 1 i 02
0 1 0 | 1 0
1 0 0 | 1 0 1 + 1 + 01 = 0 i 12
1 1 0 | 0 1 0 + 0 + 11 = 1 i 02
0 0 1 | 1 0
0 1 1 | 0 1 0 + 1 + 11 = 0 i 12
1 0 1 | 0 1 1 + 0 + 11 = 0 i 12
1 1 1 | 1 1 1 + 1 + 11 = 1 i 12

Otrzymaliśmy zgodność wyników z regułami dodawania, zatem funkcje dla wyniku dodawania Y i przeniesienia do następnej
pozycji C2 są poprawne.

Symulacja sieci logicznej

Zestawienie elementów
Obciążenia wnoszone przez poszczególne wejścia: A -3, B - 3, C1 - 3

SN7400 x 3

SN7404 x 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0029.php 138 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Sumatory wielobitowe
Sumator jednobitowy można łączyć w większe jednostki. Poniżej przedstawiamy przykład sumatora 4 bitowego:

Podane rozwiązanie posiada pewne wady. Mianowicie sygnały wyjściowe Y1...Y3 ustalą się dopiero po propagacji przeniesień
przez wszystkie sumatory. Z tego powodu sumator tego typu może być nieefektywny dla większej liczby bitów. Problem ten
rozwiązuje się przez zastosowanie specjalnych sieci logicznych generujących przeniesienia równolegle a nie szeregowo.

Scalony sumator
Układ scalony SN7483 jest czterobitowym sumatorem dwójkowym z przeniesieniami równoległymi (szybsze działanie w
porównaniu do przeniesień szeregowych, patrz powyżej). Poniżej przedstawiamy definicję wyprowadzeń układu SN7483.

Układ SN7483 posiada 9 wejść danych:


A1...A4 - bity pierwszej liczby
B1...B4 - bity drugiej liczby
C0 - przeniesienie początkowe z poprzedniej
pozycji
oraz 5 wyjść:
C4 - przeniesienie wyjściowe z 4-tej pozycji
∑1...∑4 - bity wyniku sumowania bitów A i B

Sumator można wykorzystywać na wiele różnych sposobów. Wyposażając go w kilka dodatkowych elementów uzyskujemy wiele
ciekawych układów cyfrowych.

4 bitowy układ dodający lub odejmujący

Na wejścia A1...A4 i B1...B4 podajemy bitu sumowanych lub


odejmowanych liczb. Jeśli wejście +/- znajduje się w stanie niskim, to
bramki EX-OR przenoszą w stanie niezmienionym bity B1...B4 na
wejścia B sumatora SN7483 - układ realizuje zwykłe dodawanie.
Jeśli wejście +/- znajduje się w stanie wysokim, to bramki EX-OR
dokonują inwersji bitów B1...B4 na wejściu sumatora. Jednocześnie
wejście przeniesienia C1 zostanie ustawione w stan wysoki, co
spowoduje dodanie jedynki do wyniku. Jeśli do inwersji bitów dodamy
jedynkę, to otrzymamy liczbę przeciwną w kodzie U2. Dodanie liczby
przeciwnej jest równoważne wykonaniu odejmowania. Więcej na ten
temat znajdziesz w artykule o binarnym kodowaniu liczb.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0029.php 139 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

Konwerter kodu BCD na kod z nadmiarem 3 i na odwrót


Kod z nadmiarem 3 (ang. excess 3 binary ceded decimal, XS-3) jest systemem przedstawiania cyfr dziesiętnych za pomocą 4
bitów, wykorzystywanym w przeszłości przez niektóre systemy komputerowe. Słowa kodowe otrzymujemy ze słów kodowych
BCD przez dodanie do nich liczby 3. W odwrotną stronę otrzymamy kody BCD odejmując od kodów XS-3 liczbę 3 (dodając
uzupełnienie U2 liczby 3).
Cyfra BCD XS-3
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100

Konwerter kodu BCD na kod Aikena i na odwrót


Wyrazy kodu Aikena powstają z wyrazów kodu BCD przez dodanie 6 do wyrazów większych od 4. W odwrotną stronę wyrazy
kodu BCD otrzymujemy z wyrazów kodu Aikena odejmując 6 (dodając uzupełnienie U2 liczby 6) od wyrazów, w których ustawiony
jest najstarszy bit. Reguły te pozwalają zaprojektować proste konwertery kodów Aikena na BCD i na odwrót, wykorzystując
sumator SN7483.

Cyfra BCD Aiken


0 0000 0000
1 0001 0001
2 0010 0010
3 0011 0011
4 0100 0100
5 0101 1011
6 0110 1100
7 0111 1101
8 1000 1110
9 1001 1111

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0029.php 140 / 253


Bit w zastosowaniach - Bramki - Projekt 2014-10-03

szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0029.php 141 / 253


Bit w zastosowaniach - Hazard 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Zjawisko hazardu w sieciach logicznych
Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych

Opis
Stan na wyjściu bramki cyfrowej nie zmienia się natychmiast po zmianie stanu wejść,
lecz z pewnym opóźnieniem, zwanym czasem propagacji sygnału. Spowodowane jest to
tym, iż elementy elektroniczne, tworzące bramkę cyfrową, pracują ze skończoną
szybkością. Dla współczesnych układów cyfrowych czasy propagacji wynoszą od 1ns
(nano sekunda = jedna miliardowa część sekundy) do kilkunastu ns.

Na rysunku po prawej stronie


obserwujemy efekt propagacji sygnału w
bramce logicznej. Pomimo zmiany stanu
wejść, na wyjściu bramki AND wciąż utrzymuje się przez krótką chwilę poprzedni
stan, zaznaczony na wykresie kolorem czerwonym. Konsekwencje tego faktu są
bardzo poważne.
Rozważmy następujący przykład prostej sieci logicznej:

Sieć realizuje funkcję:

Y=A+A=1

Wynika z tego, iż na wyjściu bramki OR powinien się utrzymywać poziom logiczny 1 bez względu na poziom logiczny wejścia A.
Tak by faktycznie było, gdyby bramki przełączały się natychmiast.
Załóżmy, iż na wejściu A panuje poziom logiczny 1. Stan sieci jest następujący:

Teraz załóżmy, iż wejście A zmienia swój poziom z 1 na 0. Sieć przechodzi w następujący stan:

Stan 0 dochodzi do wejść obu bramek, lecz z uwagi na opóźnienie działania, nie zmieniają one swoich stanów wyjściowych.
Wciąż mamy tam poprzednie poziomy logiczne.

Po upływie czasu propagacji stany wyjściowe obu bramek zmieniają się, aby odzwierciedlić realizowane przez nie funkcje
logiczne. Zwróć uwagę, iż na wyjściu bramki OR pojawia się 0, ponieważ jej oba wejścia przez chwilę były w stanie 0 ze względu
na czas propagacji bramki NOT. Stan 0 na wyjściu bramki OR nie powinien się pojawić zgodnie z funkcją logiczną, a jednak

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0030.php 142 / 253


Bit w zastosowaniach - Hazard 2014-10-03

pojawił się - sieć przez krótką chwilę nie realizuje swojej funkcji logicznej.

Po propagacji sygnałów wejściowych przez bramkę OR na jej wyjściu ustala się prawidłowy poziom logiczny 1. Z przedstawionej
analizy wynika, iż podany układ logiczny generuje krótki impuls o wartości 0 przy każdej zmianie poziomu logicznego wejścia A z
1 na 0.
Z tego prostego przykładu wyciągamy wniosek, iż stan sieci ustala się po czasie równym sumie czasów propagacji bramek
połączonych szeregowo (wyjście jednej bramki jest połączone z wejściem następnej). Czasy propagacji bramek zwykle różnią się
nieznacznie od siebie. Jeśli sieć jest skomplikowana, to powstałe opóźnienia mogą powodować na wyjściach bramek nawet całe
serie zmian poziomów logicznych - mówimy, iż stan sieci jest nieustalony. Takie zachowanie sieci nazywamy hazardem.
Hazard czasami może być użyteczny. Oto przykład prostego generatora impulsów prostokątnych. Dzięki opóźnieniom wnoszonym
przez poszczególne bramki w pętli sprzężenia zwrotnego powstają impulsy prostokątne o okresie równym podwojonej sumie
czasów propagacji wszystkich użytych bramek NOT.

Zauważ, iż pod względem logicznym ta sieć jest sprzeczna! To właśnie dlatego powstaje generator impulsów - stan wyjścia jest
zawsze nieustalony.
Hazardy są szczególnie dokuczliwe w sieciach logicznych pracujących dynamicznie - np. w
układach zliczających impulsy. Z powodu hazardów układy te mogą zliczać dodatkowe
impulsy powstałe w czasie stanów nieustalonych w sieci. Jednym ze sposobów eliminacji
tych niedogodności jest zastosowanie taktowania. Sieć pracuje synchronicznie w takt
impulsów zegarowych. Sygnał zegarowy jest sygnałem logicznym, który rytmicznie zmienia
swój stan w czasie z 0 na 1 i z 1 na 0. Sieć może rozpocząć przetwarzanie danych przy
sygnale zegarowym o poziomie 0, w trakcie trwania tego poziomu zanikają stany nieustalone
w sieci, a przy poziomie wysokim sygnału zegarowego można odczytywać wyniki pracy
sieci. Jeśli okres sygnału zegarowego zostanie właściwie dobrany, to hazardy nie będą miały
żadnego wpływu na pracę sieci logicznej.
Sygnał zegarowy pozwala również wykonywać kolejno różne operacje. To rozwiązanie
zastosowane jest właśnie we współczesnych komputerach, które pracują zgodnie z taktami swoich sygnałów zegarowych. W
poszczególnych taktach zegarowych sieć logiczna komputera (złożona z milionów bramek logicznych) pobiera rozkazy z pamięci
komputera, dekoduje je i wykonuje określone tymi rozkazami polecenia. Dzięki sygnałom zegarowym wszystko w komputerze
współpracuje ze sobą w czasie. Bez nich panowałby chaos, który nawet trudno sobie wyobrazić.
Na pewno słyszałeś o podkręcaniu częstotliwości pracy procesorów w komputerach - dzięki tej technice procesor działa
kilkanaście procent szybciej. Ja jednak jestem przeciwny takim praktykom. Oto dwa powody:
1. Zwiększanie częstotliwości taktowania procesora skraca czas na zanik stanów nieustalonych w sieci logicznej procesora.
Ponieważ nie zmniejszymy czasów propagacji bramek logicznych tworzących tę sieć (parametr ten zależy od użytych
materiałów oraz od zastosowanej technologii i nie mamy na niego żadnego wpływu), to może się okazać, iż procesor stanie
się w pewnych sytuacjach niestabilny - producent nie bez powodu ustala określoną częstotliwość pracy układów. Jest to
częstotliwość, przy której mamy 100% gwarancję, iż w trakcie taktu zegarowego stan sieci ustali się. Oczywiście jest
pewien margines bezpieczeństwa. Zmniejszając go, można właśnie podnieść częstotliwość taktowania.
2. Bramki logiczne pobierają najwięcej energii podczas przełączania swoich stanów logicznych - wymaga to przeładowania
ładunków elektrycznych w elementach elektronicznych tworzących bramkę. Zwiększenie częstotliwości powoduje wzrost
liczby przełączeń bramek w sieci, a co za tym idzie również wzrost traconej w nich energii elektrycznej, która zamienia się
w ciepło. Dlatego układy taktowane wyższymi częstotliwościami bardziej się grzeją. Wymagają zatem lepszego chłodzenia.
Jednakże konstrukcja układów cyfrowych została zaprojektowana na odprowadzanie tylko pewnej, ustalonej ilości ciepła ze
struktury. Nawet jeśli zastosujemy lepszy radiator, to może on nie nadążyć z odprowadzaniem ciepła wytwarzanego w
układzie. W efekcie niektóre elementy sieci logicznej mogą się znacznie przegrzewać, co w efekcie doprowadzi do
skrócenia ich żywotności - innymi słowy, pewnego pięknego dnia po włączeniu komputera monitor pozostanie czarny...

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0030.php 143 / 253


Bit w zastosowaniach - Hazard 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0030.php 144 / 253


Bit w zastosowaniach - Przerzutniki 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Przerzutniki
Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych

Przerzutnik (ang. flip flop) jest układem cyfrowym wyposażonym w


pamięć. W przypadku bramki cyfrowej stan jej wyjścia jest
bezpośrednio uzależniony od stanów panujących na wejściach -
opisuje to funkcja logiczna realizowana przez bramkę. W
przerzutniku jest nieco inaczej - zapamiętuje on swój stan
wewnętrzny. Stan ten może być zmieniony przez odpowiednie
wysterowanie wejść.
Pierwszy elektroniczny przerzutnik typu flip-flop wynaleziony został
w roku 1919 przez dwóch naukowców - Williama Ecclesa i F.W.
Jordana. Początkowo nazywano go układem przełączającym
Ecclesa-Jordana. Układ ten zbudowany był z dwóch aktywnych
elementów elektronicznych - lamp elektronowych (pierwsze
tranzystory powstały dopiero w 1949 roku). Angielska nazwa flip
flop powstała później jako efekt naśladowania dźwięku wydawanego przez głośniki podłączone do wzmacniacza akustycznego
sterowanego przez wymieniony przerzutnik.
Typowy przerzutnik jest układem cyfrowym posiadającym kilka wejść sterujących oraz dwa wyjścia
komplementarne Q i Q, na których panują zawsze przeciwne stany logiczne (z dokładnością do czasu propagacji
sygnałów wewnątrz przerzutnika - patrz zjawisko Hazardu). Stan niski na wejściu S (ang. Set - ustawianie)
wymusza przejście wyjścia Q w stan 1. Z kolei stan niski na wejściu R (ang. Reset - zerowanie) wymusza
przejście wyjścia Q w stan 0. Stan wyjścia Q może się również zmieniać pod wpływem określonej kombinacji
stanów wejść.
Cechą charakterystyczną przerzutnika jest utrzymywanie ostatniego stanu logicznego na wyjściu Q po przejściu
sygnałów sterujących w stan neutralny - jest to zatem element z pamięcią. Dzięki tej własności przerzutniki są
powszechnie wykorzystywane do zapamiętywania stanów w układach cyfrowych (rejestry, liczniki, pamięci,
układy sekwencyjne itp.).

Tematy podrozdziałów
Przerzutnik RS
Przerzutnik D
Przerzutnik J-K
Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0031.php 145 / 253


Bit w zastosowaniach - Przerzutniki 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0031.php 146 / 253


Bit w zastosowaniach - Przerzutnik RS 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Przerzutnik RS
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Przerzutnik RS (od ang. RS flip flop lub SR flip flop - Set Reset - Ustaw, Zeruj) jest najprostszym rodzajem przerzutnika, który
można zbudować z dwóch dwu wejściowych bramek NOR lub NAND. Przerzutnik powstaje dzięki sprzężeniu zwrotnemu (ang.
feed back) wyjść z wejściami. Sprzężenie zwrotne powoduje, iż przerzutnik utrzymuje ostatni stan wyjść Qn-1 po przejściu stanów
logicznych na wejściach w stan neutralny. Poniżej przedstawiamy symulację przerzutnika RS z bramek NAND i NOR.

Przerzutnik SR z bramek NAND Przerzutnik RS z bramek NOR


S R Q Q R S Q Q
0 1 1 0 0 1 1 0
1 0 0 1 1 0 0 1
1 1 Qn-1 Qn-1 0 0 Qn-1 Qn-1
0 0 1 1 1 1 0 0

W przerzutniku SR zbudowanym z bramek NAND wejścia S i R są aktywne przy stanie 0. Stan 1 jest dla nich stanem neutralnym.
Jeśli wejście S przejdzie w stan 0, to wymusi ono stan 1 na wyjściu Q. Przejście wejścia R w stan 0 wymusi stan 0 na wyjściu Q.
Powrót wejść S i R do stanu neutralnego nie zmienia stanu logicznego wyjścia Q - przerzutnik zapamiętuje ustawiony stan
logiczny. Jeśli oba wejścia S i R znajdą się w stanie niskim 0, będziemy mieli do czynienia ze stanem zabronionym - oba wyjścia
Q i Q znajdą się w stanie wysokim 1. Powrót jednego z wejść S lub R do stanu neutralnego 1 wymusi odpowiedni stan
przerzutnika. Problem jednakże pojawi się, jeśli oba wejścia S i R jednocześnie przejdą ze stanu 0 do stanu 1. W takim przypadku
stan przerzutnika będzie zależał od wewnętrznych hazardów i wynik jest nieokreślony, tzn. na wyjściu Q może pojawić się
zarówno stan 0 jak i stan 1 - nie da się przewidzieć, który z tych stanów ustali się w przerzutniku.
W przerzutniku RS zbudowanym z bramek NOR wejścia R i S są aktywne przy stanie logicznym 1. Stanem neutralnym jest dla
nich stan 0. Jeśli wejście S przejdzie w stan 1, to wymusi ono stan 1 na wyjściu Q. Podobnie stan 1 na wejściu R wymusza stan 0
na wyjściu Q. Stanem zabronionym jest stan 1 na obu wejściach R i S przerzutnika. W takim przypadku oba wyjścia Q i Q
przechodzą w stan 0. Jeśli teraz wejścia S i R przejdą jednocześnie w stan neutralny 0, to wynikowy stan wyjścia Q jest
nieokreślony - może być równy 1 lub 0 w zależności od wewnętrznych hazardów w sieci logicznej przerzutnika, nie daje się
przewidzieć.
Przerzutniki RS często są stosowane do odczytu stanu przełączników mechanicznych. Przełączniki te mają taką własność, iż w
momencie przełączenia styki często wykonują drgania sprężyste, co powoduje powstawanie serii krótkich impulsów napięciowych,
które mogą być szkodliwe dla układów cyfrowych:

Rozwiązaniem jest zastosowanie przerzutnika SR z bramek NAND.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0032.php 147 / 253


Bit w zastosowaniach - Przerzutnik RS 2014-10-03

Drgania styków nie przeniosą się na wyjście, ponieważ sygnał wejściowy S lub R ustawi odpowiednio stan Y i ewentualne zmiany
tego sygnału nie spowodują już zmiany poziomu logicznego wyjścia Y.

Synchroniczny przerzutnik RS
Jednym ze sposobów zapobiegania hazardom w sieciach cyfrowych jest zastosowanie taktowania. Polega ona na tym, iż funkcje
przełączające są sterowane dodatkowym sygnałem cyfrowym, zwanym sygnałem zegarowym lub taktem (ang. clock signal) .
Sygnał taktowania dociera jednocześnie do poszczególnych elementów sieci cyfrowej i umożliwia ich synchronizację - czyli
jednoczesne, skoordynowane działanie.
Poniżej prezentujemy synchroniczny przerzutnik RS wyposażony w dodatkowe wejście zegarowe C.
Jeśli na wejściu zegarowym panuje stan niski, to wejścia R i S są odseparowane od przerzutnika. Zatem wszelkie zmiany ich
stanów nie wpływają na stan wyjść przerzutnika. Pojawienie się stanu wysokiego na wejściu C odblokowuje wejścia R i S. Teraz
stan wyjściowy przerzutnika może się zmieniać zgodnie z funkcjami sygnałów wejściowych R i S.

Synchroniczny przerzutnik RS z bramek NAND


S R C Q Q
X X 0 Qn-1 Qn-1
0 0 X Qn-1 Qn-1
1 0 1 1 0
0 1 1 0 1
1 1 1 1 1

Przeanalizujmy działanie przedstawionego układu.


Jeśli na wejściu zegarowym C jest stan niski, to wyjścia obu bramek sterujących są w stanie wysokim bez względu na stan
wejść S i R. Przerzutnik pamięta stan poprzedni.
Jeśli na wejściach S i R panuje stan niski, to bez względu na stan wejścia zegarowego C wyjścia bramek sterujących
przerzutnikiem są w stanie wysokim. Przerzutnik pamięta stan poprzedni.
Jeśli wejście zegarowe C przejdzie w stan wysoki, to wejścia S i R zostaną odblokowane i będą sterować przerzutnikiem.
Ponieważ bramki wejściowe NAND odwracają sygnały wejść, to stanem aktywnym jest teraz stan wysoki:
S = 1, R = 0 - wyjście Q przechodzi w stan 1
S = 0, R = 1 - wyjście Q przechodzi w stan 0
S = 1, R = 1 - stan niedozwolony, oba wyjścia Q i Q przechodzą w stan 1. Jeśli teraz równocześnie sygnały wejściowe
S i R przejdą w stan 0 lub sygnał zegarowy przyjmie poziom niski, to przerzutnik przejdzie w stan wyjścia Q - 0 lub 1,
zależny od hazardów w wewnętrznej sieci logicznej (tzn. nie da się przewidzieć, czy będzie to stan 1, czy stan 0, stąd
mamy nieokreśloność). Jeśli tylko jeden z sygnałów S lub R przejdzie w stan niski, to pozostały sygnał określi stan
przerzutnika.

Przerzutnik RS wyzwalany zboczem sygnału zegarowego


Zwróć uwagę, iż w poprzednim rozwiązaniu wejścia S i R mogły oddziaływać na stan przerzutnika przez cały czas, gdy sygnał
zegarowy był w stanie wysokim. Czasami jest to niepożądane. W takich przypadkach stosuje się przerzutniki wyzwalane
zboczem sygnału zegarowego. Oznacza to, iż stan wyjść przerzutnika zmienia się zgodnie z jego definicją sygnałów sterujących
tylko w krótkiej chwili, gdy sygnał zegarowy zmienia swój poziom, np. z 0 na 1 lub z 1 na 0. Unika się w ten sposób zakłóceń w
pracy układów cyfrowych, które mogą wystąpić ze względu na hazardy pomiędzy zboczami sygnału zegarowego.
Aby uzyskać taki sposób działania stosujemy dwa synchroniczne przerzutniki SR połączone następująco:

Synchroniczny przerzutnik RS Master-Slave


S R C Q Q
X X 0 Qn-1 Qn-1
X X 1 Qn-1 Qn-1
0 0 X Qn-1 Qn-1
1 0 1→0 1 0
0 1 1→0 0 1
1 1 1→0 ? ?

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0032.php 148 / 253


Bit w zastosowaniach - Przerzutnik RS 2014-10-03

Pierwszy przerzutnik nazwano Master (ang. pan, władca). Jego zadaniem jest sterowanie drugim przerzutnikiem zwanym Slave
(ang. niewolnik, sługa). Zwróć uwagę, iż do przerzutnika Slave dociera zanegowany sygnał zegarowy poprzez bramkę NOT. Dzięki
temu w danym momencie zawsze aktywny jest tylko jeden z przerzutników:
C = 1 - aktywny jest przerzutnik Master, a nieaktywny Slave (pamięta on swój poprzedni stan)
C = 0 - nieaktywny jest Master (pamięta poprzedni stan), a aktywny jest Slave.
Przeanalizujmy pracę tego układu.

Jeśli sygnał zegarowy C ma stan wysoki lub niski, to stan wejść S i R nie wpływa bezpośrednio na wyjścia Q i Q.
Wyjaśnienie tego faktu jest bardzo proste:
Jeśli C = 1, to sygnały R i S sterują przerzutnikiem Master. Jego wyjścia Q i Q są połączone z wejściami S i R przerzutnika
Slave, który jednakże jest zablokowany, ponieważ na jego wejściu zegarowym C panuje stan niski.
Jeśli C = 0, to zablokowany jest przerzutnik Master. Zatem na wejściach S i R przerzutnika Slave, który jest odblokowany,
panują niezmienne stany, zapamiętane przez Master.
Podobna sytuacja panuje w przypadku, gdy wejścia S i R układu znajdują się w stanach niskich. Wtedy bez względu na
zmiany stanu wejścia zegarowego C układu przerzutnik Master pamięta swój stan poprzedni, który steruje przerzutnikiem
Slave.
Zmiany stanu wyjść Q i Q układu dokonują się tylko przy przejściu sygnału zegarowego z 1 na 0 (nazywamy to ujemnym
zboczem sygnału zegarowego). Wtedy przerzutnik Master zatrzaskuje stan wymuszony przez wejścia S i R. Na wyjściach
Q i Q przerzutnika Master ustalają się odpowiednie stany, które z kolei przenoszone są na wejścia S i R przerzutnika Slave.
Gdy sygnał zegarowy C osiągnie poziom niski, na wyjściu bramki NOT pojawi się stan wysoki, który odblokuje przerzutnik
Slave. Przerzutnik Slave zostaje wysterowany sygnałami wyjściowymi z przerzutnika Master i zmieni odpowiednio swój stan
zgodnie z tabelką.
Ciekawa sytuacja występuje w przypadku, gdy oba wejścia S i R układu są w stanie wysokim. Jest to stan zabroniony.
Otóż przy ujemnym zboczu sygnału zegarowego przerzutnik Master przejdzie w stan nieokreślony - zapamięta 1 lub 0 na
wyjściu Q, a wyjście Q przyjmie stan przeciwny. Stanu tego przerzutnika nie można przewidzieć, gdyż zależy on od
czasów propagacji użytych bramek, a te potrafią się zmieniać nawet w trakcie pracy układu np. z powodu temperatury lub
napięcia zasilającego. W tym momencie uaktywni się przerzutnik Slave. Ponieważ Master jest w stanie przypadkowym, to
stan ten przeniesie się na Slave.

Oznaczenia wejść zegarowych przerzutników


Przerzutniki mogą być wyzwalane (zmieniać swój stan w zależności od stanu wejść sterujących) na dwa podstawowe sposoby:

poziomem logicznym 1 lub 0 sygnału zegarowego


zboczem dodatnim (zmiana z 0 na 1) lub ujemnym (zmiana z 1 na 0) sygnału zegarowego
Ponieważ informacja o sposobie wyzwalania przerzutnika jest bardzo istotna dla projektanta układów cyfrowych, na schematach
stosuje się następujące oznaczenia wejść zegarowych:

wyzwalanie poziomem 1

wyzwalanie poziomem 0

wyzwalanie zboczem dodatnim: 0 → 1

wyzwalanie zboczem ujemnym: 1 → 0

Kółeczko na wejściu oznacza reagowanie wejścia na stan niski. Znak kąta oznacza, iż wejście reaguje na zbocze sygnału
zegarowego. Brak tego oznaczenia sugeruje, iż przerzutnik jest wyzwalany poziomem logicznym na wejściu zegarowym.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0032.php 149 / 253


Bit w zastosowaniach - Przerzutnik RS 2014-10-03

rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0032.php 150 / 253


Bit w zastosowaniach - Przerzutnik D 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Przerzutnik D
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Przerzutnik D posiada wejście danych D (ang. Data), wejście zegarowe C (ang. clock - zegar) oraz dwa komplementarne wyjścia Q i Q.
Rozróżniamy dwa rodzaje przerzutników D, które różnią się sposobem pracy.

Przerzutnik D latch
W przerzutniku D latch stan wejścia D jest kopiowany na wyjście Q przy wysokim poziomie logicznym na wejściu C. Gdy
poziom wejścia C zmieni się na niski, przerzutnik zapamiętuje ostatni stan wyjścia Q. Zmiany na wejściu informacyjnym D nie
wpływają już na wyjście Q, które zostało "zatrzaśnięte" zmianą poziomu wejścia C - z tego powodu przerzutniki te noszą często
nazwę zatrzask. Poniżej przedstawiamy symulację sieci logicznej przerzutnika D typu Latch.

D C Q
X 0 Qn-1
0 1 0
1 1 1

Ze schematu logicznego wynika, iż przerzutnik D Latch jest rozbudowanym przerzutnikiem SR. Rozbudowa polega na dodaniu
dwóch bramek NAND sterujących wejściem ustawiającym S i zerującym R przerzutnika SR. Dzięki temu rozwiązaniu przerzutnik
D nie posiada stanów zabronionych - nie dochodzi w nim do sytuacji, gdy oba wejścia S i R znajdują się jednocześnie w stanie
niskim.
Przerzutniki D Latch są zwykle stosowane w układach zapamiętujących stany logiczne (rejestry, pamięci, akumulatory, itp.).
Z uwagi na popularność przerzutników D Latch przemysł elektroniczny produkuje cyfrowe układy scalone zawierające po kilka
takich przerzutników.

SN7475 - cztery przerzutniki D typu Latch SN7477 - cztery przerzutniki D typu Latch

Przerzutnik D wyzwalany zboczem sygnału zegarowego


Drugi typ przerzutnika D jest wyzwalany zboczem (dodatnim lub ujemnym w zależności od rozwiązania) sygnału zegarowego.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0033.php 151 / 253


Bit w zastosowaniach - Przerzutnik D 2014-10-03

Oznacza to, iż przerzutnik zapamiętuje stan wejścia D tylko przy odpowiedniej zmianie poziomu logicznego na wejściu zegarowym
C. Taki sposób pracy przerzutnika uzyskuje się łącząc dwa przerzutniki D Latch wg schematu Master-Slave, który opisaliśmy
dokładnie przy okazji synchronicznego przerzutnika RS wyzwalanego zboczem.

D C Q
X X Qn-1
0 1→0 0
1 1→0 1

Przeanalizujmy ten układ.

Jeśli wejście zegarowe C znajduje się w stanie wysokim, to aktywny jest przerzutnik Master. Stan jego wejścia D przenosi
się na wyjście Q, a stamtąd na wejście D przerzutnika Slave. Jednakże przerzutnik Slave jest nieaktywny - na jego wejściu
C panuje stan niski z bramki NOT. Zatem Slave nie zmienia stanu wyjść, pamięta ostatni stan. Zmiany poziomu sygnału na
wejściu D układu nie przenoszą się na wyjście Q.
Jeśli wejście zegarowe C jest w stanie niskim, to przerzutnik Master jest nieaktywny i pamięta swój stan poprzedni. Z kolei
przerzutnik Slave jest aktywny, lecz na jego wejściu D panuje stan wyjścia Q przerzutnika Master, a ten nie zmienia się.
Zmiany poziomu sygnału na wejściu D układu nie przenoszą się na wyjście Q.
Przy ujemnym zboczu sygnału zegarowego przerzutnik Master zatrzaskuje stan swojego wejścia D przekazując go poprzez
wyjście Q na wejście D przerzutnika Slave. Ten z kolei się odblokowuje i przesyła stan swojego wejścia D na wyjście Q.
Zatem na wyjściu Q pojawia się stan wejścia D układu, jaki panował tuż przed zmianą poziomu sygnału zegarowego z 1 na
0.

Przerzutniki D wyzwalane zboczem są stosowane w układach licznikowych, rejestrach pamięciowych oraz w rejestrach
przesuwnych.
Przemysł elektroniczny produkuje gotowe układy scalone zawierające przerzutniki D flip flop wyzwalane zboczem dodatnim.
Często przerzutniki te wyposaża się w dodatkowe dwa wejścia:

PRESET/SET - wejście ustawiające stan wyjścia Q na 1


CLEAR/RESET - wejście ustawiające stan wyjścia Q na 0
Dla wymienionych wejść obowiązują stany zabronione, jak dla przerzutnika RS (po prostu człon SLAVE jest zwykle realizowany
jako przerzutnik RS).
Poniżej przedstawiamy układ scalony SN7474 zawierający dwa przerzutniki D flip flop wyzwalane zboczem narastającym
(dodatnim) sygnału zegarowego C. W tabelce stanów kolorem czerwonym zaznaczyliśmy stan zabroniony sygnałów wejściowych.

SN7474 - dwa przerzutniki D flip flop

Wejścia Wyjścia
PRE CLR CLK D Q Q
0 1 X X 1 0
1 0 X X 0 1
0 0 X X 1 1
1 1 0→1 0 0 1
1 1 0→1 1 1 0
1 1 X X Qn-1 Qn-1

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0033.php 152 / 253


Bit w zastosowaniach - Przerzutnik D 2014-10-03

Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0033.php 153 / 253


Bit w zastosowaniach - Przerzutnik J-K 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Przerzutnik J-K
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Przerzutnik J-K (ang. J-K flip flop) jest najbardziej uniwersalnym i najpowszechniej stosowanym rodzajem przerzutnika cyfrowego
z uwagi na swoją uniwersalność, która pozwala na łatwe zastosowanie w różnych układach cyfrowych. Przerzutnik posiada dwa
wejścia sterujące J i K (litery te wybrano arbitralnie jako dwie kolejne litery alfabetu), jedno wejście zegarowe C oraz dwa
komplementarne wyjścia Q i Q. Niektóre rozbudowane wersje tego przerzutnika posiadają dodatkowo dwa asynchroniczne wejścia
PRESET (ustawia Q na 1) oraz CLEAR (ustawia Q na 0).
Poniżej umieściliśmy symulację sieci logicznej przerzutnika J-K zbudowanego z bramek NAND.

J K C Q
X X 0 Qn-1
0 0 X Qn-1
1 0 1 1
0 1 1 0
1 1 Qn-1

Przerzutnik J-K jest rozbudowanym przerzutnikiem S-R, do którego dodajemy dodatkowy człon z dwóch bramek sterujący
sygnałami na wejściach S i R. Zadaniem tego członu jest uniemożliwienie wysterowania końcowego przerzutnika S-R sygnałami
zabronionymi. Uzyskujemy to sprzęgając wejście S z wyjściem Q oraz wejście R z wyjściem Q. Ponieważ wyjścia Q i Q są
komplementarne (o stanach przeciwnych), nigdy nie dojdzie do sytuacji, w której oba wejścia S i R znajdą się w stanie niskim.
Przeanalizujmy pracę przerzutnika J-K.

Wejście zegarowe C jest w stanie niskim. Bramki wejściowe blokują sygnały sterujące J i K - przerzutnik pamięta swój
poprzedni stan.
Wejścia J i K są w stanie niskim. Zmiana stanu wejścia zegarowego nie wpływa na stan wyjściowy bramek sterujących
przerzutnikiem SR - przerzutnik pamięta swój poprzedni stan.
Wejście J w stanie wysokim, wejście K w stanie niskim. Jeśli na wejściu zegarowym pojawi się stan 1, to są możliwe dwa
przypadki:
1) przerzutnik S-R pamiętał stan 1. Ponieważ do bramki J jest doprowadzony sygnał Q = 0, wyjście bramki J nie zmieni się
i przerzutnik S-R wciąż będzie pamiętał swój stan 1.
2) przerzutnik S-R pamiętał stan 0. Teraz bramka J jest wysterowana trzema sygnałami 1, zatem jej wyjście przejdzie w
stan niski, co spowoduje ustawienie wyjścia Q w stan 1.
Wynika z tego, iż kombinacja J = 1, K = 0 powoduje ustawienie wyjścia Q na 1.
Wejście J w stanie niskim, wejście K w stanie wysokim. Z uwagi na symetrię przerzutnika J-K, mamy identyczną sytuację
jak w poprzednim punkcie, lecz teraz przerzutnik S-R jest zerowany - ustawiane na 1 jest wyjście Q. Zatem kombinacja J =
0, K = 1 zeruje wyjście Q.
Oba wejścia J i K są w stanie wysokim. Pojawienie się stanu wysokiego na wejściu zegarowym C powoduje, iż wejścia
przerzutnika S-R zostają sprzężone z wyjściami:
Wejście S z wyjściem Q.
Wejście R z wyjściem Q.
Takie sprzężenie powoduje zmianę stanu przerzutnika na przeciwny. Jednakże jeśli sygnał zegarowy C będzie się
utrzymywał w stanie wysokim przez czas dłuższy od czasu propagacji sygnałów w przerzutniku, to wzbudzi się on i
zacznie cyklicznie zmieniać swój stan pomiędzy 0 a 1 - powstanie generator przebiegu prostokątnego o dużej
częstotliwości. Dlatego w tej funkcji przerzutnik musi być wyzwalany impulsem na wejściu zegarowym (co symuluje nasza
przykładowa sieć logiczna).

Przerzutnik J-K Master Slave


Aby pozbyć się kłopotów z doborem czasu trwania impulsu zegarowego (ważne tylko dla J = K = 1), często stosuje się układ
Master/Slave, który opisaliśmy dokładnie przy okazji synchronicznego przerzutnika RS wyzwalanego zboczem. Przerzutniki J-K
Master/Slave są wyzwalane zboczem sygnału zegarowego, zatem nie wystąpią w nich problemy ze wzbudzaniem się układu.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0034.php 154 / 253


Bit w zastosowaniach - Przerzutnik J-K 2014-10-03

Poniżej przedstawiamy symulację przykładowej sieci logicznej przerzutnika J-K Master/Slave:

J K C Q
X X 0 Qn-1
X X 1 Qn-1
0 0 X Qn-1
1 0 1→0 1
0 1 1→0 0
1 1 1→0 Qn-1

Dokonajmy analizy pracy powyższego układu.

Sygnał zegarowy C jest w stanie wysokim. Przerzutnik Master reaguje na zmiany stanu wejść J i K, lecz zmiany te nie
przenoszą się na wyjścia Q i Q układu, ponieważ przerzutnik Slave jest w stanie nieaktywnym - jego sygnał zegarowy C
znajduje się w stanie niskim, ponieważ pobierany jest z wyjścia inwertera. Wniosek - przerzutnik pamięta poprzedni stan.
Sygnał zegarowy C jest w stanie niskim. Przerzutnik Master staje się nieaktywny i stan jego wyjść nie reaguje na zmiany
sygnałów J i K. Przerzutnik Slave jest aktywny, lecz jego wejścia są sterowane z wyjść przerzutnika Master. Wniosek -
przerzutnik pamięta poprzedni stan.
Sygnały J i K są w stanie niskim. W tym przypadku bramki wejściowe są zablokowane bez względu na stan sygnału
zegarowego. Ponieważ wyjścia przerzutnika Master nie zmieniają się, zatem przerzutnik Slave pamięta swój poprzedni
stan.
Na wejściu zegarowym C pojawia się ujemna krawędź. Przerzutnik Master zatrzaskuje swój bieżący stan. Odblokowuje się
przerzutnik Slave i zostaje on ustawiony zgodnie z tabelką przejść dla przerzutnika J-K. Jeśli na wejściach J i K był
ustawiony stan logiczny 1 przed przejściem sygnału zegarowego w stan 0, to do wejść przerzutnika Slave zostaną
podłączone skrzyżowane sygnały z obu wyjść, co spowoduje zmianę stanu wyjść Q i Q na przeciwny - jest to tzw. funkcja
toggle (ang. zmiana, przeskok). Wniosek - przerzutnik zmienia swój stan zgodnie z tabelką przejść przerzutnika J-K.
Zwróć uwagę, iż zastosowanie układu Master/Slave spowodowało, iż sygnał zegarowy nie musi być ograniczany czasowo.
Wyzwalanie przerzutnika następuje tylko w momencie przejścia tego sygnału ze stanu 1 na 0. Natomiast czas pomiędzy
kolejnymi zboczami sygnału zegarowego może być dowolnie długi.
Przemysł elektroniczny produkuje cyfrowe układy scalone zawierające różne wersje przerzutników J-K. Poniżej podajemy dwa
przykładowe układy scalone z przerzutnikami J-K Master/Slave.

SN7472 - przerzutnik J-K MS z ustawianiem i zerowaniem SN7473 - dwa przerzutniki J-K MS z zerowaniem
wyzwalany ujemnym zboczem sygnału zegarowego wyzwalane ujemnym zboczem sygnału zegarowego

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0034.php 155 / 253


Bit w zastosowaniach - Przerzutnik J-K 2014-10-03

Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0034.php 156 / 253


Bit w zastosowaniach - Licznik asynchroniczny 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Licznik asynchroniczny
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Binarny licznik cyfrowy (ang. binary counter) to urządzenie zliczające impulsy zegarowe. Posiada
on wejście zegarowe C (ang. clock input) oraz wyjścia, na których w kodzie binarnym 8421 pojawia
się stan licznika, czyli liczba zliczonych impulsów zegarowych.

Zastosowanie liczników jest bardzo szerokie. Stosuje się je powszechnie w zegarach cyfrowych,
urządzeniach pomiarowych, a nawet w mikroprocesorze, o czym przekonasz się później.
Elektronicy wymyślili całą gamę różnych liczników cyfrowych, my jednakże zajmiemy się tylko najbardziej podstawowymi
układami. Na początek zdefiniujmy podstawowy element zliczający, czyli przerzutnik T (ang. Toggle - zmiana, przeskok).

T Q
0 Qn-1
1 Qn-1
1→0 Qn-1

Przerzutnik T przy każdym ujemnym (istnieją również rozwiązania przerzutnika T wyzwalane zboczem dodatnim) zboczu sygnału
zegarowego (przejściu ze stanu 1 do stanu 0) zmienia stany wyjść na przeciwne. Przerzutnik T nie jest produkowany w formie
układu scalonego. Jednakże nie stanowi to żadnego problemu, gdyż można go w prosty sposób zbudować z przerzutnika D lub
J-K.

Przerzutnik T Przerzutnik T
z przerzutnika D z przerzutnika J-K

Przerzutnik T zbudowany z przerzutnika D jest wyzwalany zboczem dodatnim (przejściem sygnału zegarowego z poziomu 0 na 1).
Przerzutnik T zbudowany z przerzutnika J-K jest wyzwalany zboczem ujemnym. Należy na to zwrócić uwagę przy konstrukcji
liczników cyfrowych.
Licznik asynchroniczny powstaje, gdy kilka przerzutników T połączymy szeregowo ze sobą tak, aby wyjście Q jednego
przerzutnika łączyło się z wejściem T następnego. Nazwa asynchroniczny (czyli niejednoczesny) pochodzi stąd, iż wyjścia
przerzutników nie zmieniają się równocześnie, tylko kaskadowo - stan licznika ustala się dopiero po czasie równym sumie czasów
propagacji poszczególnych przerzutników.
Poniżej umieściliśmy symulację 4 bitowego licznika w kodzie 8421.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0035.php 157 / 253


Bit w zastosowaniach - Licznik asynchroniczny 2014-10-03

Stan licznika odczytujemy z wyjść Q poszczególnych przerzutników. Z boku mamy wykres przebiegów poszczególnych sygnałów
w liczniku. Kolorem czerwonym w sygnale zegarowym zaznaczyliśmy ujemne zbocza, które wyzwalają zmiany w pierwszym
przerzutniku T. Ten z kolei steruje drugim przerzutnikiem T, itd. Po zliczeniu 16 impulsów licznik się zeruje.
Liczniki binarne są produkowane w postaci gotowych układów scalonych. Poniżej opisujemy przykład takiego układu z licznikiem
binarnym.

Układ scalony SN7493 zawiera 4 przerzutniki J-K Master/Slave


połączone w taki sposób, iż tworzą dwa niezależne liczniki - jedno
SN7493 - asynchroniczny licznik binarny bitowy oraz trzybitowy. Wszystkie przerzutniki mogą być wspólnie
zerowane - w tym celu należy podać na wejścia R0(1) i R0(2) stan
wysoki.
Aby uzyskać licznik 4 bitowy, należy wyjście QA ( z licznika 1
bitowego) połączyć z wejściem CKB (wejście zegarowe licznika 3
bitowego). Zliczane impulsy należy podawać na wejście CKA.

Układ SN7493 ma wiele ciekawych zastosowań. Poniżej opisujemy niektóre z nich.

Liczniki modulo n
Operacja modulo n daje w wyniku resztę z dzielenia przez n. Na przykład:

8 mod 5 = 3, gdyż 5 mieści się w 8 jeden raz i zostaje reszta 3.

Reszta z dzielenia jest zawsze mniejsza od n i daje wyniki mieszczące się w przedziale od 0 do n - 1. Liczbę n nazywamy
modułem.
Licznik modulo n jest układem cyfrowym, który zlicza n - 1 impulsów zegarowych, a przy n-tym impulsie zeruje się. W wyniku
wartości zliczone przez licznik tworzą ciąg 0, 1, 2, ..., n-1 (wartości te są reprezentowane w kodzie binarnym 8421). Na przykład
licznik modulo 5 będzie przyjmował następujące stany dla kolejnych impulsów zegarowych:

modulo 5 : 000 → 001 → 010 → 011 → 100 → 000 → 001 ...

Po osiągnięciu stanu 100, który w kodzie 8421 oznacza liczbę 4, kolejny impuls zegarowy zeruje licznik i cykl
zliczania rozpoczyna się od nowa.
Standardowo SN7493 jest licznikiem binarnym, który zlicza impulsy zegarowe w kodzie 8421. Jednakże wykorzystując fakt, iż
układ zawiera dwa oddzielne liczniki binarne (jedno i trzybitowy) oraz dwa wejścia zerujące (R0(1) i R0(2)) można skonstruować
liczniki binarne zliczające impulsy zegarowe do wartości n-1. Po osiągnięciu stanu n-1 licznik modulo n jest zerowany po kolejnym
impulsie zegarowym i zliczanie rozpoczyna się od początku.
Zasada budowy liczników modulo n jest bardzo prosta. Otóż badamy stan bitów wyjściowych, które dla wartości równej n
przyjmują poziom 1. Gdy tak się stanie, zerujemy licznik podając na wejścia R0(1) i R0(2) stany wysokie. W wielu przypadkach
nawet nie musimy dołączać do układu SN7493 żadnych dodatkowych elementów - wykorzystujemy bity wyjściowe do
bezpośredniego sterowania wejść zerujących. Dla przykładu rozważmy licznik modulo 3. Wykorzystujemy w nim człon licznika 3-
bitowego.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0035.php 158 / 253


Bit w zastosowaniach - Licznik asynchroniczny 2014-10-03

Przeanalizujmy ten układ.

Sygnał zegarowy C jest doprowadzony do wejścia CKB, które jest wejściem zliczającym licznika 3 bitowego.
Wejścia zerujące R0(1) i R0(2) są połączone z wyjściami QB i QC. Gdy nadejdzie pierwszy impuls zegarowy, to na
jego zboczu opadającym wyjście QB zmieni swój stan z 0 na 1. Licznik zliczył pierwszy impuls i jest w stanie 1
(patrz, wykres obok układu licznika). Na zboczu opadającym drugiego impulsu zegarowego wyjście QB zmieni swój
stan na 0, a z kolei wyjście QC przyjmie stan 1 - licznik ma stan 2. Przy trzecim impulsie zegarowym stan wyjścia
QB znów zmieni się na 1 - licznik będzie w stanie 3. Jednakże teraz oba wejścia zerujące R0(1) i R0(2) są w stanie
1. Powoduje to wyzerowanie licznika, który przejdzie do stanu 0 i cały cykl rozpocznie się od nowa.

Zwróć uwagę, iż przez bardzo krótką chwilę na wyjściach licznika pojawia się stan 3 (oba wyjścia QB i QC są w stanie 1). Stan 3
wykorzystujemy do wysterowania wejść zerujących. Jest to cechą charakterystyczną asynchronicznych liczników modulo n.
Poniżej przedstawiamy układy liczników modulo n, które można zrealizować z licznika SN7493.

n Układ licznika modulo n n Układ licznika modulo n n Układ licznika modulo n

2 7 12

3 8 13

4 9 14

5 10 15

6 11 16

Dzielniki częstotliwości przez n


Przez częstotliwość sygnału cyfrowego (ang. digital signal frequency) rozumiemy ilość impulsów (kolejnych zmian stanu z 0 na
1 i z powrotem z 1 na 0) w jednostce czasu. Jednostką częstotliwości jest Herz (Hz):

1 Hz to jeden impuls sygnału cyfrowego w ciągu jednej sekundy.

Jeśli zatem w ciągu jednej sekundy napłynie 15 impulsów, to powiemy, iż ten sygnał cyfrowy ma częstotliwość 15 Hz. W technice
cyfrowej częstotliwości sygnałów mogą być bardzo duże. Dlatego wykorzystujemy większe jednostki:

1 KHz (kiloherz) = 1000 Hz


1 MHz (megaherz) = 1000 KHz = 1000000 Hz (milion)
1 GHz (gigaherz) = 1000 MHz = 1000000000 Hz (miliard)

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0035.php 159 / 253


Bit w zastosowaniach - Licznik asynchroniczny 2014-10-03

Cyfrowy dzielnik częstotliwości (ang. digital frequency divider) jest układem, który generuje jeden impuls wyjściowy po każdych
n impulsach zegarowych. Dzielnik częstotliwości można w prosty sposób uzyskać z licznika modulo n. Jeśli n jest potęgą liczby
dwa - czyli podział częstotliwości następuje przez 2, 4, 8 itd, to sygnał wyjściowy po prostu pobieramy z odpowiedniego bitu
wyjściowego licznika.

n Dzielnik częstotliwości n Dzielnik częstotliwości

2 8

4 16

Dla pozostałych n wykorzystujemy podane wyżej układy liczników modulo n. Sygnał wyjściowy W tworzymy z iloczynu sygnałów
zerujących R0(1) i R0(2). Poniżej podajemy przykład dzielnika przez 10. Układ generuje krótkie, ujemne impulsy (dla impulsów
dodatnich należy zastosować bramkę AND zamiast NAND) po każdych 10 impulsach zegarowych:

Moduły dzielników można łączyć ze sobą. Poniżej mamy przykład dzielnika przez 1000 zbudowanego z trzech dzielników przez
10:

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0035.php 160 / 253


Bit w zastosowaniach - Licznik synchroniczny 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Licznik synchroniczny
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

W liczniku asynchronicznym (ang. asynchronous counter) przerzutniki są sterowane wyjściami przerzutników poprzedzających.
Powoduje to, iż stan licznika nie ustala się od razu, lecz kolejno na poszczególnych przerzutnikach z opóźnieniem równym
czasowi propagacji sygnału w przerzutniku. Jeśli impulsy zegarowe mają dużą częstotliwość i ich okres jest porównywalny z
czasem propagacji przerzutnika, to sygnały wyjściowe licznika mogą podawać złe wartości zliczonych impulsów - sygnał
wyjściowy nie ma czasu na odpowiednie ustalenie się.

Powyżej przedstawiamy wykres czasowy stanów licznika, na które wpływają wewnętrzne czasy propagacji. W ich wyniku stany
wyjściowe są przesunięte w czasie w stosunku do impulsów zegarowych. Opóźnienie to zwielokrotnia się dla starszych bitów
licznika. Bit Q8 jest już tak opóźniony, iż licznik "gubi" stan 8, w którym powinien być ustawiony na 1 tylko bit Q8, a pozostałe
bity wyzerowane. Sytuacja staje się jeszcze gorsza, gdy licznik asynchroniczny ma więcej bitów. Wtedy gubienie stanów może
pojawić się przy odpowiednio mniejszych częstotliwościach sygnału zegarowego.
Z tego powodu zaprojektowano liczniki synchroniczne (ang. synchronous counter) , w których przerzutniki zmieniają swój stan
jednocześnie z taktem zegarowym. Licznik synchroniczny posiada sieć logiczną, która steruje odpowiednio wejściami
przerzutników na podstawie stanów ich wyjść. Sygnał zegarowy doprowadzany jest do każdego przerzutnika, zatem zmiana
stanów będzie odbywała się wg napływających taktów zegarowych.
Liczniki synchroniczne można budować z przerzutników D flip flop lub z przerzutników J-K Master/Slave. My skupimy się na tych
drugich.
Wyjście Aby określić sieć logiczną, przyjrzyjmy się tabelce stanów, które musi przyjmować nasz licznik dla
C kolejnych impulsów zegarowych. Z tabelki widzimy, iż wyjście QA zmienia swój stan na przeciwny po
QD QC QB QA
każdym impulsie zegarowym. Zatem do realizacji wyjścia QA wystarcza pojedynczy przerzutnik J-K MS
0 0 0 0 0
pracujący jako przerzutnik T (oba wejścia J i K w stanie 1).
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
Wyjście QB zmienia stan na przeciwny, gdy w poprzednim stanie wyjście QA znajdowało się w stanie 1.
10 1 0 1 0
Zrealizujemy je za pomocą pojedynczego przerzutnika J-K MS, którego wejścia J i K będą połączone z
11 1 0 1 1 wyjściem QA pierwszego przerzutnika. Jeśli wyjście QA znajdzie się w stanie 1, to na oba wejścia J i K
12 1 1 0 0 drugiego przerzutnika zostanie podany stan 1. Będzie on wtedy pracował jako przerzutnik T, zatem przy
13 1 1 0 1 kolejnym impulsie zegarowym zmieni swój stan na przeciwny. Jeśli wyjście QA przyjmie stan 0, to impuls
14 1 1 1 0 zegarowy nie zmieni stanu wyjścia QB.
15 1 1 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0036.php 161 / 253


Bit w zastosowaniach - Licznik synchroniczny 2014-10-03

Wyjście QC zmienia stan na przeciwny, gdy w poprzednim cyklu licznika wyjścia QA i QB jednocześnie były w stanie wysokim.
Teraz wysterujemy wejścia J i K trzeciego przerzutnika iloczynem logicznym stanów wyjść QA i QB.

Wyjście QD zmienia stan na przeciwny, gdy w poprzednim cyklu wszystkie trzy wyjścia QA, QB i QC znajdowały się w stanie
wysokim 1. Wejścia J i K czwartego przerzutnika wysterujemy zatem iloczynem logicznym tych wyjść i w ten sposób otrzymamy
4 bitowy licznik synchroniczny:

Poniżej podajemy funkcje logiczne sterujące poszczególnymi wejściami przerzutników. Funkcje te tworzą dobrze zdefiniowany
ciąg, który można rozszerzać na dowolną (rozsądną) ilość przerzutników J-K. Zamiast bramek AND mogą być wykorzystane
wielowejściowe przerzutniki J-K (w tym właśnie celu się je produkuje - redukcja dodatkowych elementów).

TA = JA = KA = 1
TB = JB = KB = QA
TC = JC = KC = QAQB
TD = JD = KD = QAQBQC
...

W poniższym symulatorze licznika synchronicznego możesz prześledzić opisane sygnały sterujące wejściami poszczególnych
przerzutników. Wejście C jest wejściem impulsowym i każde kliknięcie generuje jeden takt zegarowy. Stany wyjściowe licznika
zmieniają się synchronicznie z opadającym zboczem sygnału zegarowego.

Synchroniczne liczniki modulo n


Idea działania asynchronicznych liczników modulo n polegała na zerowaniu licznika po osiągnięciu stanu n. Wadą tego
rozwiązania jest to, iż przez krótką chwilę na wyjściu licznika pojawia się stan n. Wady tej nie posiadają liczniki synchroniczne, w
których kolejne stany powstają ze stanów poprzednich przetworzonych przez odpowiednią sieć logiczną sterującą przerzutnikami.
Poniżej podajemy dokładną procedurę projektowania takich liczników. Jeśli zrozumiesz ten materiał, to będziesz w stanie nie tylko
zaprojektować dowolny licznik synchroniczny, ale również układ generujący dowolne kody binarne.
Zaprojektujemy licznik synchroniczny zliczający modulo 7. Do jego budowy będziemy potrzebowali trzech przerzutników J-K MS
oraz kilka bramek NAND.
Stan QC QB QA 1. Określamy tabelkę stanów dla poszczególnych przerzutników. Napływające impulsy zegarowe będą
powodowały przejście przerzutników przez kolejno zdefiniowane stany licznika. Po stanie 6 następuje
0 0 0 0 wyzerowanie licznika i cykl rozpoczyna się od początku.
1 0 0 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0036.php 162 / 253


Bit w zastosowaniach - Licznik synchroniczny 2014-10-03

1 0 0 1 Przerzutniki w liczniku synchronicznym są sterowane wspólnym sygnałem zegarowym. Będą zatem


2 0 1 0 pracowały w poniższym układzie:
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
0 0 0 0

Zadanie polega na określeniu sygnałów sterujących wejściami J i K. Wybieramy układ przerzutnika T -


wejścia J i K połączone razem do wspólnego sygnału cyfrowego. Jeśli sygnał ten będzie posiadał poziom
1, to impuls zegarowy C spowoduje zmianę stanu przerzutnika J-K na przeciwny. Jeśli sygnał sterujący
wejściami J i K będzie posiadał poziom 0, to impuls zegarowy nie spowoduje zmiany stanu przerzutnika.
2. Dla każdego stanu licznika określamy, które przerzutniki muszą przełączyć swój stan na przeciwny przy przejściu
licznika do stanu następnego.
Przykładowo załóżmy, iż licznik znajduje się w stanie 5, czyli:

QC = 1, QB = 0 i QA = 1.

Następnym stanem jest stan 6, czyli

QC = 1, QB = 1 i QA = 0.

Zatem przy przejściu ze stanu 5 do stanu 6:

przerzutnik C pozostaje w stanie 1


przerzutnik B przełącza się z 0 na 1
przerzutnik A przełącza się z 1 na 0

Umówmy się, iż konieczność przełączenia stanu przerzutnika będziemy oznaczali przez 1, a pozostanie w obecnym
stanie będziemy oznaczali przez 0. Utworzymy zatem następującą tabelkę przełączeń:
Wyjścia Przejście Przełączanie Przerzutnik A przełącza swój stan na przeciwny w każdym stanie licznika za
Stan stanu wyjątkiem stanu 6, w którym wyjście QA ma poziom 0. W następnym stanie
QC QB QA TC TB TA
licznika 0 wyjście QA również ma poziom 0, zatem zmiana stanu
0 0 0 0 0→1 0 0 1 przerzutnika A nie jest konieczna i dlatego w komórce tabelki jest wpis 0.
1 0 0 1 1→2 0 1 1 Przerzutnik B przełącza swój stan w co drugim stanie licznika. W stanie 6
dodatkowo musi on być przełączony, ponieważ wyjście QB ma poziom 1.
2 0 1 0 2→3 0 0 1
Przerzutnik C przełącza swój stan tylko przy stanie licznika 3 (z 0 na 1) i 6 (z
3 0 1 1 3→4 1 1 1 1 na 0). Sygnały TA, TB i TC podamy na wejścia J i K odpowiednich
przerzutników.
4 1 0 0 4→5 0 0 1
5 1 0 1 5→6 0 1 1
6 1 1 0 6→0 1 1 0
0 0 0 0 0→1 0 0 1

Jeśli dany sygnał TA, TB lub TC będzie miał poziom logiczny 0, to impuls zegarowy nie spowoduje przełączenia
stanu wyjściowego przerzutnika. Jeśli natomiast sygnał sterujący wejściami J i K przyjmie poziom logiczny 1, to
impuls zegarowy przełączy stan przerzutnika na przeciwny, co wynika z tabelki przejść dla przerzutnika J-K MS.
3. Na podstawie tabelki przełączeń przerzutników określamy funkcje logiczne TA, TB i TC, które będą sterowały
wejściami J i K przerzutników w liczniku synchronicznym. Wykorzystamy mapy Karnaugha do minimalizacji funkcji
logicznych.

Sygnał A

Obszar TA1 Obszar TA2

0 1 0 1
00 1 1 00 1 1

01 1 1 01 1 1

11 0 X 11 0 X

10 1 1 10 1 1

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0036.php 163 / 253


Bit w zastosowaniach - Licznik synchroniczny 2014-10-03

Sygnał B

Obszar TB1 Obszar TB2


0 1 0 1
00 0 1 00 0 1

01 0 1 01 0 1

11 1 X 11 1 X

10 0 1 10 0 1

Sygnał C

Obszar TC1 Obszar TC2


0 1 0 1
00 0 0 00 0 0

01 0 1 01 0 1

11 1 X 11 1 X

10 0 0 10 0 0

Licznik jest już gotowy. W celu sprawdzenia poprawności wyprowadzonych funkcji logicznych TA, TB i TC, testujemy je w prostym
programie w języku C++. Zwróć uwagę na sposób zaprogramowania funkcji przerzutnika T.

// Symulacja sieci synchronicznego licznika modulo 7


// (C)2007 mgr Jerzy Wałaszek
// I LO w Tarnowie
#include <iostream>
using namespace std;
int main()
{
bool TA,TB,TC,QA,QB,QC;
int i;
QA = QB = QC = 0; // zerujemy przerzutniki T
cout << "NUMER QC QB QA\n"
"-------------\n";
// W pętli przechodzimy przez 8 kolejnych stanów licznika
for(i = 0; i < 8; i++)
{
// wyświetlamy stan wyjść licznika
cout << " " << i << " " << QC << " " << QB << " " << QA << endl;
// wyznaczamy funkcje sterujące TA, TB i TC
TA = !(QC&&QB);
TB = !(!QA&&!(QC&&QB));
TC = !(!(QC&&QB)&&!(QB&&QA));
// Na podstawie funkcji TA, TB i TC dokonujemy przełączeń przerzutników

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0036.php 164 / 253


Bit w zastosowaniach - Licznik synchroniczny 2014-10-03

if(TA) QA = !QA;
if(TB) QB = !QB;
if(TC) QC = !QC;
}
cout << endl;
return 0;
}

NUMER QC QB QA
-------------
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 0 0 0

Wynik jest prawidłowy. Poniżej umieściliśmy symulację licznika. Wejście C generuje impuls zegarowy przy każdym kliknięciu go
myszką.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0036.php 165 / 253


Bit w zastosowaniach - Licznik rewersyjny 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Licznik rewersyjny
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Licznik rewersyjny (ang. reverse counter) można zbudować jako asynchroniczny (ang. ripple reverse counter) lub synchroniczny
(synchronous reverse counter). Samo zliczanie wstecz jest dosyć proste do uzyskania - wystarczy pobierać sygnał z
komplementarnych wyjść Q przerzutników T w liczniku asynchronicznym. Zanegowane stany wyjść pracują właśnie jako licznik
rewersyjny.
Przyjrzyjmy się poniższej tabelce:

Wyjścia normalne Wyjścia zanegowane Stan 0 uzyskamy wykorzystując wejście PRE (PRESET - ustwianie Q na 1) zamiast
Stan QD QC QB QA QD QC QB QA Stan CLR (CLEAR - ustawianie Q na 0) (patrz tabelka).
0 0 0 0 0 1 1 1 1 15 Rozważania te sugerują następujący układ pracy asynchronicznego licznika
1 0 0 0 1 1 1 1 0 14 rewersyjnego:
2 0 0 1 0 1 1 0 1 13
3 0 0 1 1 1 1 0 0 12
4 0 1 0 0 1 0 1 1 11
5 0 1 0 1 1 0 1 0 10
6 0 1 1 0 1 0 0 1 9
7 0 1 1 1 1 0 0 0 8
8 1 0 0 0 0 1 1 1 7
9 1 0 0 1 0 1 1 0 6
10 1 0 1 0 0 1 0 1 5
11 1 0 1 1 0 1 0 0 4
12 1 1 0 0 0 0 1 1 3
13 1 1 0 1 0 0 1 0 2 Synchroniczny licznik rewersyjny można oprzeć na tej samej zasadzie lub
14 1 1 1 0 0 0 0 1 1 zaprojektować go od podstaw wyznaczając funkcje przełączające T dla
15 1 1 1 1 0 0 0 0 0 przerzutników J-K. Zastosujemy tę drugą metodę.
Na podstawie tabelki pożądanych stanów licznika wyznaczamy sygnały Kolejne stany licznika Funkcje przełączające
przełączające TX dla poszczególnych przerzutników. Sygnał TX ma wartość zero, Stan QD QC QB QA TD TC TB TA
gdy przerzutnik X nie musi być przełączony przy przejściu do kolejnego stanu 0 0 0 0 0 1 1 1 1
licznika i 1, gdy przerzutnik należy przełączyć w stan przeciwny. 15 1 1 1 1 0 0 0 1
Wartości poszczególnych funkcji przełączających można wyprowadzić po krótkiej 14 1 1 1 0 0 0 1 1
analizie tabelki lub wykorzystując tablice Karnaugha. Ja wybrałem ten pierwszy 13 1 1 0 1 0 0 0 1
sposób: 12 1 1 0 0 0 1 1 1
11 1 0 1 1 0 0 0 1
10 1 0 1 0 0 0 1 1
9 1 0 0 1 0 0 0 1
8 1 0 0 0 1 1 1 1
7 0 1 1 1 0 0 0 1
6 0 1 1 0 0 0 1 1
5 0 1 0 1 0 0 0 1
4 0 1 0 0 0 1 1 1
Zwróć uwagę, iż poszczególne sygnały przełączające tworzą regularny ciąg 3 0 0 1 1 0 0 0 1
(porównaj go z ciągiem funkcji przełączających d l a licznika synchronicznego 2 0 0 1 0 0 0 1 1
zliczającego w przód). 1 0 0 0 1 0 0 0 1
Funkcje przełączające TX sterują wejściami J i K poszczególnych przerzutników wchodzących w skład sieci logicznej licznika.
Poniżej przedstawiamy symulację takiej sieci. Wejście zegarowe C jest wejściem impulsowym. Kliknięcie go powoduje przejście
licznika do następnego stanu. Stany wyjściowe licznika zmieniają się synchronicznie z opadającym zboczem sygnału
zegarowego.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0037.php 166 / 253


Bit w zastosowaniach - Licznik rewersyjny 2014-10-03

Otrzymana sieć logiczna jest równoważna sieci licznika synchronicznego z zanegowanymi wyjściami QA...QD.

Licznik modulo 10 zliczający w górę i w dół


Wykorzystując opisaną metodę projektowania liczników synchronicznych przez określanie funkcji przełączających TX można
konstruować dowolne układy sekwencyjne, tzn. takie, które w takt kolejnych impulsów zegarowych generują dowolne kody
binarne. Aby to udowodnić, zaprojektujemy licznik zliczający w dół i w górę modulo 10 (jest to tzw. rewersyjny synchroniczny
licznik BCD). Do sterowania kierunkiem zliczania będzie wymagany dodatkowy sygnał P. Umówmy się, iż dla P = 1 licznik zlicza
w górę od 0 do 9, czyli jest normalnym licznikiem synchronicznym modulo 10, a dla P = 0 licznik staje się licznikiem rewersyjnym,
zliczającym w dół od 9 do 0. Ułóżmy tabelkę stanów licznika wraz z sygnałami przełączającymi TX dla przerzutników:

P=1 P=0
Kolejne stany licznika Funkcje przełączające Kolejne stany licznika Funkcje przełączające
Stan QD QC QB QA TD TC TB TA Stan QD QC QB QA TD TC TB TA
0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1
1 0 0 0 1 0 0 1 1 9 1 0 0 1 0 0 0 1
2 0 0 1 0 0 0 0 1 8 1 0 0 0 1 1 1 1
3 0 0 1 1 0 1 1 1 7 0 1 1 1 0 0 0 1
4 0 1 0 0 0 0 0 1 6 0 1 1 0 0 0 1 1
5 0 1 0 1 0 0 1 1 5 0 1 0 1 0 0 0 1
6 0 1 1 0 0 0 0 1 4 0 1 0 0 0 1 1 1
7 0 1 1 1 1 1 1 1 3 0 0 1 1 0 0 0 1
8 1 0 0 0 0 0 0 1 2 0 0 1 0 0 0 1 1
9 1 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0 0 0

Na podstawie tej tabelki wyznaczamy funkcje przełączające TX wykorzystując mapy Karnaugha.

Sygnał TA
Z tym sygnałem nie ma problemów, gdyż z prostej analizy tabelki wynika, iż:

Sygnał TB

Obszar TB1 Obszar TB2 Obszar TB3 Obszar TB4

00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10
000 0 0 0 1 000 0 0 0 1 000 0 0 0 1 000 0 0 0 1

001 1 0 0 1 001 1 0 0 1 001 1 0 0 1 001 1 0 0 1

011 X X X X 011 X X X X 011 X X X X 011 X X X X

010 1 0 X X 010 1 0 X X 010 1 0 X X 010 1 0 X X

110 0 0 X X 110 0 0 X X 110 0 0 X X 110 0 0 X X

111 X X X X 111 X X X X 111 X X X X 111 X X X X

101 0 1 1 0 101 0 1 1 0 101 0 1 1 0 101 0 1 1 0

100 0 1 1 0 100 0 1 1 0 100 0 1 1 0 100 0 1 1 0

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0037.php 167 / 253


Bit w zastosowaniach - Licznik rewersyjny 2014-10-03

Sygnał TC

Obszar TC1 Obszar TC1 Obszar TC1

00 01 11 10 00 01 11 10 00 01 11 10
000 0 0 0 0 000 0 0 0 0 000 0 0 0 0
001 1 0 0 0 001 1 0 0 0 001 1 0 0 0
011 X X X X 011 X X X X 011 X X X X
010 1 0 X X 010 1 0 X X 010 1 0 X X

110 0 0 X X 110 0 0 X X 110 0 0 X X

111 X X X X 111 X X X X 111 X X X X

101 0 0 1 0 101 0 0 1 0 101 0 0 1 0

100 0 0 1 0 100 0 0 1 0 100 0 0 1 0

Sygnał TD

Obszar TD1 Obszar TD2 Obszar TD3 Obszar TD4

00 01 11 10 00 01 11 10 00 01 11 10 00 01 11 10
000 1 0 0 0 000 1 0 0 0 000 1 0 0 0 000 1 0 0 0
001 0 0 0 0 001 0 0 0 0 001 0 0 0 0 001 0 0 0 0

011 X X X X 011 X X X X 011 X X X X 011 X X X X

010 1 0 X X 010 1 0 X X 010 1 0 X X 010 1 0 X X

110 0 1 X X 110 0 1 X X 110 0 1 X X 110 0 1 X X

111 X X X X 111 X X X X 111 X X X X 111 X X X X


101 0 0 1 0 101 0 0 1 0 101 0 0 1 0 101 0 0 1 0
100 0 0 0 0 100 0 0 0 0 100 0 0 0 0 100 0 0 0 0

Podsumujmy:

Ponieważ otrzymane funkcje logiczne są nieco skomplikowane, sprawdzimy je w prostym programie symulacyjnym w języku C++.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0037.php 168 / 253


Bit w zastosowaniach - Licznik rewersyjny 2014-10-03

// Test funkcji przełączających dla licznika synchronicznego


// zliczającego wprzód i wstecz modulo dziesięć
//----------------------------------------------------------
// (C)2007 mgr Jerzy Wałaszek I-LO w Tarnowie
//----------------------------------------------------------
#include <iostream>
using namespace std;
int main()
{
int P,QA,QB,QC,QD,TB,TC,TD,i,i0;
cout << " P QD QC QB QA TD TC TB TA | P QD QC QB QA TD TC TB TA\n"
"---------------------------+---------------------------\n";
for(i0 = i = 0; i < 10; i++)
{
QD = (i&8) > 0;
QC = (i&4) > 0;
QB = (i&2) > 0;
QA = (i&1);
P = 1;
TB = !(!(!P&&!QA&&!(!QB&&!QC&&!QD))&&!(P&&QA&&!QD));
TC = !(!(!P&&!QA&&!(!(QC&&!QB)&&!QD))&&!(P&&QB&&QA));
TD = !(!(!P&&!QA&&!(!(!QD&&!QC&&!QB)&&!QD))&&!(P&&QA&&!(!QD&&!(QC&&QB))));
cout << " 1 " << QD << " " << QC << " " << QB << " " << QA
<< " " << TD << " " << TC << " " << TB << " 1 | 0 ";
P = 0;
QD = (i0&8) > 0;
QC = (i0&4) > 0;
QB = (i0&2) > 0;
QA = (i0&1);
P = 0;
TB = !(!(!P&&!QA&&!(!QB&&!QC&&!QD))&&!(P&&QA&&!QD));
TC = !(!(!P&&!QA&&!(!(QC&&!QB)&&!QD))&&!(P&&QB&&QA));
TD = !(!(!P&&!QA&&!(!(!QD&&!QC&&!QB)&&!QD))&&!(P&&QA&&!(!QD&&!(QC&&QB))));
cout << QD << " " << QC << " " << QB << " " << QA << " "
<< TD << " " << TC << " " << TB << " 1\n";
if(!i0) i0 = 9; else i0--;
}
cout << endl;
return 0;
}

P QD QC QB QA TD TC TB TA | P QD QC QB QA TD TC TB TA
---------------------------+--------------------------
1 0 0 0 0 0 0 0 1 | 0 0 0 0 0 1 0 0 1
1 0 0 0 1 0 0 1 1 | 0 1 0 0 1 0 0 0 1
1 0 0 1 0 0 0 0 1 | 0 1 0 0 0 1 1 1 1
1 0 0 1 1 0 1 1 1 | 0 0 1 1 1 0 0 0 1
1 0 1 0 0 0 0 0 1 | 0 0 1 1 0 0 0 1 1
1 0 1 0 1 0 0 1 1 | 0 0 1 0 1 0 0 0 1
1 0 1 1 0 0 0 0 1 | 0 0 1 0 0 0 1 1 1
1 0 1 1 1 1 1 1 1 | 0 0 0 1 1 0 0 0 1
1 1 0 0 0 0 0 0 1 | 0 0 0 1 0 0 0 1 1
1 1 0 0 1 1 0 0 1 | 0 0 0 0 1 0 0 0 1

Wynik działania programu jest w pełni zgodny z tabelką sygnałów przełączających, zatem wyprowadzone funkcje są poprawne i
możemy rozpocząć budowę sieci logicznej licznika. Poniżej przedstawiamy symulację takiej sieci. Licznik posiada trzy wejścia -
wybór trybu pracy P, zegarowe C działające impulsowo i asynchroniczne wejście zerowania CLR.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0037.php 169 / 253


Bit w zastosowaniach - Licznik rewersyjny 2014-10-03

Liczniki synchroniczne są produkowane w postaci gotowych układów cyfrowych. Poniżej przedstawiamy najpopularniejsze
synchroniczne liczniki rewersyjne dwójkowe i binarne wchodzące w skład serii SN74.

Układy scalone SN74190 i SN74191 są


synchronicznymi licznikami rewersyjnymi
pracującymi w kodach binarnym 8421
(SN74191) i BCD (SN74190). Liczniki
posiadają wejścia programujące A,B,C i D,
które można wykorzystywać do do ustalania
wstępnego stanu liczników. Dane z tych
wejść są asynchronicznie przepisywane do
przerzutników J-K przy ustawieniu wejścia
LOAD w stan 0.
Przerzutniki J-K tworzące licznik zmieniają
swój stan przy przejściu sygnału zegarowego
SN74190 - synchroniczny licznik rewersyjny BCD ze stanu niskiego w wysoki - zwróć uwagę
SN74191 - synchroniczny licznik rewersyjny binarny na oznaczenie wejścia taktującego. Licznik
zlicza impulsy zegarowe przy stanie niskim
wejścia CTEN. Gdy wejście to przyjmie stan
wysoki, zliczanie jest zablokowane. Kierunek
zliczania określa stan wejścia D/U (ang.
Down/Up). Przy stanie wysokim licznik
zlicza w dół, a przy stanie niskim w górę.
Wyjścia RCO (ang. Ripple Carry Output -
wyjście przeniesienia kaskadowego) oraz
MAX/MIN umożliwiają podłączenie kolejnych
scalonych liczników SN74190/1. Wyjście
RCO generuje ujemny impuls o czasie
trwania porównywalnym z ujemnym
i mpul s em zegarowym przy powstaniu
przeniesienia (zliczanie w górę) lub pożyczki
(zliczanie w dół). Wyjście RCO łączy się z
wejściem CTEN następnego licznika przy
równoległym taktowaniu liczników sygnałem
zegarowym lub z wejściem CLK następnego
licznika. Wyjście MAX/MIN generuje dodatni
impuls o czasie trwania równym pełnemu
okresowi sygnału zegarowego przy
zaistnieniu warunku przepełnienia lub
niedopełnienia licznika. Wyjście to używane
jest przez układy generacji równoległych
przeniesień. Odpowiednie informacje na ten
temat znajdziesz w materiałach
producentów.

Dwa kolejne układy SN74192 i SN74193 są


również synchronicznymi licznikami
rewersyjnymi BCD (SN74192) i binarnymi
(SN74193). Od powyżej opisanych
SN74192 - synchroniczny licznik rewersyjny BCD synchronicznych liczników rewersyjnych
SN74193 - synchroniczny licznik rewersyjny binarny różnią się one sygnałami wejściowymi i
wyjściowymi.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0037.php 170 / 253


Bit w zastosowaniach - Licznik rewersyjny 2014-10-03

wyjściowymi.
Licznik posiada asynchroniczne wejście CLR
(ang. clear - czyść). Podanie stanu
wysokiego na to wejście powoduje
wyzerowanie wszystkich przerzutników.
Zamiast pojedynczego wejścia zegarowego,
licznik posiada dwa wejścia UP (ang. w górę)
i DOWN (ang. w dół). Impulsy zegarowe
podawane na te wejścia odpowiednio
powodują zliczanie w górę lub w dół.
Nieużywane wejście zegarowe powinno być
w stanie wysokim.
Dwa wyjścia CO (ang. Carry Output - wyjście
przeniesienia) i BO (ang. Borrow Output -
wyjście pożyczki) pozwalają w prosty
sposób łączyć ze sobą kolejne dekady
liczników. Wyjście CO łączymy z wejściem
U P kolejnego licznika a wyjście BO z
wejściem DOWN. Więcej informacji na temat
tych układów znajdziesz w materiałach
producentów.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0037.php 171 / 253


Bit w zastosowaniach - Rejestr 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Rejestr
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Rejestr (ang. register) jest układem cyfrowym służącym do zapamiętywania


określonej porcji bitów danych. Rejestry stosuje się tam, gdzie występuje potrzeba
chwilowego przechowania niewielkiej ilości informacji binarnej (np. wynik pewnej
operacji arytmetycznej lub logicznej). Rejestry budowane są z przerzutników.
Określmy sygnały wejściowe i wyjściowe dla typowego rejestru:

Sygnały wejściowe A, B, C i D podają informację do zapamiętania w rejestrze. Wejście CLK jest wejściem zapisującym informację
z wejść A...D do rejestru. W zależności od typu zastosowanych przerzutników zapis może następować przy zmianie poziomu
logicznego na wejściu CLK z 0 na 1 (zbocze dodatnie) lub z 1 na 0 (zbocze ujemne). Informacja przechowywane w rejestrze
pojawia się na wyjściach QA, QB, QC i QD. Stan niski na wejściu CLR powoduje wyzerowanie wszystkich wyjść QA...QD rejestru.
Poniżej przedstawiamy symulacje sieci logicznych rejestrów zbudowanych z różnych przerzutników.
Rejestr na bazie przerzutników SR/D-LATCH
Typowym układem pracy przerzutnika w rejestrze jest przerzutnik D.
Rejestr pokazany z lewej strony został zbudowany z bramek NAND
tworzących przerzutniki SR pracujące jako D-LATCH. Gdy sygnał
zegarowy CLK przyjmuje poziom logiczny 1, odblokowane zostają bramki
wejściowe i dane z wejść A...D przedostają się na wejścia przerzutników.
Wejścia S i R przerzutników są zawsze wysterowane przeciwnymi
sygnałami logicznymi, nie pojawi się zatem stan niedozwolony (S = 0 i R =
0).
Przerzutnik SR ustawiają się zgodnie z sygnałami wejściowymi. Gdy
sygnał zegarowy CLK powróci do stanu 0, na wejściach przerzutników
pojawiają się sygnały neutralne i przerzutniki pamiętają ostatnio
wprowadzony stan.
W czasie trwania impulsu zegarowego stan wejść przenosi się na wyjścia.
Jeśli dowolne wejście zmieni swój stan, to odpowiadające mu wyjście
również się odpowiednio zmieni - możesz to przetestować klikając na
przycisk CLK, a następnie zmieniając stan wybranego wejścia.
Zatrzaśnięcie informacji następuje dopiero po przejściu sygnału
zegarowego CLK w stan niski. W tym stanie zmiany wejść nie przenoszą
się na wyjście - rejestr pamięta informację.
Tego typu rejestr można zbudować bezpośrednio za pomocą jednego
układu SN7477, który właśnie zawiera 4 przerzutniki D-LATCH:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0038.php 172 / 253


Bit w zastosowaniach - Rejestr 2014-10-03

Rejestr na bazie przerzutników D FLIP FLOP

Jeśli do budowy rejestru zastosujemy przerzutniki D Flip Flop, to przepisanie danych wejściowych A...D do rejestru wystąpi przy
narastającym zboczu (przejściu ze stanu 0 do stanu 1) sygnału zegarowego CLK. Przy ustalonym poziomie logicznym na wejściu
CLK dane wejściowe A...D nie wpływają na pamiętaną przez rejestr informację.
Identyczny rejestr możemy zbudować przy pomocy układu scalonego SN74175, który zawiera cztery przerzutniki D Flip Flop
sterowane wspólnym sygnałem zegarowym. Układ udostępnia wejście zerowania oraz dodatkowo wyjścia komplementarne Q z
każdego przerzutnika.

Rejestr na bazie przerzutników J-K


Budowa zwykłych rejestrów z przerzutników J-K jest oczywiście możliwa, lecz mniej korzystna od budowy rejestrów z
przerzutników D, ponieważ musimy zastosować dodatkowe inwertory na wejściach K (przekształcenie przerzutnika J-K w
przerzutnik D). Zalety przerzutników J-K ujawniają się przy bardziej zaawansowanych konstrukcjach. Wpis informacji z wejść A...D
do przerzutników następuje przy ujemnym zboczu (przejściu ze stanu 1 do stanu 0) sygnału zegarowego CLK.

Magistrala
Jeśli w układzie cyfrowym stosujemy kilka rejestrów, pomiędzy którymi chcemy wymieniać dane, to pojawia się problem ich
efektywnego łączenia. Wyjść układów cyfrowych nie wolno łączyć ze sobą, gdyż prowadzi to do zwarć mogących uszkodzić
układy scalone. Jednym z możliwych rozwiązań jest zastosowanie multiplekserów, jednakże jest to rozwiązanie skomplikowane i
kosztowne. Dużo lepszym rozwiązaniem jest użycie magistrali (ang. bus), która jest zbiorem linii sygnałowych przesyłających po
jednym bicie informacji. Wejścia danych wszystkich rejestrów są połączone bezpośrednio z liniami magistrali. Jednakże wyjścia
rejestrów muszą być dołączane do magistrali przez specjalne bramki trójstanowe (ang. tri-state output gate).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0038.php 173 / 253


Bit w zastosowaniach - Rejestr 2014-10-03

Bramka trójstanowa posiada wejście danych A, wyjście danych Y oraz wejście sterujące G. Jeśli na wejściu G utrzymuje się stan
aktywny (1 lub 0 w zależności, czy jest to wejście G, czy G), to bramka zachowuje się jak zwykły bufor - sygnał z wejścia A
przedostaje się na wyjście Y. Jeśli na wejście G podany zostanie stan nieaktywny, to wyjście Y przechodzi w stan wysokiej
oporności, co praktycznie oznacza całkowite odcięcie tej bramki od linii wyjściowej. Dzięki temu rozwiązaniu do magistrali można
podłączać wyjścia wielu układów cyfrowych bez obawy o zwarcia - pod warunkiem oczywiście, iż tylko jedno z tych urządzeń jest
w danej chwili aktywne.
Poniżej przedstawiamy przykład podłączenia do wspólnej magistrali czterech rejestrów 4 bitowych za pomocą bramek
trójstanowych.

Wpis danych A...D z magistrali do wybranego rejestru następuje po podaniu impulsu na wejście od CLK1 do CLK4. Na magistrali
można umieścić zawartość wybranego rejestru przez podanie stanu 0 na jedno z wejść EN1...EN4.
Przez odpowiednie manipulowanie sygnałami CLKn i ENn można przepisywać dane pomiędzy dowolnymi parami rejestrów. Na
przykład przeniesienie danych z rejestru REG2 do REG4 nastąpi po ustawieniu na 0 EN2 oraz po podaniu impulsu zegarowego na
CLK4.
Na schematach blokowych magistralę rysuje się zwykle pogrubioną kreską. Poszczególne linie tworzące magistralę opisuje się za
pomocą nazw. Sygnały dołącza się do magistrali podając nazwę linii. W ten sposób schematy sieci logicznych zawierających
magistrale stają się bardziej przejrzyste.

Bramki trójstanowe produkowane są przez przemysł elektroniczny w różnych konfiguracjach. Poniżej zebraliśmy informacje o kilku
popularnych układach cyfrowych.

SN74125 - cztery buforowe bramki trójstanowe sterowane stanem SN74126 - cztery buforowe bramki trójstanowe sterowane stanem
niskim wysokim

SN74365 - sześć bramek trójstanowych włączanych wspólnymi SN74366 - sześć trójstanowych inwertorów włączanych wspólnymi
wejściami sterującymi G wejściami sterującymi G

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0038.php 174 / 253


Bit w zastosowaniach - Rejestr 2014-10-03

Więcej informacji na temat bramek trójstanowych i sposobów ich wykorzystywania znajdziesz w materiałach producentów.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0038.php 175 / 253


Bit w zastosowaniach - Rejestr przesuwny 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Bity w elektronice
Rejestr przesuwny
Bramki logiczne Zastosowania
Cyfrowe układy scalone TTL i CMOS Przerzutnik RS
Zasilanie układów TTL i CMOS Przerzutnik D
Układy kombinatoryczne z bramek cyfrowych Przerzutnik J-K
Przerzutniki Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwny

Rejestr przesuwny (ang. shift register) jest rejestrem zbudowanym z przerzutników


połączonych ze sobą w taki sposób, iż w takt impulsów zegarowych przechowywana
informacja bitowa przemieszcza się (przesuwa) do kolejnych przerzutników. Rejestry
przesuwne mogą być budowane z przerzutników synchronicznych D Flip-Flop (D-Latch
nie nadają się do tego celu), RS lub JK. Zasadę działania opiszemy na przykładzie
prostego rejestru przesuwnego zbudowanego z przerzutników typu D.
Określamy sygnały wejściowe i wyjściowe rejestru.

Dane z wejścia S są wprowadzane do rejestru przy dodatnim zboczu sygnału zegarowego CLK (jeśli do konstrukcji rejestru
zastosujemy przerzutniki JK, to wpis może następować przy zboczu ujemnym). Jednocześnie dane z wyjść QA do QD zostają
przesunięte o jeden bit w prawo. Na zwolnionym wyjściu QA pojawią się dane wprowadzone z wejścia S. Wejście sterujące CLR
umożliwia wyzerowanie rejestru.
Budowa takiego rejestru jest bardzo prosta - wystarczy połączyć wejścia D przerzutników z wyjściami Q poprzednich
przerzutników. Wejście D pierwszego przerzutnika łączymy bezpośrednio z wejściem S. Jeśli teraz wystąpi impuls zegarowy, to
pamiętana informacja przemieści się o jeden bit w prawo.
Poniżej demonstrujemy symulację sieci logicznej rejestru przesuwnego opartego na przerzutnikach typu D.

Przedstawiony rejestr jest typu SIPO (ang. Serial In Parallel Out - wejście szeregowe - wyjście równoległe). Często wymagana jest
możliwości równoległego zapisu danych do rejestru. W takim przypadku rejestr posiada dodatkowe wejścia danych A, B, C i D
oraz wejście SH/LD (ang. SHift/LoaD - przesuw/ładowanie) sterujące przesuwaniem/wpisem danych (wpis danych z wejść A,B,C i
D może też być dokonywany asynchronicznie z wykorzystaniem wejść S i R przerzutników). Poniżej przedstawiamy symulację
sieci logicznej rejestru przesuwnego z wejściami i wyjściami równoległymi.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0039.php 176 / 253


Bit w zastosowaniach - Rejestr przesuwny 2014-10-03

Bramki NAND służą do przyłączania do wejść D przerzutników wyjścia Q poprzedniego przerzutnika (SH/LD = 1) lub wejścia
równoległego do wpisywania danych (SH/LD = 0). Zatem w zależności od stanu logicznego wejścia SH/LD rejestr przy
narastającym zboczu sygnału zegarowego albo przesuwa wpisane dane, albo dokonuje wpisu nowych danych z wejść A...D.
Wykorzystując podany powyżej sposób przełączania sygnałów wejściowych na wejście D przerzutnika można w prosty sposób
zaprojektować dwukierunkowy rejestr przesuwny. Przy przesuwie w odwrotnym kierunku do wejść D podłączamy wyjścia Q
następnych, a nie poprzednich przerzutników. Poniżej przedstawiamy przykładową sieć logiczną takiego rejestru.

Kierunkiem przesuwu (umownym) steruje wejście R/L. (ang. Right/Left - w prawo/ w lewo). Rejestr posiada dwa wejścia danych
szeregowych SR - dla przesuwu w prawo oraz SL dla przesuwu w lewo.
Rejestry przesuwne produkowane są w postaci gotowych układów scalonych. Poniżej opisujemy dwa uniwersalne rejestry
przesuwne.

Układ scalony SN74195 zawiera 4 bitowy rejestr przesuwny


SN74195 - 4-bitowy rejestr przesuwny z wejściem szeregowym i (w kierunku starszych bitów) z możliwością wprowadzania
równoległym oraz z wyjściem równoległym danych szeregowych (wejścia J oraz K) lub danych
równoległych (wejścia A, B, C i D). Funkcją rejestru steruje
wejście SH/LD. Jeśli SH/LD = 1, to rejestr przesuwa dane
przy każdym narastającym zboczu sygnału zegarowego
doprowadzonego do wejścia CLK. W tym trybie pracy do
rejestru można wprowadzać dane z wejść szeregowych -
wejścia J i K łączymy razem i podajemy na nie bit danych,
który ma zostać wprowadzony do pierwszego przerzutnika
przy przesuwie danych. Jeśli SH/LD = 0, to rejestr pracuje jak
zwykły rejestr równoległy. Przy narastającym zboczu sygnału
zegarowego CLK dane z wejść A, B, C i D zostają przepisane
na odpowiednie wyjścia QA, QB, QC i QD.
Układ SN74195 jest prawie dokładnym odpowiednikiem
drugiego rejestru, który przedstawiliśmy w tym artykule.
Różnica polega na występowaniu dodatkowych wejść
szeregowych J i K oraz wyjścia komplementarnego QD.
Rozdzielenie funkcji wejść szeregowych z wejściami
równoległymi ułatwia konstruowanie układów cyfrowych.
Poniżej umieściliśmy tabelkę stanów dla rejestru SN74195,
którą przepisaliśmy z materiałów producenta.

Wejścia Wyjścia
Szer. Równ.
CLR SH/LD CLK QA QB QC QD QD
J K A B C D
0 X X X X X X X X 0 0 0 0 1
1 0 0→1 X X a b c d a b c d d
1 1 0 X X X X X X QA QB QC QD QD
1 1 0→1 0 1 X X X X QA QA QB QC QC

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0039.php 177 / 253


Bit w zastosowaniach - Rejestr przesuwny 2014-10-03

1 1 0→1 0 0 X X X X 0 QA QB QC QC
1 1 0→1 1 1 X X X X 1 QA QB QC QC
1 1 0→1 1 0 X X X X QA QA QB QC QC

Na podstawie tabelki stanów rejestru wyciągamy wniosek, iż wejścia szeregowe J i K zachowują się jak wejścia sterujące
przerzutnika JK i sterują stanem pierwszego przerzutnika. Dzięki takiemu rozwiązaniu możemy uzyskiwać różne funkcje rejestru,
czyli jest to układ uniwersalny. Rejestr SN74195 w prosty sposób można łączyć w większe zespoły. Poniżej przedstawiamy
schemat rejestru 16 bitowego zbudowanego z 4 rejestrów SN74195.

SN74194 - 4-bitowy dwukierunkowy rejestr przesuwny z wejściem


szeregowym i równoległym oraz z wyjściem równoległym Układ scalony SN74194 jest 4 bitowym, uniwersalnym,
dwukierunkowym rejestrem przesuwnym, do którego można
wprowadzać dane zarówno szeregowo jak i równolegle. Do
równoległego wprowadzania danych służą wejścia A, B, C i
D. Układ posiada dwa niezależne wejścia szeregowego
wprowadzania danych:
- SR - dane szeregowe wprowadzane do rejestru przy
przesuwie w prawo (ang. Serial Right).
- SL - dane szeregowe wprowadzane do rejestru przy
przesuwie w lewo (ang. Serial Left).
Podobne rozwiązanie zastosowano w rejestrze nr 3, który
opisaliśmy w tym artykule.
Wpis danych oraz przesuw wykonywany jest przy dodatnim
zboczu sygnału zegarowego CLK. Wejścia S0 i S1 służą do
wyboru trybu pracy rejestru. Poniżej umieściliśmy tabelkę
stanów dla rejestru SN74194 pochodzącą z danych
producenta.

Wejścia Wyjścia
Tryb Szer. Równ.
CLR CLK QA QB QC QD
S1 S0 SL SR A B C D
0 X X X X X X X X X 0 0 0 0
1 X X L X X X X X X QA QB QC QD
1 1 1 0→1 X X a b c d a b c d
1 0 1 0→1 X 0 X X X X 0 QA QB QC
1 0 1 0→1 X 1 X X X X 1 QA QB QC
1 1 0 0→1 0 X X X X X QB QC QD 0
1 1 0 0→1 1 X X X X X QB QC QD 1
1 0 0 X X X X X X X QA QB QC QD

Rejestry SN74194 mogą być w prosty sposób łączone razem w większe jednostki. Poniżej przedstawiamy schemat rejestru 16
bitowego zbudowanego z czterech rejestrów SN74194.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0039.php 178 / 253


Bit w zastosowaniach - Rejestr przesuwny 2014-10-03

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0039.php 179 / 253


Bit w zastosowaniach - Pamięć 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Pamięć
Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Zjawisko hazardu w sieciach logicznych
Przerzutniki
Wejście / wyjście

Pojęcie pamięci osobom nie obeznanym z komputerami kojarzy się ze wspomnieniami, z


przypominaniem sobie przeżyć, uczuć, zdarzeń, wiadomości itp. Pamięć komputerowa
(ang. computer memory) niestety działa nieco inaczej. Jest to urządzenie cyfrowe do
przechowywania informacji w postaci bitów - jeśli przeczytałeś rozdziały : Czym jest bit i po
co jest on nam potrzebny oraz Kodowanie informacji za pomocą bitów, to wiesz już, że za
pomocą bitów można reprezentować dowolną, opisywalną informację - obrazy, dźwięki, filmy,
dokumenty, programy itd. W porównaniu z naszą pamięcią, pamięć komputerowa posiada
jedną bardzo istotną cechę - idealnie dokładnie zapamiętuje wprowadzoną do niej informację
- nie zostanie zgubiony ani jeden bit (no, chyba że pamięć jest uszkodzona). Dzięki tej
własności komputer może wykorzystywać swoją pamięć do przetwarzania olbrzymich porcji
informacji, bez gubienia fragmentów, co często zdarza się człowiekowi.
Pamięć komputerowa przeszła długą drogę rozwoju stając się nierozłącznym
elementem komputera począwszy już od najwcześniejszych maszyn cyfrowych a skończywszy na współczesnych
superkomputerach. W tej sekcji zebraliśmy kilka tematów szczegółowo opisujących różne zagadnienia związane z
pamięciami i ich wykorzystaniem w systemie komputerowym.

Tematy podrozdziałów
Historia rozwoju pamięci komputerowych
Budowa i rodzaje pamięci komputerowej
Statyczna pamięć RAM
Dynamiczna pamięć RAM
Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0040.php 180 / 253


Bit w zastosowaniach - Pamięć 2014-10-03

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0040.php 181 / 253


Bit w zastosowaniach - Historia rozwoju pamięci komputerowych 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Historia rozwoju pamięci komputerowych
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Potrzebę posiadania urządzenia zapamiętującego informację zauważali już pionierzy maszyn


cyfrowych. W roku 1834 Charles Babbage zaprojektował swoją maszynę analityczną (ang.
analitical engine) w oparciu o karty perforowane (ang. punched card), które pełniły rolę
pamięci programu oraz danych wejściowych. Niestety, z powodu ciągłych zmian projektu
Babbage popadł w konflikt z inżynierem wykonującym elementy mechaniczne i idea budowy
pierwszego, prawdziwego komputera nie została urzeczywistniona za życia jego twórcy.
Dopiero w latach 20-tych ubiegłego wieku wnuk Babbage'a opierając się na oryginalnych
planach dziadka zbudował fragment tej maszyny. Jak można się domyślać, prototyp działał
dokładnie tak, jak tego życzyłby sobie Charles.

Zasada działania karty perforowanej jest bardzo prosta - informację zapisuje się przy pomocy układu dziurek. Układ odczytujący
(mechaniczny lub elektryczny) sprawdza wystąpienia dziurek i przekazuje na ich podstawie odpowiednią informację do maszyny
cyfrowej. Poniżej przedstawiamy kartę perforowaną (tzw. fiszkę), która była w powszechnym użyciu do lat 70-tych ubiegłego
wieku.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0041.php 182 / 253


Bit w zastosowaniach - Historia rozwoju pamięci komputerowych 2014-10-03

U góry karty widzimy jej zawartość w postaci tekstu. Ten fragment karty jest przeznaczony dla człowieka, który ewentualnie
sprawdzał treść kart. Dla komputera informacja jest zakodowana w postaci prostokątnych otworów w pionowych kolumnach - tzw.
perforacji. Każdy znak posiadał swoją własną kombinację otworów w różnych wierszach, które tutaj są ponumerowane od 0 do 9.
Na przykład dla powyższej karty cyfra 9 jest kodowana otworkiem w wierszu 9 (są dwa otworki obok siebie, czyli dwie cyfry 99).
Spacja to brak otworków, Literka S ma otworki w wierszu 0 i 2, literka T ma otworki w wierszu 0 i 3, itd. Każdy komputer definiował
swój własny kod dla kart perforowanych - całe szczęście, iż odeszły one już do historii.

Na podobnej zasadzie pracuje taśma perforowana (ang. punched tape), którą wykorzystywał
w 1936 roku w swoich komputerach Konrad Zuse - twórca pierwszego, działającego
komputera dwójkowego. Dzieje życia oraz dorobek Konrada Zuse możesz poznać z dwóch
artykułów opublikowanych w naszym serwisie:
Życie i praca Konrada Zuse
Dziedzictwo Konrada Zuse

Konrad Zuse

Jako materiału Konrad Zuse wykorzystywał taśmę ze starymi filmami kinowymi (jakimi - nie wiadomo). Informacja zapisywana była
w formie kombinacji dziurek, które można było wybijać w specjalnym urządzeniu, które również skonstruował Zuse dla swojej
maszyny. Taśma perforowana (czy karty perforowane) pozwalała zapisywać tylko dane wejściowe dla maszyny lub tylko wyniki.
Nie mogła służyć do chwilowego przechowywania informacji - np. wyników pośrednich przy różnych obliczeniach
matematycznych. Z tego powodu Zuse skonstruował dodatkową pamięć wewnętrzną dla swojej maszyny liczącej. Była to pamięć
mechaniczna, w której bity (tak, bity - maszyna Zusego pracowała w systemie binarnym) zapamiętywane były przy pomocy
odpowiednich przesunięć blaszek i zatrzasków. Całość wyglądała jak na poniższej fotografii, która przedstawia egzemplarz
komputera Z3, zrekonstruowanego w latach 90-tych ubiegłego stulecia i który można obejrzeć w Berlińskim Muzeum Techniki.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0041.php 183 / 253


Bit w zastosowaniach - Historia rozwoju pamięci komputerowych 2014-10-03

W pamięci tej maszyna cyfrowa mogła składować dane w postaci 64 liczb zmiennoprzecinkowych. Program zapisany na karcie
perforowanej odwoływał się do tych danych, dzięki czemu maszyna Zusego bez problemu realizowała nawet zaawansowane
obliczenia numeryczne (np. całki, różniczki itp.).
Wadą pamięci mechanicznej była jej powolność oraz zawodność - blaszki czasami się zacinały powodując awarię maszyny. Mimo
tych niedogodności jeden z późniejszych komputerów Zusego przez wiele lat po wojnie pracował jako jedyna maszyna cyfrowa w
Europie do badań nad metodami numerycznymi.
Na początku lat 50-tych ubiegłego wieku rozpowszechniły się elektroniczne maszyny cyfrowe. Szybkość i niezawodność działania
pamięci wewnętrznej stały się kluczowym elementem tych maszyn. Opracowano zatem wiele ciekawych konstrukcji pamięci
komputerowych.

1947 - wynalezienie magnetycznej pamięci ferrytowej (ang. magnetic core memory). Zasada działania opierała
się na magnesowaniu malutkich rdzeni ferrytowych. Stan namagnesowania jest stały i można go odczytywać. Każdy
rdzeń przechowuje informację o jednym bicie. Na poniższym obrazku widzimy fragment takiej pamięci ferrytowej.
Rdzenie posiadają formę małych pierścieni wykonanych z ferrytu, przez które przechodzą przewody magnesujące i
odczytujące stan namagnesowania (odczyt niszczył zapamiętaną informację, ponieważ rdzenie się
przemagnesowywały, dlatego układy sterujące pamięcią ferrytową zawierały specjalne obwody regenerujące dane po
każdym odczycie). Pamięć magnetyczna była pamięcią nieulotną - tzn. nie traciła informacji po wyłączeniu zasilania.

Aby uzyskać odpowiednio dużą pojemność, pamięć maszyny cyfrowej montowano z wielu plastrów ferrytowych, co
widzimy na poniższej fotografii:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0041.php 184 / 253


Bit w zastosowaniach - Historia rozwoju pamięci komputerowych 2014-10-03

1947 - wynalezienie magnetycznej pamięci bębnowej (ang. magnetic drum memory). Zasada działania polegała
na zapisie informacji binarnej w postaci ścieżek magnetycznych na obwodzie bębna pokrytego specjalnym
materiałem magnetycznym. Bęben obracając się pozwalał na ciągły zapis i odczyt danych. Ilość przechowywanej
informacji zależała od liczby ścieżek oraz pojemności każdej ścieżki. Na poniższym obrazku możemy zobaczyć
takie urządzenie będące pradziadkiem współczesnych dysków twardych.

1949 - wynalezienie pamięci z ultradźwiękową linią opóźniającą (ang. ultrasonic delay line memory). Informacja
pamiętana była w postaci fali ultradźwiękowej przemieszczającej się w tubie wypełnionej rtęcią. Na jednym końcu
tuby znajdował się kwarcowy nadajnik, a na drugim kwarcowy odbiornik drgań. Dane z odbiornika po odpowiedniej
regeneracji kształtu fali były z powrotem kierowane do nadajnika - informacja krążyła w kółko. Pojemność pamięci
zależała od długości tuby z linią opóźniającą oraz od ilości tub. Dane można było odczytywać, gdy pojawiły się na
wyjściu. Zapis polegał na wprowadzaniu danych na wejściu w odpowiednich przedziałach czasowych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0041.php 185 / 253


Bit w zastosowaniach - Historia rozwoju pamięci komputerowych 2014-10-03

1951 - pierwsze zastosowanie taśmy magnetycznej (ang. magnetic tape memory) do zapisu informacji w
komputerze UNIVAC. Urządzenie zapisujące nosiło nazwę UNISERVO, a nośnikiem była cienka, półcalowa taśma
wykonana z paska fosforobrązu pokrytego niklem. Na jednym calu taśmy mieściło się 128 znaków - zapis
wykonywany był na 8 równoległych ścieżkach magnetycznych z prędkością stu cali na sekundę (2,54 m/s), co w
efekcie dawało strumień danych o szybkości 12800 znaków na sekundę.

1966 - powstaje firma Intel i rozpoczyna budowę oraz sprzedaż pamięci półprzewodnikowych (ang. semiconductor
memory). Półprzewodnikowe pamięci elektroniczne stają się coraz bardziej popularne, gdyż posiadają wiele zalet
nad swoimi rywalami - małe rozmiary, niewielki pobór energii, rosnącą pojemność wraz z rozwojem układów
scalonych oraz malejącą cenę. Pamięć komputera zaczyna się różnicować na szybką pamięć operacyjną (ang.
system memory), w której komputer przechowuje wykonywane programy oraz przetwarzane dane, i na znacznie
wolniejszą pamięć masową (ang. mass storage memory), w której przechowywane są duże ilości informacji.
Poniżej słynny układ scalony Intel 1103 o pojemności 1kb (1024 bity).

Współczesne pamięci komputerowe są bardzo szybkie i posiadają olbrzymie pojemności - niejednokrotnie liczone w giga bajtach.
Na tym polu wciąż trwa szybki rozwój i trudno przewidzieć czym zaskoczą nas w przyszłości producenci komponentów
komputerowych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0041.php 186 / 253


Bit w zastosowaniach - Historia rozwoju pamięci komputerowych 2014-10-03

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0041.php 187 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Budowa i rodzaje pamięci komputerowej
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Pamięć komputerowa (ang. computer memory) jest urządzeniem


cyfrowym służącym do przechowywania informacji w postaci bitów.
Dzielimy ją na:

pamięć operacyjną (ang. operating memory) - służy do


prz ec howy wani a uruchomionych programów oraz
przetwarzanych danych. Jest pamięcią szybką, o krótkim
czasie dostępu do przechowywanej informacji. Pamięć
operacyjna realizowana jest z układów półprzewodnikowych.
Posiada relatywnie małą pojemność (do kilku giga bajtów).
pamięć masową (ang. mass storage) - służy do składowania
programów oraz dużej ilości informacji. Pamięć masowa
posiada dłuższy czas dostępu do przechowywanych danych
w porównaniu z pamięcią operacyjną, lecz ma dużą
pojemność (setki gigabajtów). Realizowana jest w postaci
dysków twardych, stacji CD/DVD, dysków sieciowych
(dostępnych poprzez sieć teleinformatyczną). W przyszłości,
gdy ulepszone zostaną pamięci FLASH, pamięć masowa
prawdopodobnie zintegruje się z pamięcią operacyjną
komputera - urządzenia mechaniczne, jak dyski twarde i
stacje CD/DVD, odejdą do lamusa (tak dzieje się obecnie ze
stacjami dyskietek, zastępują je Pendrive'y).

Pamięć operacyjna RAM


Pamięć RAM (ang. Random Access Memory - pamięć o dostępie swobodnym) jest podstawowym składnikiem pamięci
operacyjnej komputera. Termin RAM oznacza pamięć, z której informacja może być odczytywana w dowolnej kolejności bez
względu na poprzednie odczyty czy zapisy. Termin RAM wprowadzono w celu odróżnienia pamięci o dostępie swobodnym od
pamięci o dostępie sekwencyjnym (np. taśmowej, dyskowej itp.), popularnej na początku ery komputerowej.
Informacja przechowywana jest w pamięci RAM w postaci bitów umieszczanych w komórkach (ang memory cell), których mogą
być miliardy. Aby komputer mógł uzyskiwać w prosty sposób dostęp do każdej komórki pamięci, zostały one ponumerowane.
Numery komórek nazywamy adresami komórek pamięci (ang. memory cell address). Poniżej przedstawiamy fragment logicznej
struktury pamięci (czyli tak, jak widzi swoją pamięć komputer):

Pamięć
Adres Zawartość komórki
0 11000110
1 00001111
2 11000011
3 11111110
4 00000001
5 11100111
... ...

Ze względów ekonomicznych poszczególne komórki pamięci przechowują grupę kilku bitów (najczęściej jest ich 8 - czyli 1 bajt,
ale rozmiar bitowy komórki pamięci zależy od architektury systemu komputerowego). Na przykład komórka o adresie 3
przechowuje 8 bitów o zawartości 11111110. Treść tej informacji uzależniona jest od interpretacji stanów bitów.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 188 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

Komputer steruje pamięcią przy pomocy trzech magistral (ang. bus). Magistrale zbudowane są z linii, którymi transmituje się
sygnały. We współczesnych komputerach magistrale są cyfrowe, co oznacza, iż poszczególne linie przesyłają tylko sygnały
dwustanowe, czyli bity. Widać z tego wyraźnie, iż komputery są maszynami binarnymi nie tylko ze względu na rodzaj
przetwarzanych informacji, lecz również z powodu swojej wewnętrznej budowy - mówimy, iż posiadają architekturę binarną (ang.
binary architecture).
Magistrala adresowa (ang. address bus) przekazuje pamięci adres komórki, do której komputer chce uzyskać dostęp - odczytać
zawartość lub umieścić nowe dane. Ponieważ adres przekazywany jest magistralą cyfrową, to sam również występuje jako liczba
binarna. Ilość linii na magistrali adresowej określa zakres dostępnych adresów, a zatem maksymalny rozmiar pamięci komputera.
Do obliczeń stosujemy prosty wzór:

rozmiar pamięci = 2liczba linii na magistrali adresowej

Na przykład w starych komputerach magistrala adresowa mogła zawierać maksymalnie 16 linii. Zatem rozmiar możliwej do
zaadresowania pamięci wynosił 216 = 65536 komórek (sławne 64KB - kilo bajty). Jeśli magistrala adresowa składa się z 32 linii, to
komputer jest w stanie wykorzystać 232 = 4294967296 = 4GB pamięci (GB - gigabajt). Oczywiście w systemie może być mniej
pamięci (np. tylko 1GB = 1073741824 komórek), w takim przypadku część adresów nie jest wykorzystywana, gdyż nie stoją za
nimi żadne komórki. Ilość możliwych do zaadresowania komórek nosi nazwę przestrzeni adresowej (ang. address space).
Natomiast pamięć fizyczna (ang. physical memory, physical storage) określa ilość pamięci rzeczywiście zainstalowanej w
systemie komputerowym.
Magistrala danych (ang. data bus) umożliwia komputerowi przekazywanie danych do pamięci oraz odczyt przechowywanych
przez pamięć informacji z komórek. Magistrala danych zbudowana jest z linii sygnałowych, po których przekazywane są bity. Ilość
linii na magistrali danych zależy od architektury komputera. Na przykład w systemach 32-bitowych magistrala danych zawiera 32
linie, co pozwala w jednym cyklu dostępu do pamięci przesłać porcję 32 bitów.

Jeśli dokładnie czytałeś podane wyżej informacje, to zapewne zauważyłeś, iż pisaliśmy o pamięci zawierającej komórki 8 bitowe.
Tutaj z kolei piszemy, że magistrala danych jest 32-bitowa. Jak pogodzić ze sobą te dwa fakty. Prześledźmy krótką historię
rozwoju magistral danych.

Popularne w latach 80-tych ubiegłego wieku komputery 8-bitowe

Sinclair ZX-Spectrum Commodore 64 Atari 800XL

Magistrala danych pierwszych popularnych komputerów domowych była 8 bitowa i odpowiadała dokładnie rozmiarowi komórki
pamięci. Dane umieszczane na 8-bitowej magistrali trafiały bezpośrednio do zaadresowanej komórki. Również odczyt danych z
dowolnej komórki był realizowany przy pomocy 8 bitowej magistrali. Stąd systemy takie często określa się dzisiaj mianem
komputerów 8 bitowych. Magistrale 8 bitowe wciąż są w użyciu w świecie mikrokontrolerów - małych komputerków, które w
całości mieszczą się w pojedynczym układzie scalonym i sterują różnymi urządzeniami - monitorami, radiami, telewizorami,
aparatami fotograficznymi, pralkami, zegarkami, grami elektronicznymi itp.

Komputery 16-bitowe, rozpowszechnione pod koniec lat 80-tych ubiegłego wieku.

Commodore Amiga 500 Atari 520ST IBM PC-AT Apple Macintosh

Kolejna generacja komputerów osobistych to maszyny z 16 bitową magistralą danych. Komórki pamięci zostały dalej 8-bitowe.
Pamięć podzielono na dwa banki, które współpracowały z jedną połówką magistrali danych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 189 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

Połączenie banków pamięci z 16-bitową magistralą danych


Bank 1 Bank 0
d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

Na przykład bank 0 podłączony był do linii d7...d0, czyli do młodszych 8 bitów magistrali danych. Poprzez te linie komputer
komunikował się z komórkami pamięci zawartymi w banku 0. Z kolei drugi bank, bank 1, podłączony był do pozostałych 8 linii
danych - d15...d8.

Bank 1 Bank 0
Adres Zawartość Adres Zawartość
1 01111110 0 11101000
3 11111111 2 11110000
5 00000000 4 11110001
7 10000000 6 00000001
... ...

Z punktu widzenia komputera komórki w banku 0 posiadały adresy parzyste 0, 2, 4, 6, ... Komórki w banku 1 posiadały adresy
nieparzyste. Oba banki pamięci połączone były z tą samą magistralą adresową bez linii A0, która służyła do wyboru banku
pamięci w przypadku danych 8-bitowych. Dzięki takiemu rozwiązaniu komputer mógł przesłać do lub pobrać z pamięci porcję 16
bitów (naraz dwie komórki), gdyż magistrala adresowa wybierała z obu pamięci komórki leżące w tym samym wierszu. Istnieje
też pewna niedogodność. Jeśli dane 16-bitowe zostaną umieszczone pod nieparzystym adresem (tutaj w komórkach 5 i 6), to nie
można ich pobrać w jednym cyklu odczytu pamięci, ponieważ znajdują się w dwóch różnych wierszach. Powoduje to
spowolnienie działania programu przetwarzającego te dane - komputer musi czytać pamięć dwa razy po 8 bitów, pomimo że jest
maszyną 16-bitową!. Dlatego kompilatory języków programowania posiadają wbudowane odpowiednie mechanizmy umieszczania
danych wielobajtowych pod właściwymi adresami, nawet jeśli prowadziłoby to do powstania dziur (niewykorzystanych komórek) w
obszarze pamięci.

32 bitowe komputery lat 90-tych ubiegłego wieku.

Commodore Amiga 4000 Apple Macintosh LC-475 IBM PC 486

Rozwój komputeryzacji wymusił pojawienie się maszyn 32-bitowych. Pamięć komputera 32-bitowego wciąż zbudowana jest z
komórek 8-bitowych. Zastosowano podobne rozwiązanie jak w systemach 16 bitowych - podzielono pamięć na cztery banki 0, 1,
2 i 3. Każdy bank współpracuje z 8 liniami magistrali danych. Banki są podłączone do wspólnej magistrali adresowej z wyjątkiem
linii A1 i A0, które sterują wybieraniem odpowiedniego banku (lub pary banków) w przypadku danych 8-bitowych (lub 16 bitowych).

Połączenie banków pamięci z 32-bitową magistralą danych


Bank 3 Bank 2 Bank 1 Bank 0
d31 d30 d29 d28 d27 d26 d25 d24 d23 d22 d21 d20 d19 d18 d17 d16 d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

Poniżej przedstawiamy rozłożenie adresów komórek w poszczególnych bankach pamięci z punktu widzenia komputera.
Magistrala adresowa wybiera zawsze rząd 4 komórek, leżących pod tym samym adresem w każdym z banków. Dwa najmłodsze
bity A1 i A0 adresują odpowiedni bank, a komputer odczytuje lub zapisuje dane wykorzystując linie magistrali danych połączone
z wybranym bankiem (lub z wybranymi bankami).

Bank 3 Bank 2 Bank 1 Bank 0


Adres Zawartość Adres Zawartość Adres Zawartość Adres Zawartość
3 00000000 2 11111111 1 11110000 0 00001111
7 11001100 6 10101010 5 01010101 4 11000011
11 11100111 10 10000001 9 01111110 8 11010011
15 11010110 14 00101100 13 00111010 12 11010100
19 11010010 18 00010100 17 00100100 16 11011110
... ... ...

Aby wykorzystać maksymalnie potencjał systemu 32-bitowego dane 16 bitowe należy umieszczać pod adresami parzystymi (np.
komórki 6-7 i 8-9), a dane 32 bitowe należy umieszczać pod adresami podzielnymi przez 4 (np. komórki 16-17-18-19). Wtedy
komputer będzie miał do nich dostęp w jednym cyklu odczytu lub zapisu pamięci.
Zwróć uwagę na sposób przechowywania danych wielobajtowych w komórkach pamięci. Możliwe są dwa rozwiązania - tzw. little-
endian i big-endian. Wszystkie procesory Intel i kompatybilne stosują system little-endian, który polega na tym, iż w niższych

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 190 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

adresach przechowuje się mniej znaczące bajty danych. Zatem dana 16-bitowa w little-endian zostanie umieszczona w kolejnych
dwóch komórkach jako b7...b0 w pierwszej komórce (o niższym adresie) i b15...b8 w drugiej komórce o adresie wyższym. Z
danymi 32-bitowymi jest identycznie : najmłodszy bajt trafi do pierwszej komórki, a najstarszy do ostatniej. Porządek ten
odzwierciedla nasz schemat rozmieszczenia bloków pamięci. W systemie big-endian (stosowanym w starszych komputerach
Amiga, Macintosh oraz w niektórych systemach mainframe) jest na odwrót: pierwszy adres przechowuje starsze bity, następne
adresy przechowują coraz młodsze bity danej.

Magistrala sterująca (ang. control bus) umożliwia komputerowi kierowanie pracą pamięci. Zawiera ona kilka linii, które określają
rodzaj wykonywanej przez pamięć operacji (zapis lub odczyt) oraz uaktywniają odpowiednie banki pamięci w systemach 16-, 32- i
64-bitowych.
Prześledźmy teraz uproszczone cykle odczytu i zapisu danych do pamięci.

1. Na magistrali adresowej A komputer umieszcza adres komórki


pamięci, z której chce odczytać dane.
2. Magistralą sterującą S przesłane zostaje do pamięci żądanie
odczytu danych.
3. W odpowiedzi pamięć wyszukuje pożądaną komórkę i
umieszcza na magistrali danych D jej zawartość.
4. Komputer odczytuje z magistrali danych zawartość
zaadresowanej komórki.
5. Cykl zostaje zakończony, sygnały wracają do stanu
neutralnego.

1. Na magistrali adresowej A komputer umieszcza adres komórki,


do której mają trafić dane.
2. Na magistrali danych D komputer umieszcza bity danych,
które należy zapamiętać w zaadresowanej komórce.
3. Magistralą sterującą S zostaje przesłane żądanie zapisu
danych.
4. W odpowiedzi pamięć pobiera dane z magistrali danych D,
wyszukuje komórkę o adresie obecnym na magistrali
adresowej A i zapisuje w niej dane.
5. Cykl zostaje zakończony, sygnały wracają do stanu
neutralnego.

Poszczególne kroki obu cykli muszą być dokładnie skoordynowane w czasie, w przeciwnym razie pamięć może nie zdążyć
przygotować danych dla komputera. Również przy zapisie przekroczenie dopuszczalnych parametrów czasowych pamięci może
prowadzić do zgubienia informacji. Wynika z tego, iż pamięć oraz reszta systemu komputerowego muszą ze sobą ściśle
współpracować.

Rodzaje pamięci
W zależności od sposobu zapamiętywania bitów w komórkach pamięć RAM dzielimy na dwa rodzaje:
Pamięć statyczna RAM (ang. SRAM - Static Random Access Memory). Do zapamiętywania bitów stosuje się przerzutniki
bistabilne. Pamięci statyczne są bardzo szybkie i mało kłopotliwe w obsłudze. Wadą jest złożoność przerzutnika zapamiętującego
jeden bit danych. Zbudowany jest z co najmniej 6 elementów elektronicznych (tranzystorów CMOS). Ponieważ użyteczna pamięć
musi zawierać setki milionów takich przerzutników (np. pamięć 1GB zawiera 8 • 107'3741'824 = 8'589'934'592 przerzutników =
51'539'607'552 tranzystorów CMOS), to jej wewnętrzna budowa bardzo się komplikuje. Jednakże przemysł elektroniczny radzi
sobie z tymi trudnościami i pamięci statyczne zdobywają coraz większą popularność.
Pamięć dynamiczna RAM (ang. DRAM - Dynamic Random Access Memory). Ponieważ pamięci statyczne zawierają dużo
elementów elektronicznych i są trudne w produkcji, inżynierowie od dawna poszukiwali prostszych układów pamięciowych.
Rozwiązaniem okazała się pamięć dynamiczna, wynaleziona w 1966 roku i opatentowana w 1968 przez dr Roberta Dennarda z
Centrum Badawczego Thomasa J. Watsona w IBM. Pomysł opiera się na wykorzystaniu kondensatorów do zapamiętywania bitów
informacji. Kondensator naładowany ładunkiem elektrycznym utrzymuje ten stan. W pamięci dynamicznej dla każdego bitu
wykorzystywany jest mikroskopijny kondensatorek sterowany pojedynczym tranzystorem CMOS (a nie sześcioma, jak w pamięci
statycznej). Problem polega na tym, iż w tej skali trudno uzyskać materiały izolacyjne o wysokich parametrach (a pamięć
dynamiczna ma być przecież tania, inaczej jej produkcja traci sens). Zatem naładowany kondensatorek szybko rozładowuje się z
powodu przepływu elektronów przez warstwę izolacyjną. Czas rozładowania wynosi milisekundy. Ładunek kondensatorka musi być
systematycznie odświeżany - stąd nazwa pamięć dynamiczna, ponieważ informacja jest pamiętana dynamicznie - trzeba ją
cyklicznie regenerować, inaczej dosłownie rozpłynie się w strukturze układu scalonego. Do odświeżania (ang. refresh) zawartości
pamięci dynamicznej stosuje się specjalne obwody (mogą one być umieszczone wewnątrz układu scalonego pamięci - wtedy
mamy do czynienia z tzw. pamięcią pseudostatyczną, gdyż zewnętrznie obsługiwana jest identycznie jak pamięć statyczna). Z
powodu odświeżania pamięć dynamiczna jest wolniejsza w działaniu od pamięci statycznej i bardziej kłopotliwa w eksploatacji. Jej
zaletę stanowi natomiast duża pojemność z uwagi na mniejszą liczbę elementów elektronicznych przypadającą na bit danych w
porównaniu z pamięcią statyczną. Pamięci dynamiczne są obecnie powszechnie stosowane w systemach komputerowych.
Pamięć stała (ang. ROM - Read Only Memory). Opisywane powyżej pamięci RAM tracą przechowywaną informację przy zaniku
zasilania. Innymi słowy, jeśli wyłączysz komputer, to przestanie on pamiętać wszystko, co znajduje się w jego pamięci RAM. Z
drugiej strony komputer potrzebuje pamięci, które przechowują dane nawet po wyłączeniu zasilania. Przykładem może być pamięć
ROM-BIOS (ang ROM Basic Input/Output Subsystem), która zawiera program startowy oraz podstawowe procedury obsługi
urządzeń zewnętrznych (klawiatura, monitor, dyski, itp.). Gdy włączymy zasilanie komputera, właśnie z pamięci ROM-BIOS
wykonuje się program startowy, który uruchomi resztę systemu operacyjnego. Pamięć ROM można tylko odczytywać. Zawarta w
ROM informacja została tam umieszczona na etapie produkcji w strukturze wewnętrznej układu scalonego i nie może być już

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 191 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

zmieniona przez użytkownika.


Pamięć FLASH. Jest to pamięć nieulotna, tzn. można w niej zapisać dane, wyłączyć zasilanie, a dane nie zostaną stracone i
wciąż będą obecne po ponownym włączeniu zasilania. Bity są zapamiętywane, podobnie jak w pamięci dynamicznej, w
mikroskopijnych kondensatorach. Jednak tym razem warstwa izolacyjna jest tak dobra, iż ładunek zostaje uwięziony nawet na 10
lat. Czemu w takim razie nie stosuje się pamięci FLASH w charakterze pamięci RAM? Niestety, oprócz wymienionych zalet,
pamięci FLASH posiadają również istotne wady. Po pierwsze nie są tak szybkie jak typowe pamięci SRAM czy DRAM. Ustępują
im o rząd wielkości. Szybkość pracy pamięci jest kluczowa dla szybkości działania całego systemu komputerowego. Po drugie
każdy zapis danych degeneruje warstwę izolacyjną i po kilku milionach cykli warstwa ta ulega całkowitemu uszkodzeniu - pamięć
przestaje działać. Pomimo tych wad pamięć FLASH może być stosowana jako zastępca pamięci ROM do przechowywania BIOS
komputera. Dzięki możliwości zapisu danych użytkownik może aktualizować oprogramowanie systemowe swojego komputera -
np. aktualizacja usuwa wykryte przez producenta błędy, poprawia współdziałanie z nowymi składnikami systemu itp. Oczywiście
aktualizacja zawartości pamięci FLASH jest wykonywana przez odpowiedni program producenta płyty głównej - w przeciwnym
razie komputer bardzo szybko przestałby się uruchamiać (odpowiedz sobie dlaczego?).

Pamięci FLASH są intensywnie rozwijane. Rośnie ich szybkość oraz pojemność. Obecnie stosuje się je powszechnie w
aparatach fotograficznych, kamerach cyfrowych, odtwarzaczach mp3 oraz w dyskach Pendrive.

Cyfrowy aparat fotograficzny Cyfrowa kamera iPod - odtwarzacz muzyki i filmów Dysk krzemowy Pendrive

W przyszłości, gdy zostaną pokonane obecne bariery technologiczne, pamięci FLASH przejmą rolę pamięci RAM oraz pamięci
dyskowej. Wyobraź sobie - system operacyjny na stałe zainstalowany w pamięci operacyjnej, czyli błyskawiczna gotowość
komputera do pracy. Przetwarzane dane nie ulegają zniszczeniu przy przypadkowym wyłączeniu zasilania. Natychmiastowy
dostęp do filmów, muzyki, informacji. Brak urządzeń mechanicznych zwiększa niezawodność komputerów oraz ich odporność na
trudne warunki eksploatacji (wojsko, transport, sondy kosmiczne, dzieci :) itp.). Pamięć posiada olbrzymią pojemność liczoną w
terabajtach...

Pamięć dyskowa (ang. disk storage, disk memory). Oprócz pamięci operacyjnej, w której komputer przechowuje bezpośrednio
uruchomione programy oraz właśnie wykonywane programy, w systemach komputerowych stosuje się pamięć masową o bardzo
dużej pojemności. Na dzień dzisiejszy pamięć masowa realizowana jest za pomocą urządzeń mechaniczno elektronicznych.
Typowym przykładem jest dysk twardy (ang. hard drive, hard disk). Pomysł takiego urządzenia powstał dosyć dawno, bo w roku
1947 w postaci pamięci bębnowej.
Współczesny dysk twardy zawiera zespół wirujących dysków wykonanych z
twardego materiału i pokrytych bardzo cienką warstwą magnetyczną. Nad
powierzchniami dysków unoszą się na poduszkach powietrznych głowice
zapisująco-odczytujące. Zapisany ślad ma formę koncentrycznych pierścieni, które
nazywamy ścieżkami (ang. track). Ścieżki podzielone są na sektory (ang. sector).
W sektorach zapisuje się dane (zwykle 512 lub 1024 bajty). Minimalną jednostką
odczytu lub zapisu jest cały sektor - wynika to z powodów technicznych: bardzo
trudno byłoby zsynchronizować zapis pojedynczych bajtów z obrotem dysku.
Sektor, jako większy, łatwiej rozpoznać na ścieżce - posiada odpowiednie
znaczniki, które głowica odczytuje w trakcie przeglądania ścieżki. Na podstawie
tych znaczników kontroler dysku twardego (specjalny mikrokomputer zawarty w
każdym dysku twardym) rozpoznaje początek określonego sektora i może go
odczytać do wewnętrznego bufora lub zapisać danymi z bufora.
Jak widać, pamięć dyskowa posiada nieco inną strukturę, niż typowa pamięć RAM.
Zamiast pojedynczych komórek mamy sektory. Jeśli jednak potraktujemy sektor
jako taką dużą komórkę zawierającą 512 (lub 1024) bajtów danych, a numer ścieżki i numer sektora na ścieżce jako adres tej
komórki w obszarze dysku, to pojawi się analogia pamięci dyskowej z pamięcią RAM. Różnice są w sposobie dostępu do danych.
W pamięci RAM komputer po prostu wysyłał adres na magistralę adresową i odczytywał sobie dane z magistrali danych. Z
dyskiem musi natomiast współpracować poprzez porty wejścia/wyjścia. Wymaga to całej procedury komunikacyjnej do odczytu i
zapisu sektora. Poza tym dane na dyskach są zorganizowane w tzw. system plików (ang. file system), którym zarządza system
operacyjny komputera. Całość jest na tyle skomplikowana, iż samodzielna obsługa dysku twardego komputera na poziomie
sektorów raczej mija się z celem - ilość czynników do uwzględnienia jest tak duża, że lepiej zostawić to fachowcom - o ile nie
jesteś młodym geniuszem tworzącym konkurencyjny system operacyjny w stosunku do Windows, Linux, Unix itd.
Zaletą dysków twardych jest duża pojemność do przechowywania danych oraz oprogramowania, sięgająca setek gigabajtów.
Przewiduję jednakże, iż w niedalekiej przyszłości dyski twarde, jako urządzenia w sumie mechaniczne, zostaną wyparte przez
pamięci FLASH, które są urządzeniami czysto elektronicznymi i nie zawierają zużywających się części ruchomych. Już dzisiaj
takie rozwiązania można spotkać w sprzęcie komputerowym mniejszego kalibru - aparaty fotograficzne, kamery, telefony
komórkowe itp. Współczesne mikrodyski krzemowe PenDrive mają pojemności takie, jakie miały dyski twarde w połowie lat 90-
tych ubiegłego wieku (a nawet większe - np. PenDrive 8GB, 16GB). Mój pierwszy dysk twardy miał pojemność 160MB i wydawał

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 192 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

mi się bardzo duży. Mój pierwszy PenDrive miał pojemność 1GB i wydaje mi się już za mały. A Bill Gates twierdził kiedyś, że
pamięć RAM pierwszych komputerów IBM o pojemności 640KB jest przestrzenią "nie do zapełnienia". To ciekawe czemu jego
system Vista wymaga teraz co najmniej 1GB pamięci RAM, czyli 1638 razy więcej?
Innym rodzajem pamięci masowej są stacje dysków elastycznych (ang. floppy
drive). Zasada działania takiej stacji jest bardzo podobna do zasady działania dysku
twardego. Dysk jest umieszczony w plastikowej obudowie (dyskietce) i wykonany z
elastycznego materiału pokrytego warstwą ferromagnetyczną. Po umieszczeniu
dyskietki w stacji z dyskiem styka się głowica, która podobnie jak w magnetofonie,
zapisuje lub odczytuje koncentryczne ścieżki magnetyczne na obu powierzchniach
dysku. Ścieżki dzielą się na sektory. W każdym sektorze można umieścić 512
bajtów informacji. Jednostką zapisu lub odczytu jest jeden sektor, z tych samych
powodów co dla dysku twardego. Pojemność dyskietki wynosi 1,44MB (format HD -
High Density, wysoka gęstość zapisu). Na dzisiejsze czasy jest to niewiele - na
dyskietce mieści się kilka prostych obrazków lub kilka dokumentów procesora
tekstu Word. Zapis i odczyt jest bardzo wolny i . niestety, niezbyt pewny.
Rozpowszechnienie się tanich pamięci PenDrive wróży bardzo szybki koniec
stacjom dysków elastycznych - coraz częściej pojawiają się komputery bez tego
urządzenia. Jeden PenDrive o pojemności 4GB to odpowiednik 2844 dyskietek HD !!!
- rozumiesz już, czemu dyskietki muszą odejść?
Większość współczesnych programów
wykorzystuje na pasku narzędziowym (ang tool bar) ikonę dyskietki do oznaczenia operacji
zapisu danych. W niedalekiej przyszłości symbol będzie wymagał zastąpienia innym, gdyż z
powodu zaniechania stosowania tego nośnika, dyskietki przestaną się kojarzyć nowym
użytkownikom z zapisem danych.
Dobra rada - obecnie producenci produkują dyskietki o coraz gorszych parametrach. Jeśli już
musisz zapisywać coś na dyskietce, to zaopatrz się w przynajmniej 3 sztuki i wszystkie dane
zapisuj trzykrotnie na każdej dyskietce. Unikniesz wtedy (nie ma gwarancji) przykrych
niespodzianek, gdy dane będzie trzeba odczytać na innym komputerze. Dyskietki szanuj, noś
zawsze w jakimś pudełku, nigdy luzem - lubią łapać piach, który zarysowuje powierzchnię
dysku uniemożliwiając poprawny odczyt. Najlepiej jednak zaopatrz się w PenDrive'a, a nigdy
nie zatęsknisz do dyskietek. Niech spoczywają w pokoju. Należy im się.
Dysk sieciowy (ang. network drive) jest obszarem pamięci dyskowej odległego komputera, który został udostępniony
użytkownikowi poprzez sieć lokalną. Z punktu widzenia komputera dysk sieciowy zachowuje się identycznie jak dysk twardy.
Można na nim umieszczać dane i programy. Posiada on określoną pojemność. Różnica jest tylko taka, iż dostęp do danych
następuje poprzez procedury obsługi transmisji sieciowych. Dyski sieciowe mogą być współdzielone przez kilku użytkowników
sieci, dzięki temu użytkownicy są w stanie ze sobą ściśle współpracować - bardzo istotna cecha w firmach wykorzystujących
intensywnie technologie informatyczne. Z drugiej strony dysk sieciowy zapewnia bezpieczeństwo danych - jeśli komputer
użytkownika ulegnie awarii, to dostęp do danych użytkownik może uzyskać z innego, sprawnego komputera.
Dysk optyczny (ang. optical disk). W poszukiwaniu tanich nośników informacji pod koniec lat 80-tych
ubiegłego wieku naukowcy zainteresowali się laserami. Laser (ang. Light Amplification by Stimulated
Emission of Radiation - wzmocnienie światła poprzez wymuszoną emisję promieniowania) jest
urządzeniem, które emituje bardzo spójną wiązkę światła. Po wynalezieniu półprzewodnikowych diod
laserowych trafił on do sprzętu powszechnego użytku jako urządzenie odczytujące dane ze
specjalnych dysków optycznych CD (ang. compact disk) lub DVD (ang. digital video disk lub digital
versatile disk).
Dyski CD/DVD są wykonane z warstw sztywnego polimeru. Pomiędzy warstwami umieszczona jest
powierzchnia odblaskowa z aluminium lub podobnego materiału. Zadaniem tej powierzchni jest
odbijanie wiązki lasera w kierunku fotodiody (element czuły na światło). W powierzchni odblaskowej
wytłoczone są mikroskopijne zagłębienia, tworzące spiralną ścieżkę przebiegającą wokół całej powierzchni czynnej dysku.
Ścieżka jest śladem, po którym porusza się promień lasera, gdy dysk optyczny zostanie włożony do stacji CD/DVD (ang.
CD/DVD Drive). Jeśli promień trafi na zagłębienie, to zostanie odbity pod innym kątem i nie trafi do układu odczytującego. Przerwy
w odbiorze światła lasera są właśnie informacją cyfrową odczytywaną z dysku. Na ich podstawie napęd CD odtwarza zapisane na
dysku dane cyfrowe.
Dyski CD pierwotnie zaprojektowano do zapisu muzyki. Jednak bardzo szybko okazało się, iż technika ta pozwala zapisywać
również dane - obrazy, filmy, pliki, programy itp. Powstał standard CD-ROM. Na dysku CD-ROM można zapisać ponad 700MB
danych. To bardzo duży skok w porównaniu do dyskietki (1,44MB). Użytkownicy uzyskali dostęp do olbrzymiej bazy danych
cyfrowych - dyski CD-ROM są np. sprzedawane wraz z czasopismami. Na rynku pojawiły się urządzenia nagrywające -
nagrywarki CD-R i CD-RW (ang. R - read tylko odczyt, RW - read/write - odczyt/zapis). Dzięki nim użytkownik ma możliwość
utworzenia własnych dysków CD, czy to z muzyką, czy to z danymi. Rozwój tej technologii doprowadził w krótkim czasie do
powstania dysków DVD o kilkukrotnie większej pojemności (typowo 4,7GB, ale dysk DVD może być dwuwarstwowy - około 8GB
oraz dwustronny - 17GB). Ulepszenie polegało na zmniejszeniu średnicy wiązki lasera, co pozwoliło zagęścić ścieżki na dysku
oraz zmniejszyć minimalną długość pitów. W efekcie wzrosła pojemność dysku optycznego. Na jednym krążku DVD mieści się
około 2 godziny filmu w dobrej jakości cyfrowej.
Prace trwają nadal. Obecnym hitem jest niebiesko-fioletowy laser (w CD i DVD używany był laser podczerwony) o dużo mniejszej
długości fali. Zmniejszenie długości fali zwiększa rozdzielczość światła laserowego, co pociąga za sobą możliwość dalszej
miniaturyzacji pitów i zagęszczenie ścieżek. Nowe dyski nazwano Blu-ray Disk i HD-DVD (to dwa rywalizujące ze sobą
rozwiązania). Mają pojemność 25-30GB. Nowa technologia zapisu cyfrowego umożliwia zapis na dysku BD lub HD-DVD dwie
godziny filmu w bardzo wysokiej jakości - przeznaczonego do odtwarzania na telewizorach HD. Obraz nie ustępuje w niczym
obrazowi kinowemu. Na rynku są już dostępne nagrywarki dysków Blu-ray oraz HD-DVD. Czyżby zmierzch standardu CD/DVD?
Dyski krzemowe (ang. silicon drive). Są to urządzenia czysto elektroniczne,
zawierające pamięć FLASH. Cechą charakterystyczną tej pamięci jest
utrzymywanie zapisanych danych, nawet po wyłączeniu zasilania. Sprawia to, iż
idealnie nadaje się do zastosowania w urządzeniach przenośnych w charakterze
dysku twardego. Obecnie pamięć FLASH ustępuje jeszcze szybkością i trwałością
(każdy zapis degeneruje pamięć, po kilku milionach cykli przestanie ona działać)

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 193 / 253


Bit w zastosowaniach - Budowa i rodzaje pamięci komputerowej 2014-10-03

dyskom twardym, ale technologia ta jest intensywnie badana i postęp następuje


bardzo szybko. Praktycznie co roku podwaja się pojemność i szybkość pamięci FLASH.
Dyski FLASH posiadają obecnie (rok 2007) pojemności do 16GB przy transferze danych do 12 MB/s. Najpopularniejsze cenowo są
jednostki od 1 do 4GB. Bardzo wygodne w eksploatacji, wykorzystują interfejs USB (ang. Universal Serial Bus - uniwersalne łącze
szeregowe), który posiadają wszystkie współczesne komputery. Najczęściej dyski Flash, zwane popularnie PenDrive, stosuje się
do przenoszenia dużych ilości danych pomiędzy komputerami oraz do archiwizacji - są to zadania dawniej wykonywane przez
odchodzące do historii dyskietki.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0042.php 194 / 253


Bit w zastosowaniach - Statyczna pamięć RAM 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Pamięć statyczna RAM
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

W statycznej pamięci RAM (ang. static RAM - SRAM) bity


informacyjne zapamiętywane są w przerzutnikach. Nazwa "pamięć
statyczna" pochodzi od właściwości przerzutnika, który zapamiętuje
swój stan aż do ponownego zapisu nowej porcji informacji. Pomiędzy
tymi zdarzeniami przerzutnik statycznie utrzymuje przechowywaną w
nim informację i nie wymaga żadnych dodatkowych zabiegów
(oczywiście oprócz dostarczania energii elektrycznej). Zastosowanie
przerzutników upraszcza sterowanie pamięcią, lecz z drugiej strony
komplikuje jej budowę. Powodem komplikacji jest wymagana przez
przerzutnik D-Latch ilość przynajmniej 4 tranzystorów CMOS plus dwa
tranzystory sterujące zapisem i odczytem danych w komórce. Pamięć
statyczna o pojemności np. 256 MB będzie zawierała ponad:

256 × 1024 × 1024 × 8 × 6 = 1.884.901.888 tranzystorów

Oczywiście moduł pamięci komputerowej może zostać zbudowany z wielu układów scalonych. Jednakże powoduje to zwiększenie
wymiarów oraz pobieranej energii elektrycznej i w pewnych zastosowaniach jest nie do przyjęcia (urządzenia miniaturowe).
Do przechowywania każdego bitu w pamięci statycznej RAM wykorzystywane są
dwa krzyżowo sprzężone inwertory, zbudowane z tranzystorów polowych CMOS
oznaczonych na rysunku po prawej stronie jako M1, M2 i M3, M4. Inwertory tworzą
prosty przerzutnik. posiadający dwa stabilne stany wykorzystywane do reprezentacji
poziomów logicznych 0 i 1. Dodatkowe dwa tranzystory M5 i M6 służą do sterowania
dostępem do komórki podczas zapisu i odczytu danych. Są one podłączone do linii
słowa (ang. WL - Word Line). Odpowiednio wysterowane sygnałem na tej linii
tranzystory M5 i M6 łączą wyjście Q przerzutnika z linią bitu BL (ang. Bit Line) oraz
wyjście komplementarne Q z linią BL. Do pracy układu wystarczyłaby jedna linia
bitu, lecz wykorzystuje się dwie w celu zwiększenia poziomu sygnału w stosunku do
szumów (sygnałów zakłócających), które pojawiają się w strukturze pamięci
półprzewodnikowych.
Komórka pamięci statycznej RAM może znajdować się w jednym z trzech różnych
Układ bitu informacji w komórce pamięci statycznej
stanów:

Stan oczekiwania
Gdy linia słowa WL nie jest wysterowana odpowiednim napięciem, tranzystory M5 i M6 separują wyjścia przerzutnika od linii bitów.
Przerzutnik, zbudowany z dwóch sprzężonych wzajemnie inwertorów, pamięta swój stan wewnętrzny ustawiony przy poprzedniej
operacji zapisu.

Stan odczytu
Załóżmy, iż przerzutnik w komórce pamięci pamięta stan logiczny 1, czyli wyjście Q = 1, a Q = 0 (odblokowane tranzystory M4 i
M1, zablokowane M2 i M3). Cykl odczytu rozpoczyna się przez naelektryzowanie obu linii bitów BL i BL do wartości logicznej 1, a
następnie przez wysterowanie linii słowa WL, co spowoduje włączenie (odblokowanie) tranzystorów M5 i M6. Stan wyjść Q i Q
zostaje przeniesiony na linie BL i BL. Linia BL pozostaje w stanie 1, gdyż odblokowane tranzystory M4 i M6 łączą ją z napięciem
Vdd. Z kolei napięcie linii BL zostanie rozładowane do zera, ponieważ tranzystory M1 i M5 łączą ją z masą układu. W efekcie na
linii BL pojawi się 1, a na BL 0. Jeśli przerzutnik przechowuje wartość 0, to otrzymamy sytuację odwrotną.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0043.php 195 / 253


Bit w zastosowaniach - Statyczna pamięć RAM 2014-10-03

Stan zapisu
Przy zapisie ustawia się linie BL zgodnie z wartością zapisywanego bitu (dla 1 BL = 1, BL = 0; dla 0 BL = 0, BL = 1). Następnie
linia WL zostaje wysterowana i tranzystory M5, M6 łączą wejścia inwertorów z liniami BL powodując zapis informacji w
przerzutniku. Jest to możliwe, ponieważ sygnał na liniach BL i BL jest wystarczająco mocny, aby wymusić zmianę stanu w
tranzystorach M1...M4 przerzutnika, które są z reguły bardzo małe.

Struktura wewnętrzna pamięci statycznej


Wewnątrz układu scalonego pamięci RAM o pojemności 2n bitów
bity przechowywane są w plastrze zwanym matrycą pamięci (ang.
memory array lub memory matrix). Matryca najczęściej posiada
rozmiar 2n/2 wierszy na 2n/2 kolumn. Każda komórka matrycy
zawiera jeden bit informacji. Bit zostaje zaadresowany przez
wybór wiersza, w którym się znajduje - uaktywniona jest linia słowa
WL, połączona ze wszystkimi komórkami w danym wierszu. W
efekcie linie bitów BL zostają wysterowane zawartością
poszczególnych komórek (odczyt) lub wpływają na zmianę stanu
komórek w wierszu (zapis). Linie bitów tworzą kolumny. Przez
odczyt odpowiedniej kolumny mamy dostęp do bitu matrycy.
Jeśli komórka pamięci zawiera więcej niż jeden bit (na rysunku po
lewej stronie mamy przykład pamięci o komórkach
czterobitowych), to poszczególne bity leżą w kolejnych matrycach
n a przecięciu tych tych samych wierszy i kolumn. Takie
rozwiązanie pozwala wykorzystać wielokrotnie układy sterujące w
pamięci RAM. Pamięć o komórkach wielobitowych możemy
wyobrazić sobie jako strukturę trójwymiarową.
Z powodu zastosowania matryc bitowych w układzie scalonym
p a m i ę c i RAM magistrala
adresowa jest dzielona na dwie
osobne części - zwykle na
połówki zawierające po n/2 bitów
(n oznacza ilość bitów magistrali
adresowej). Górne bity magistrali
adresowej wybierają wiersz w
matrycy bitowej. Operację tę
wykonuje dekoder wierszy, który
w zależności od zawartości linii
adresowych uaktywnia
odpowiednią linię słowa WL
połączoną ze wszystkimi
komórkami w danym wierszu
matrycy. Dekoder numeru
wiersza jest zwykłym układem
kombinatorycznym,
zamieniającym kod binarny na
kod 1 z N. Bardzo podobny
uk ł ad opisaliśmy w projekcie
transkodera kodu BCD na kod 1
z 10.
Dolne bity adresowe
wykorzystywane są do wyboru
określonej kolumny w wierszu.
Operację wykonuje dekoder kolumn oraz zespół wzmacniaczy sygnałów BL. Wybrana przez wiersz i kolumnę komórka zostaje
odczytana lub zapisana nową zawartością. W tym celu pamięć posiada układ sterowania zapisem i odczytem, który kontroluje
sposób pracy wzmacniaczy oraz kierunek przepływu informacji przez magistralę danych.
Na rysunku obok przedstawiono schemat blokowy pamięci statycznej RAM o komórkach 8 bitowych. Dekoder wierszy wybiera w
każdej z ośmiu matryc ten sam wiersz. Wybrane 8 wierszy przesłane zostaje do zespołu wzmacniaczy, które z kolei są
sterowane przez dekoder kolumn. Bity znajdujące się na przecięciu wierszy i kolumn w poszczególnych matrycach tworzą 8
bitową komórkę pamięci. Układy dekoderów wierszy i kolumn są wspólne dla wszystkich matryc. Powoduje to znaczne
uproszczenie struktury wewnętrznej układu scalonego.

Sterowanie układem scalonym pamięci statycznej


Typowy układ scalony statycznej pamięci RAM posiada następujące wyprowadzenia:

An-1... A0 - n linii magistrali adresowej. Przy ich pomocy komputer przekazuje pamięci w
postaci binarnej adres pożądanej komórki. Ilość linii adresowych zależy od pojemności
pamięci. Dla n linii pamięć ma pojemność 2n komórek.
Dm-1 ... D0 - m linii dwukierunkowej magistrali danych. Liczba linii danych odpowiada
rozmiarowi pojedynczej komórki pamięci (istnieją konstrukcje pamięci, których komórki
mają pojemność np. 16 bitów - w takim przypadku pamięć może posiadać dodatkowe linie
sterujące wprowadzaniem danej 8/16 bitowej, a jeśli 8 bitowej, to w mniej znaczący lub w

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0043.php 196 / 253


Bit w zastosowaniach - Statyczna pamięć RAM 2014-10-03

bardziej znaczący bajt komórki). Pojemność pamięci w bitach obliczamy jako 2n • m. Na


przykład pamięć posiadająca n = 16 wejść adresowych oraz m = 8 wejść danych ma
pojemność równą 216 • 8 = 65536 • 8 = 524'288 bitów. W terminologii układów scalonych
wejścia danych często oznacza się symbolem IO lub I/O (ang. Input Output) z uwagi na
ich dwukierunkowość w przesyłaniu informacji.
CE (ang. Chip Enable) - linia uaktywnia układ pamięci. Jeśli jest w stanie wysokim,
pamięć nie reaguje na pozostałe sygnały, a jej magistrala danych przechodzi w stan
wysokiej impedancji. Sygnał CE umożliwia w prosty sposób łączenie układów pamięci w
większe jednostki. W takim przypadku system wymaga dodatkowych obwodów
logicznych lub układów zwanych sterownikami/kontrolerami pamięci (ang. memory
controler). W stanie niskim CE układ pamięci zostaje uaktywniony i reaguje na sygnały
sterujące wg swojej specyfikacji.
OE (ang. Output Enable) - podłącza w stanie niskim wewnętrzną magistralę danych do linii
Dm ... D0. Sygnał OE wykorzystuje się przy odczycie zawartości pamięci.
WE (ang. Write Enable) - powoduje, iż informacja z magistrali danych zostanie
umieszczona w zaadresowanej komórce pamięci.

Logika sterowania układem scalonym SRAM wygląda w uproszczeniu następująco:

CE OE WE An-1...A0 Dm-1...D0 Operacja


1 X X X X Układ nieaktywny, magistrala danych w stanie wysokiej impedancji.
0 1 1 adres X Układ aktywny, magistrala danych w stanie wysokiej impedancji. Realizowany
jest odczyt pamięci, lecz dane nie są wyprowadzane na magistralę danych.
0 0 1 adres dane → Zawartość wybranej komórki pojawia się na magistrali danych - odczyt
pamięci.
0 X 0 adres → dane Wybrana komórka zostaje zapisana informacją odczytaną z magistrali danych
- zapis pamięci.

Aby pamięć poprawnie współpracowała z resztą systemu, adresy, dane oraz sygnały sterujące muszą pojawiać się na swoich
magistralach w odpowiednim czasie. Szczegóły techniczne znajdziesz w materiałach producenta danej pamięci statycznej RAM.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0043.php 197 / 253


Bit w zastosowaniach - Dynamiczna pamięć RAM 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Dynamiczna pamięć RAM
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Statyczna pamięć RAM wymaga 6 tranzystorów CMOS do


przechowania pojedynczego bitu informacji. Powoduje to
konieczność umieszczania w układzie scalonym olbrzymich
ilości tranzystorów. Dlatego inżynierowie szukali innych
rozwiązań, które pozwoliłyby zredukować liczbę
niezbędnych elementów na bit informacji - korzyść jest
oczywista: przy pomocy identycznej technologii układów
scalonych można by w nich pomieścić więcej informacji lub
też układ scalony o tej samej pojemności informacyjnej
zawierałby mniej elementów, a zatem byłby prostszy i
tańszy. Rozwiązaniem okazała się pamięć dynamiczna,
(ang dynamic random access memory - DRAM), która działa
na zasadzie wykorzystania ładunku elektrycznego
zgromadzonego na okładkach mikroskopijnego
kondensatora. Do sterowania tym kondensatorem wystarcza pojedynczy tranzystor.

Schemat elektryczny komórki pamięci widzimy po prawej stronie. W porównaniu z komórką pamięci
statycznej jest to niesamowite uproszczenie. Linia słowa WL (ang. word line) steruje tranzystorem
polowym, który przyłącza do linii bitu BL (ang. bit line) lub separuje od niej kondensator Cs. Cykl odczytu
wygląda następująco:
Linia bitu BL jest ładowana napięciem równym około połowie napięcia zasilającego - możemy ją
potraktować jak dodatkowy kondensator. Następnie zostaje wysterowana linia WL, która odblokowuje
tranzystor. Odblokowany tranzystor przyłącza kondensator Cs do linii bitu. Następuje wyrównanie
ładunków kondensatora Cs oraz kondensatora utworzonego z linii bitu BL. Jeśli kondensator Cs
przechowywał bit 1 (napięcie na Cs równe napięciu zasilającemu), to napięcie na BL nieco wzrośnie -
ładunek Cs uzupełni ładunek linii BL. Jeśli kondensator Cs był rozładowany, czyli przechowywał 0, to napięcie na BL spadnie,
ponieważ Cs odbierze nieco ładunku. Zatem wzrost napięcia BL przy odczycie komórki informuje o stanie 1, spadek o stanie 0.
Zwróć uwagę, iż odczyt zawartości komórki niszczy przechowywaną w niej informację. Dlatego po każdym odczycie zawartość
komórki musi być przywrócona - zregenerowana. Operacji tej dokonują wzmacniacze odświeżające (ang. refresh amplifiers),
stanowiące integralny element układu scalonego pamięci dynamicznej.
Zapis danych polega na ustawieniu linii BL na napięcie zasilające przy stanie logicznym 1 lub na napięcie masy przy stanie
logicznym 0. Następnie zostaje wysterowana linia WL, co spowoduje odblokowanie tranzystora i połączenie kondensatora z linią
BL. W zależności od napięcia na linii BL kondensator zostanie albo naładowany (stan 1), albo rozładowany (stan 0).
Podstawowym problemem w pamięciach dynamicznych jest samorozładowywanie się kondensatora Cs spowodowane
upływnościami jego izolacji (upływność to przepływ prądu przez izolację, który powoduje "wyciekanie" ładunku zgromadzonego na
okładkach kondensatora) oraz przepływem prądu przez sam tranzystor polowy. Po prostu nie da się utworzyć idealnych
materiałów izolujących w tak małej skali i przy założonych kosztach. Rozładowywanie się kondensatora oznacza, iż
przechowywana w nim informacja może "uciec", jeśli nie będzie odpowiednio często regenerowana. Proces regeneracji polega na
cyklicznym odczycie zawartości komórki pamięci, przy którym wzmacniacze odświeżające automatycznie uzupełniają ładunek
kondensatora, jeśli był on naładowany (przy rozładowanym kondensatorze nie trzeba regenerować ładunku). To właśnie dzięki
upływności kondensatorów w komórkach opisywany typ pamięci nazwano pamięcią dynamiczną, gdyż wymaga ona ciągłej (czyli
dynamicznej) troski o przechowywaną informację. Pomimo tych wad, pamięci dynamiczne DRAM są dzisiaj powszechnie
stosowane w sprzęcie komputerowym.

Struktura wewnętrzna pamięci dynamicznej


Różnice pomiędzy pamięcią
statyczną a dynamiczną
spowodowane są koniecznością
odświeżania zawartości

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0044.php 198 / 253


Bit w zastosowaniach - Dynamiczna pamięć RAM 2014-10-03

komórek. Pamięć dynamiczna


zorganizowana jest w matryce
bitowe. Dekoder wierszy wybiera
z matrycy jeden wiersz
komórek, które są odczytywane
przez wzmacniacze i
odświeżane. Wynika stąd, iż
o d c z y t pojedynczej komórki
pamięci powoduje odświeżenie
całego wiersza komórek.
Jednakże przy normalnej pracy
systemu nie ma gwarancji, iż
odczyty zregenerują wszystkie
wiersze pamięci - przecież
program może skupić się przez
pewien czas tylko na małym
fragmencie obszaru adresowego
pamięci. Dlatego pamięć
d y n a m i c z n a musi być
wyposażona w specjalny układ
odświeżania (ang. refresh unit),
który odczytuje w kółko kolejne
wiersze z matrycy. Jeśli proces
ten jest wykonywany
odpowiednio szybko, to zawartość pamięci będzie utrzymywana.
Adres komórki pamięci dynamicznej dostarczany jest w dwóch etapach po tych samych liniach magistrali adresowej - najpierw
numer wiersza (ang. row address), a następnie numer kolumny (ang. column address). Takie rozwiązanie ułatwia pracę układów
odświeżających. Numery wiersza i kolumny są zapamiętywane w wewnętrznych buforach i przekazywane do dekoderów. Po
otrzymaniu numeru wiersza dekoder wierszy wybiera właściwy wiersz z matrycy bitowej. Wiersz zostaje odczytany (i odświeżony)
przez wzmacniacze. Następnie, po otrzymaniu numeru kolumny, z odczytanego wiersza wybierana jest właściwa kolumna i dane z
niej są albo przekazywane na magistralę danych (odczyt), albo zapisywane informacją z magistrali danych (zapis). Układy
odświeżające przekazują pamięci tylko numer wiersza - numer kolumny przy odświeżaniu jest zbędny. Współczesne pamięci
dynamiczne zawierają wewnątrz układu scalonego kompletny układ odświeżania (numer wiersza do odświeżenia jest
automatycznie generowany przez licznik odświeżania), co znacznie ułatwia konstrukcję pamięci w komputerze - niektóre starsze
mikroprocesory (np. Z80 firmy Zilog) zawierały wewnętrzny układ odświeżania prostych pamięci dynamicznych.
Podział adresu na numer wiersza i kolumny zmniejsza liczbę linii magistrali adresowej, co upraszcza konstrukcję komputera.
Jednakże dostęp do danych wymaga większego czasu niż w pamięci statycznej, ponieważ adres jest przekazywany w dwóch
etapach. Z tego powodu (oraz z uwagi na konieczność odświeżania) pamięci dynamiczne są z reguły wolniejsze od pamięci
statycznych.

Sterowanie układem scalonym pamięci dynamicznej


Współczesne pamięci DRAM są sterowane na wiele różnych sposobów - szczegółów musisz
szukać w materiałach producentów. Typowa pamięć DRAM posiada następujące
wyprowadzenia:

An-1... A0 - n linii magistrali adresowej. Przy ich pomocy komputer przekazuje


pamięci w postaci binarnej numer wiersza lub numer kolumny, w których
znajduje się komórka do odczytu lub do zapisu.
Dm-1 ... D0 - m linii dwukierunkowej magistrali danych.
CS (ang. Chip Select) - linia uaktywnia układ pamięci - odblokowuje pozostałe
wejścia sterujące.
WE (ang. Write Enable) - jeśli WE jest w stanie niskim, dane są przepisywane
do wybranej komórki pamięci. W stanie wysokim WE pamięć realizuje odczyt
lub odświeżanie.
RAS (ang. Row Address Strobe) - opadające zbocze tego sygnału informuje
pamięć, iż na magistrali adresowej znajduje się numer wiersza. Numer ten
zostaje zapamiętany w buforze połączonym z dekoderem wierszy. Pamięć
odczytuje dany wiersz i odświeża go,
CAS (ang. Column Address Strobe) - opadające zbocze informuje pamięć, iż
na magistrali adresowej znajduje się numer kolumny. Numer jest
zapamiętywany w buforze połączonym z dekoderem kolumn. Komórka
znajdująca się w odczytanym wierszu i kolumnie zostaje zapisana nową
zawartością przy WE = 0 lub jej zawartość trafia na magistralę danych WE =
1.

Odczyt danych z pamięci


Odczyt zawartości komórki pamięci dynamicznej składa się z następujących
kroków:

Na magistrali adresowej zostaje umieszczony numer wiersza


zawierającego komórkę pamięci.
Następnie sygnał RAS przechodzi w stan niski. Opadające zbocze
RAS powoduje zapis numeru wiersza z magistrali adresowej w
zatrzaskach połączonych z dekoderem wierszy. Dekoder adresuje
odpowiedni wiersz komórek, których zawartość zostaje przesłana do

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0044.php 199 / 253


Bit w zastosowaniach - Dynamiczna pamięć RAM 2014-10-03

wzmacniaczy odświeżających. Komórki zostają odczytane i


odświeżone - jeśli operacja dotyczyła tylko odświeżania, to w tym
momencie może się zakończyć.
Na magistralę adresową trafia numer kolumny zawierającej komórkę.
Sygnał CAS przechodzi w stan niski - powoduje to zatrzaśnięcie
numeru kolumny i przekazanie go do dekodera kolumn. Dekoder
adresuje odpowiednią kolumnę wzmacniaczy odświeżających, które
przekazują zawartość odczytanej komórki na magistralę danych.
Sygnały sterujące wracają do położenia neutralnego.

Zapis danych w pamięci


Zapis danych do wybranej komórki pamięci odbywa się wg następującego
schematu:

Na magistrali adresowej zostaje umieszczony numer wiersza


zawierającego komórkę pamięci.
Sygnał RAS przechodzi w stan niski, co powoduje zatrzaśnięcie
numeru wiersza, zdekodowanie go, odczytanie i odświeżenie wiersza
komórek.
Na magistrali danych pojawiają się dane do zapisu w komórce.
Sygnał WE przyjmuje stan niski - jest to informacja dla pamięci, iż po
otrzymaniu reszty adresu - czyli numeru kolumny, dane z magistrali
danych należy zapisać w wybranej komórce.
Na magistrali adresowej zostaje umieszczony numer kolumny
Sy gnał CAS przyjmuje stan niski - numer kolumny zostaje
zapamiętany, zdekodowany i do wybranej komórki trafia informacja z
magistrali danych.
Sygnały sterujące wracają do położenia neutralnego.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0044.php 200 / 253


Bit w zastosowaniach - Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Pamięć stała ROM (ang. Read Only Memory - pamięć tylko do odczytu) jest
stosowana w systemach procesorowych do przechowywania danych, które się nie
zmieniają - np. różnego rodzaju tabele funkcji, parametry urządzeń, a także procedury
startowe komputera i obsługa różnych urządzeń wejścia/wyjścia. Cechą
charakterystyczną pamięci ROM jest przechowywanie zapisanych danych nawet po
wyłączeniu zasilania. Dzięki temu są one od razu gotowe do użycia tuż po ponownym
uruchomieniu systemu komputerowego. Drugą charakterystyczną cechą jest stałość
zapisanych danych, których zwykle nie można zmieniać w trakcie normalnej pracy
pamięci - gwarantuje to, iż przechowywana informacja przetrwa nienaruszona podczas
różnego rodzaju błędów zapisu pamięci. Stąd bierze swój początek angielska nazwa
ROM - Read Only Memory, czyli pamięć tylko do odczytu.

Rodzaje pamięci ROM


Rozróżniamy pięć podstawowych rodzajów pamięci ROM:
ROM - (ang Read Only Memory) pamięć tylko do odczytu
PROM - (ang. Programmable ROM), programowalna pamięć ROM
EPROM - (ang. Erasable Programmable ROM) wymazywalna, programowalna pamięć ROM
EEPROM - (ang. Electrically Erasable and Programmable ROM) wymazywalna elektrycznie, programowalna pamięć ROM
FLASH

ROM
Pamięć ROM jest produkowana w formie specjalizowanych układów scalonych. Zawartość
komórek jest ustalana już w czasie produkcji przez zastosowanie odpowiedniej struktury
logicznej. Raz wyprodukowana, pamięć ROM nie może już zmienić swojej zawartości - w
przypadku błędów w zapisanych danych nie ma możliwości ich poprawienia, całą pamięć
trzeba wyprodukować od nowa, co jest dosyć kosztownym przedsięwzięciem. Wynika z
tego również fakt, iż pamięć ROM nie może być, z uwagi na koszt produkcji, stosowana w
urządzeniach jednostkowych czy eksperymentalnych. Jednakże, gdy zawartość pamięci
jest bez błędów, to układy raz zaprojektowane można produkować w dużych ilościach po
bardzo niskich kosztach - przykładami pamięci ROM są generatory znaków (w ROM
zapamiętane są kształty liter wyświetlanych na wyświetlaczu) dla urządzeń cyfrowych,
pozytywki odtwarzające melodie czy piosenki, gry elektroniczne (np. popularne Game Boy,
Nintendo, Sega) itp. Pamięci ROM są bardzo pewne w działaniu i rzadko ulegają awariom.
Budową pamięć ROM przypomina budowę pamięci statycznej. Adres komórki jest przekazywany do dekodera
wierszy i kolumn. Dekoder wierszy uaktywnia jedną z linii WL (ang. word line - linia słowa). W komórkach
przechowujących stan logiczny 1 linia WL połączona jest diodą lub tranzystorem z linią BL (ang. bit line). W
komórkach przechowujących stan 0 jest brak takiego połączenia. Dioda lub tranzystor zaczyna przewodzić prąd, co
powoduje odpowiednią zmianę napięcia na linii BL. Linie BL biegną do wzmacniaczy bitów, które z kolei sterowane
są przez dekoder kolumn. Stan wybranej linii BL jest przekazywany na magistralę danych pamięci ROM.
Ponieważ pamięć ROM zezwala jedynie na operację odczytu danych, układy scalone
posiadają następujące wejścia sterujące:

An-1... A0 - n linii magistrali adresowej.


Dm-1 ... D0 - m linii magistrali danych.
CS (ang. Chip Select) - linia uaktywnia układ pamięci. Jeśli jest w stanie wysokim, pamięć nie
reaguje na pozostałe sygnały, a jej magistrala danych przechodzi w stan wysokiej impedancji.
W stanie niskim CS układ pamięci zostaje uaktywniony i reaguje na sygnały sterujące wg
swojej specyfikacji.
OE (ang. Output Enable) - podłącza w stanie niskim wewnętrzną magistralę danych do linii Dm

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0045.php 201 / 253


Bit w zastosowaniach - Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM 2014-10-03

... D0. Sygnał OE wykorzystuje się przy odczycie zawartości pamięci.

PROM
Tworzenie od podstaw zawartości pamięci ROM jest bardzo
kosztowne w małych ilościach i zajmuje mnóstwo czasu. Z tego
powodu producenci opracowali nowy rodzaj pamięci ROM - tzw.
programowalną pamięć ROM (ang. programable ROM). Pamięć
PROM sprzedawana jest jako pusta - wszystkie komórki pamiętają
stan logiczny 1 - zawartość można zdefiniować przy pomocy
specjalnego urządzenia, zwanego programatorem pamięci PROM
(ang. PROM programmer lub PROM burner).
Wewnętrznie PROM przypomina
budową zwykłą pamięć ROM.
Róż ni c a polega na tym, iż
połączenia linii WL (lub BL) z
diodami komórek wykonane są w
formie cienkich drucików, które
można przepalać za pomocą
odpowiednio dobranego prądu
elektrycznego. Przepalenie drucika
powoduje przerwanie połączenia diody z linią bitu BL - komórka będzie teraz
pamiętała bit 0. Jeśli połączenie istnieje, komórka pamięta bit 1. Do przepalenia
drucika w wybranej komórce pamięci PROM używamy specjalnego programatora
(patrz na lewo), a proces nazywa się programowaniem pamięci PROM (ang.
PROM programming) lub wypalaniem pamięci PROM (ang. PROM burning).
Proces wypalania polega na przygotowaniu pliku z zawartością dla poszczególnych
komórek pamięci PROM. Następnie uruchamia się oprogramowanie programatora. Programator łączy się
odpowiednim kablem z komputerem PC. Do programu programatora wczytuje się plik z zawartością dla PROM.
Układ pamięci wkładany jest do niebieskiej podstawki (zwróć uwagę na małą dźwignię po lewej stronie - służy ona do
blokowania wyprowadzeń układu w podstawce). Na koniec uaktywnia się w programie opcję wypalania pamięci -
program odczytuje z pliku zawartość kolejnych komórek PROM i steruje programatorem, który wypala w komórkach
pamięci druciki tam, gdzie zawartość ma wynosić 0 - komórki z zawartością 1 pozostają nienaruszone. Wypalanie
polega na wysterowaniu układu odpowiednio wyższym napięciem niż w czasie normalnej pracy - 15..25V. Szczegóły
znajdziesz w materiałach producenta, jednakże pamięci PROM są dzisiaj już przestarzałe i mało kto je produkuje.
Pamięć PROM jest wrażliwa na przepięcia elektryczne (np. elektryczność statyczna, gromadząca się na ubraniu z
tworzyw sztucznych), które mogą uszkodzić wewnętrzne połączenia komórek z liniami wybierającymi WL. Dlatego z
układami PROM należy obchodzić się bardzo ostrożnie.
Pamięć PROM daje się zaprogramować tylko jeden raz. Jeśli coś pójdzie źle lub zapisana informacja zawiera błędy,
pamięć przestaje być zdatna do użytku i należy wypalić drugi egzemplarz. Jednakże niski koszt czyni ją
doskonałym materiałem do zastosowań prototypowych i hobbistycznych.

EPROM
Pamięci PROM można zaprogramować tylko jeden raz - jeśli zawartość
zawiera błędy, to układ jest do wyrzucenia - należy zaprogramować
nowy. Z tych powodów opracowano pamięć ROM, której zawartość
można programować, a następnie w razie potrzeby wymazywać -
EPROM (ang. Erasable Programmable ROM) , czyli wymazywalna,
programowalna pamięć ROM. Takie wymagania wymusiły zmianę
konstrukcji komórek pamięci.
Kasowanie zawartości pamięci wymaga naświetlenia jej struktury
światłem ultrafioletowym przez około 10 - 15 minut. Dlatego w obudowie
EPROM umieszczone jest małe okienko kwarcowe przepuszczające
ultrafiolet, poprzez które widoczna jest płytka krzemowa zawierająca
elementy pamięci. Produkuje się również tzw. jednorazowe pamięci
EPROM - bez okienka - tzw. O T P EPROM (ang. One Time
Programmable - programowalen jednorazowo). Układy takie zawierają
strukturę EPROM, jednak mogą być zaprogramowane tylko jeden raz.
Ponieważ obudowa układu nie zawiera okna kwarcowego, układ jest
tańszy w produkcji. Jednorazowe EPROM'y można programować w tych
samych programatorach, co zwykłe pamięci EPROM. Stosowane są wtedy, gdy zapisywana zawartość nie zawiera
już żadnych błędów.
Każde kasowanie EPROM degeneruje materiał półprzewodnikowy, dlatego pamięci te wytrzymują kilkaset - do kilku
tysięcy cykli programowania i kasowania. Natomiast odczytywać zawartość pamięci EPROM można dowolną liczbę
razy. Informacja przechowywana jest przez około 10 lat. Kasowanie pamięci nie jest selektywne - usuwa informację
ze wszystkich komórek i proces programowania musi być powtórzony w całości. Pamięci EPROM należy chronić
przed światłem słonecznym, które zawiera ultrafiolet. Najczęściej nalepia się na okienko kwarcowe etykietkę z
danymi układu lub z reklamą producenta.
Budowa pamięci EPROM jest standardowa - zawiera dekodery wierszy i kolumn sterowane
liniami magistrali adresowej. Różnica dotyczy konstrukcji komórek przechowujących dane.
Zbudowane są one ze specjalnych tranzystorów polowych posiadających dwie bramki -
sterującą (ang. control gate), która podłączona jest do linii słowa WL oraz pływającą (ang.
floating gate), która nigdzie nie jest podłączona. Bramki rozdzielone są od siebie przez

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0045.php 202 / 253


Bit w zastosowaniach - Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM 2014-10-03

warstwę tlenku krzemu, która jest izolatorem. Dzięki zjawisku tunelowemu Fowlera-Nordheima
(przepływ elektronów przez izolator wykorzystujący zjawiska fizyki kwantowej) bramka
pływająca może więzić elektrony, jeśli tranzystor wysterujemy na linii WL wyższym niż
normalne napięciem (zwykle 12...22V). Elektrony gromadzące się w bramce pływającej powodują powstanie
ujemnego ładunku elektrycznego, który oddziałuje później z napięciem bramki sterującej. Jeśli ładunek bramki
pływającej jest odpowiednio duży, to tranzystor polowy w normalnych warunkach pracy może przestać przewodzić
prąd elektryczny pomiędzy źródłem (S - ang. source) a drenem (D - ang. drain). Odpowiedni układ porównuje wartość
prądu płynącego przez linię BL po przyłożeniu napięcia sterującego na linię WL. Jeśli jest on większy od 50%
maksimum, to komórka zawiera wartość 1 (bramka pływająca posiada za mało elektronów, aby skutecznie
zablokować tranzystor). Jeśli prąd spadnie poniżej 50% maksimum, to komórka zawiera wartość 0 (bramka
pływająca posiada wystarczający ładunek elektronów do zablokowania tranzystora).
Dzięki izolacji tlenkowej ładunek elektronów może utrzymywać się w bramce pływającej przez wiele lat (10...20).
Usunąć go można przez naświetlenie struktury krzemowej światłem ultrafioletowym o odpowiednio dobranej długości
fali (253,7 nm). Światło UV powoduje jonizację krzemu i uwolnienie elektronów zgromadzonych w bramkach
pływających. Wszystkie komórki przechodzą wtedy w stan logiczny 1. Wymazaną pamięć należy ponownie
zaprogramować.

EEPROM
Pamięć EEPROM (ang. Electrically Erasable and Programmable ROM) jest
pamięcią stałą, którą można wymazywać elektrycznie i programować
elektrycznie. Nie jest wymagane naświetlanie układu promieniami UV, jak w
przypadku standardowej pamięci EPROM. Poszerza to krąg zastosowań
pamięci, która teraz może być przeprogramowana w docelowym urządzeniu,
np. w komputerze, przy pomocy odpowiedniego programu. Drugą zaletą w
porównaniu z EPROM jest selektywność kasowania - można usunąć zawartość
określonych komórek pamięci bez naruszania informacji przechowywanej w
innych komórkach. Otwiera to przed pamięcią zupełnie nowe dziedziny
zastosowań (np. dyski krzemowe do zapisu plików).
Komórka pamięci EEPROM zbudowana jest podobnie do komórki pamięci
EPROM, również występuje tranzystor polowy o dwóch bramkach - sterującej i
pływającej. Różnica leży w warstwie tlenkowej, która w pamięci EEPROM jest
cieńsza i pozwala na wystąpienie zjawisk tunelowych przy sterowaniu tranzystora za pomocą bramki sterującej.
Przyłożenie odpowiednio wysokiego napięcia do tej bramki powoduje gromadzenie się lub rozładowywanie ładunku
elektronów na bramce pływającej - można to porównać do procesu ładowania i rozładowywania akumulatora. Jeśli
bramka pływająca zostanie naładowana ładunkiem elektronów, to wytworzone przez nie napięcie będzie blokowało w
trakcie normalnej pracy funkcje tranzystora polowego - komórka ze stanem logicznym 0. Jeśli ładunek bramki
pływającej zostanie rozładowany, to przestanie ona wpływać na pracę tranzystora - komórka ze stanem logicznym 1.
Ponieważ kasowanie komórki i programowanie odbywa się na drodze czysto elektrycznej, pamięci EEPROM można
programować nową zawartością bezpośrednio w układzie cyfrowym, bez konieczności ich wyjmowania i naświetlania
światłem UV jak w przypadku zwykłych pamięci EPROM. Pamięć wytrzymuje kilkanaście tysięcy cykli kasowania.
Dodatkowo pamięci te można produkować w zwykłych obudowach zamkniętych, bez okna kwarcowego, co obniża
znacznie koszty produkcji układu. Szczegóły obsługi pamięci EEPROM znajdziesz w materiałach producentów.
Obecnie pamięć EEPROM jest coraz częściej zastępowana pamięcią FLASH.

FLASH
Pamięć Flash (ang. Flash Memory) jest pamięcią nieulotną,
którą można elektrycznie wymazywać oraz programować -
podobnie jak opisaną wyżej pamięć EEPROM. Pamięci Flash
z nal az ł y obecnie szerokie zastosowanie w kartach
pamięciowych do aparatów, kamer cyfrowych, telefonów,
notebooków, odtwarzaczy mp3, iPodów itp. oraz w dyskach
krzemowych USB zwanych Pen Drive. Pamięć FLASH we
współczesnych komputerach pełni rolę dawnej pamięci ROM-
BIOS. Takie rozwiązanie pozwala użytkownikowi na
aktualizację oprogramowania systemowego komputera.
Aktualizacja może usunąć błędy w działaniu, zauważone już po
produkcji podzespołów komputera - jednakże nie licz zbytnio na
tę opcję, często producenci zapominają o użytkowniku, który
posiada stary sprzęt, chociaż są wyjątki.
Pamięć Flash jest specyficznym rodzajem pamięci EEPROM.
Zapi s informacji odbywa się na identycznej zasadzie -
tranzystor polowy z dwoma bramkami, sterującą i pływającą.
Bramka pływająca jest nasycana elektronami w czasie programowania, co blokuje tranzystor podczas normalnej
pracy. Różnica występuje przy kasowaniu zapamiętanej informacji. W pamięci EEPROM można kasować
pojedyncze komórki, lecz prowadzi to do komplikacji układu cyfrowego, a zatem do wyższych kosztów produkcji.
Dodatkowo kasowanie bloku komórek jest czasochłonne - każdą komórkę musimy skasować oddzielnie. W pamięci
FLASH kasowany jest jednocześnie cały blok komórek (np. w porcjach po 1024 bajty). Umożliwia to znacznie
szybszy zapis nowej treści niż w przypadku EEPROM, stąd pochodzi nazwa FLASH - błysk. Jeśli pamięć FLASH
jest stosowana w charakterze dysku, to kasowanie całych bloków jest nawet bardzo korzystne. Informacja na
dyskach przechowywana jest zawsze w postaci bloków, zwanych sektorami. Zatem zmiana nawet pojedynczego bitu
w bloku wymaga ponownego zapisu całego bloku danych, a to właśnie odbywa się w pamięci FLASH.
Do elektrycznego kasowania zawartości bloku komórek wymagane jest wyższe niż normalne napięcie sterujące -
zwykle od 12 do 22V. Jednakże pamięci Flash są zasilane pojedynczym napięciem 5V. Potrzebne, wysokie napięcie

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0045.php 203 / 253


Bit w zastosowaniach - Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM 2014-10-03

kasowania jest wytwarzane samodzielnie przez pamięć Flash wewnątrz układu scalonego przy pomocy
odpowiednich obwodów powielaczy napięcia. Upraszcza to znacznie zastosowanie tej pamięci w różnych
urządzeniach cyfrowych. Pamięć Flash wytrzymuje kilka milionów cykli wymazywania i zapisu. W przypadku
stosowania jej w charakterze dysku krzemowego, wystarcza to na około 5 lat pracy.

NV-RAM
Nieulotna pamięć RAM (ang. Non Volatile RAM) nie jest pamięcią stałą, tylko
zwykłą pamięcią RAM ze zintegrowaną baterią, która podtrzymuje działanie pamięci
po wyłączeniu zasilania. W komputerach PC pamięć NV-RAM jest często stosowana
do zapamiętywania ustawień płyty głównej. Układ tej pamięci łatwo rozpoznać - ze
względu na zawartą w nim baterię jest on dużo wyższy od pozostałych układów
scalonych na płycie. Wewnętrzna bateria potrafi podtrzymywać działanie pamięci
przez okres około 10 lat. Zaletą NV-RAM w porównaniu z pamięciami typu EEPROM i
FLASH jest szybkość działania oraz standardowa obsługa - pamięć może nawet być
włączona w przestrzeń adresową procesora i pełnić rolę obszaru pamięci, który nie
jest kasowany po wyłączeniu zasilania.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0045.php 204 / 253


Bit w zastosowaniach - Pamięć dyskowa 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Pamięć dyskowa
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Do zapamiętywania olbrzymich ilości danych współczesne komputery wykorzystują


pamięć masową (ang. mass storage, mass memory) opartą na technologii dysków
magnetycznych i optycznych. Idea działania tych urządzeń jest podobna - informacja
zostaje zapisana w postaci binarnej na nośniku o kształcie dysku, skąd jest później
odczytywana przez specjalne głowice. Odczytane dane są wstępnie gromadzone w
wewnętrznym buforze pamięciowym, a następnie przesyłane przez porty
wejścia/wyjścia do komputera. Zaletą pamięci dyskowych jest duża pojemność
informacyjna sięgająca setek GB dla dysków magnetycznych i dziesiątek GB dla
dysków optycznych (np. technologia bluray). Dodatkowo dyski optyczne są wymienne,
co daje dostęp do nieograniczonej ilości danych - muzyki, filmów, gier lub programów
narzędziowych, prezentacji, itp. W stosunku do dysków optycznych, dyski
magnetyczne charakteryzują się większą szybkością zapisu i odczytu danych,
natomiast zapis na dyskach optycznych wymaga specjalnych urządzeń - nagrywarek CD/DVD/BluRay.
Poniżej prezentujemy uproszczone zasady działania dysków magnetycznych i optycznych.

Dyski magnetyczne
Jeśli przez przewodnik (ang. conductor) przepuścimy prąd elektryczny (ang. electric current), to ruch elektronów spowoduje
powstanie wokół tego przewodnika pola magnetycznego (ang. magnetic field).

Zjawisko to wykorzystano do konstrukcji elektromagnesu, zbudowanego z wielu zwojów przewodnika, który wytwarza biegunowe
pole magnetyczne. Dodatkowo w środku zwojów wstawiany jest rdzeń (ang. core) z materiału dobrze przewodzącego pole
magnetyczne, czyli z tzw. ferromagnetyka. Dzięki rdzeniowi pole staje się jeszcze silniejsze.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0046.php 205 / 253


Bit w zastosowaniach - Pamięć dyskowa 2014-10-03

Ponieważ w elektromagnesie pole powstaje dzięki przepływowi prądu elektrycznego przez zwoje przewodnika, to możemy w
prosty sposób sterować wytwarzanym polem magnetycznym przez włączanie, wyłączanie lub zmianę kierunku płynięcia prądu
elektrycznego. Jeśli w polu magnetycznym umieścimy przedmiot zbudowany z miękkiego ferromagnetyka
(materiału łatwo magnesowalnego), to materiał ten sam stanie się magnesem i będzie wytwarzał własne pole magnetyczne, nawet
po zaniku pola, które go namagnesowało. Możesz zrobić prosty eksperyment - weź śrubokręt i potrzyj go o dowolny magnes -
śrubokręt zacznie przyciągać małe metalowe przedmioty - czasem może to być bardzo pożyteczne - odkręcona śrubka nie
odpadnie od końcówki śrubokręta.

Śrubokręt "zapamiętał" to, iż wcześniej znajdował się w polu magnetycznym.

Istnieje również zjawisko odwrotne do opisanego. Jeśli pole magnetyczne porusza się względem przewodnika lub zmienia się w
czasie, to w przewodniku powstaje siła elektromotoryczna (ang. electromotoric force), czyli po prostu napięcie elektryczne
(oczywiście na końcach przewodnika). Gdy przewodnik uformujemy w zamknięty obwód, to pod wpływem powstałego napięcia
popłynie przez przewodnik prąd elektryczny. Dzięki temu zjawisku możesz korzystać w domu z dobrodziejstw energii elektrycznej
- w ten właśnie sposób generatory napędzane turbinami tworzą prąd elektryczny w elektrowniach.
Prąd elektryczny można wykryć przy pomocy odpowiednich układów elektronicznych, zatem pośrednio można wykrywać pole
magnetyczne. Istnieją również specyficzne materiały zmieniające swoje parametry w polu magnetycznym (np. oporność), co
również jest wykorzystywane przez współczesne pamięci magnetyczne.
Przedstawione dwa zjawiska inżynierowie wykorzystali przy budowie pamięci magnetycznych. Składają się one z dwóch
podstawowych elementów: głowicy zapisująco-odczytującej (ang. R-W head) oraz nośnika ferromagnetycznego - dysku
magnetycznego (ang. magnetic disk).

Głowica zapisująco/odczytująca jest specjalnej konstrukcji elektromagnesem, który ma za zadanie wytworzyć mikroskopijnej
wielkości pole magnetyczne obejmujące fragment dysku. Pole magnetyczne namagnesuje ten fragment, przez co zacznie on
wytwarzać swoje własne pole magnetyczne, które głowica będzie później w stanie odczytać. Ponieważ dysk się obraca, głowica
zapisuje wciąż nowe jego fragmenty na tzw. ścieżce lub cylindrze (ang. path. cylinder).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0046.php 206 / 253


Bit w zastosowaniach - Pamięć dyskowa 2014-10-03

Dysk magnetyczny jest wykonany z twardego i sztywnego materiału - aluminium lub kompozyt ceramiczny - pokrytego bardzo
cieniutką warstwą miękkiego ferromagnetyka. Pole magnetyczne głowicy magnesuje fragmenty tej warstwy tworząc koncentryczne
ścieżki zapisu danych. Ciekawe jest to, iż głowica nie styka się z powierzchnią dysku - inaczej materiał ferromagnetyczny
zostałby bardzo szybko wytarty z jego powierzchni. Gdy dysk zacznie się szybko obracać, wytwarza przy swej powierzchni
cieniutką poduszkę powietrzną, po której ślizga się głowica - zupełnie jak mikroskopijny poduszkowiec.

Głowice współczesnych dysków twardych są pozycjonowane przy pomocy odpowiedniego elektromagnesu. Dźwignia głowicy
wyposażona jest w sprężynkę, która ma za zadanie obrócić ramię w położenie startowe (ang. head landing zone) w przypadku
zaniku napięcia - w przeciwnym razie (jak to miało często miejsce w przeszłości) wirujący dysk utraciłby przy zatrzymaniu
poduszkę powietrzną i "lądująca" na nim głowica spowodowałaby wytarcie fragmentu ścieżki magnetycznej. Zawarte tam dane
stałyby się nieczytelne i co gorsza obszaru tego nie dałoby się powtórnie namagnesować. Powstałyby tzw. uszkodzone sektory
(ang. bad sectors).
W trakcie pracy głowica unosi się nad powierzchnią dysku na wysokości kilku µm. Dlatego wewnątrz dysku nie może występować
kurz, ponieważ jego drobinki osiadając na dysku magnetycznym zakłócałyby ruch głowicy, a to z kolei powodowałoby
uszkodzenia warstwy magnetycznej. Dyski twarde są zamknięte hermetycznie i użytkownik nie powinien ich otwierać bez
zachowania odpowiednich warunków czystości powietrza.

Zapisując dane głowica pozostawia na powierzchni wirującego dysku koncentryczne ślady magnetyczne, które nazywamy
ścieżkami (ang. track) lub cylindrami (ang. cylinder). Ze względów techniczno-ekonomicznych ścieżki są dzielone na wycinki -
tzw. sektory (ang. sectors). Pomiędzy sektorami występują małe przerwy (ang. gaps). Ułatwiają one rozpoznawanie początków i
końców sektorów.
Dane zapisywane są w postaci binarnej w sektorach. Sektory posiadają najczęściej pojemność 512 bajtów danych. Pojemność
dysku obliczamy wg wzoru:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0046.php 207 / 253


Bit w zastosowaniach - Pamięć dyskowa 2014-10-03

pojemność = liczba głowic × liczba ścieżek na dysku × liczba sektorów na ścieżce × liczba bajtów w sektorze

Ponieważ długość ścieżki zależy od jej odległości od środka dysku (stary wzór: obwód = 2πr), to ścieżki wewnętrzne zawierają
mniej sektorów od ścieżek zewnętrznych. Zatem powyższy wzór nie odpowiada fizycznej strukturze dysku. Jednakże nie musimy
się tym przejmować - producenci dysków podają uśrednioną liczbę sektorów, a odczytem i zapisem informacji na dysku steruje
specjalizowany komputer jednoukładowy, nazywany kontrolerem dysku twardego (ang. hard disk controller). To on lokalizuje
odpowiedni sektor i zapisuje lub odczytuje z niego dane. Nie jest to wcale łatwe i wymagało rozwiązania całego mnóstwa
problemów technicznych, o których ty na szczęście nic nie musisz wiedzieć.

Przykład:
Pewien dysk twardy, zgodnie z danymi producenta, posiada następujące parametry:

heads 256 - liczba głowic


tracks 1868 - liczba ścieżek na dysku
sectors/track 63 - liczba sektorów na ścieżkę
bytes/sector 512 - liczba bajtów na sektor

Obliczamy pojemność dysku:

capacity = heads × tracks × sectors/track × bytes/sector


capacity = 256 × 1868 × 63 × 512 = 15425077248 B = 15063552 KB = 14710,5 MB = 14,366 GB

Organizacją danych na dyskach zajmuje się system operacyjny twojego komputera. To on określa sektory, w których znajduje się
informacja zawarta w określonym pliku. Jeśli tworzysz nowy plik, system przydziela dla niego odpowiednie sektory, w których
będzie zapisywana informacja. Gdy plik kasujesz, sektory zostają zwolnione i będą mogły być przydzielone innemu plikowi w razie
potrzeby. Do tego celu używany jest fragment dysku, w którym przechowywane są informacje o plikach i zajmowanych przez nie
sektorach - obszar ten nazywany jest tablicą zawartości dysku (ang. VTOC - Vulume Table of Contents) . Dzięki systemowi
operacyjnemu nie musisz znać fizycznej struktury twojego dysku twardego - inaczej praca z komputerem byłaby prawdziwą męką.
Zwróć uwagę na to, iż jednostką zapisu/odczytu na dysku twardym jest sektor - nie można zapisać pojedynczego bitu. Jest to
ograniczenie ekonomiczne - tak po prostu jest taniej i wydajniej. W pamięci RAM można zapisywać pojedyncze komórki - w
pamięci dyskowej ich odpowiednikami są sektory. Informacja odczytana z sektora jest umieszczana w buforze pamięciowym
dysku i stamtąd odczytuje ją komputer - pozwala to przyspieszyć znacznie odczyt, ponieważ zwykle dane znajdują się w
sąsiadujących ze sobą sektorach - chociaż jeśli często zapisujesz i kasujesz pliki, to może dojść do tzw. fragmentacji dysku -
kolejne sektory z danymi pliku nie będą znajdowały się blisko siebie i głowica odczytująca musi dosyć intensywnie skakać po
ścieżkach. W takim przypadku szybkość zapisu/odczytu danych może znacznie zmaleć - dlatego należy co jakiś czas
uruchamiać oprogramowanie defragmentujące dysk twardy. Defragmentacja polega na takim przemieszczeniu sektorów dla
poszczególnych plików, aby znajdowały sie one fizycznie obok siebie.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0046.php 208 / 253


Bit w zastosowaniach - Pamięć dyskowa 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0046.php 209 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Zapamiętywanie bitów
Pamięć CD/DVD/Blue-Ray
Bramki logiczne Pamięci komputerowe
Cyfrowe układy scalone TTL i CMOS Historia rozwoju pamięci komputerowych
Zasilanie układów TTL i CMOS Budowa i rodzaje pamięci komputerowej
Zjawisko hazardu w sieciach logicznych Statyczna pamięć RAM
Przerzutniki Dynamiczna pamięć RAM
Pamięć Pamięć stała ROM, PROM, EPROM, EEPROM, FLASH i NV-RAM
Wejście / wyjście Pamięć dyskowa
Pamięć CD/DVD/Blue-Ray

Dyski CD (ang. Compact Disk) i DVD (ang. Digital Video Disk) są obecnie spotykane
powszechnie. Używa się ich do zapisu muzyki, filmów, programów komputerowych, itp.
Każdy współczesny komputer osobisty jest wyposażany standardowo w stację DVD,
która pozwala odczytywać takie dyski. Coraz popularniejsze stają się również nagrywarki
DVD, które, oprócz funkcji odczytu, pozwalają również na zapis danych na specjalnych
dyskach optycznych - tzw. optycznych dyskach zapisywalnych - CD-R, DVD-R. Niektóre
z tych dysków umożliwiają nawet wielokrotny zapis - dyski CD-RW, DVD-RW.

Dysk CD
Dyski kompaktowe CD opracowano pierwotnie do zapisu muzyki w postaci cyfrowej. Jak
zapisać cyfrowo dźwięk? Otóż dźwięk składa się z fali akustycznej, czyli zmian
ciśnienia gazu, które przemieszczają się od źródła do odbiorcy. Falę tę odczytuje się za
pomocą specjalnych przetworników - mikrofonów. Mikrofony zamieniają falę akustyczną
w odpowiednio zmienne napięcie elektryczne. Zmiany napięcia na wyjściu mikrofonu są
proporcjonalne do zmian ciśnienia gazu, które docierają do mikrofonu. Napięcie to jest wzmacniane i mierzone przez tzw.
przetwornik analogowo cyfrowy (ang. A/D converter), który przetwarza wartość napięcia na odpowiadającą mu liczbę dwójkową.
Pomiar napięcia nie jest ciągły, lecz występuje w wybranych momentach czasu z pewną częstotliwością. Nazywamy to
próbkowaniem sygnału (ang. sampling). Dla urządzeń audio o wysokiej jakości odtwarzania dźwięku (jakość Hi-Fi - ang. High
Fidelity - wysoka wierność) przyjęto, iż częstotliwość próbkowania będzie wynosić 44.100 [Hz}. Tzn. w każdej sekundzie
przetwornik A/D dokonuje 44.100 pomiarów napięcia reprezentującego falę dźwiękową. Gwarantuje to otrzymanie pasma
dźwiękowego od 20 [Hz} do 20.000 {Hz}. W takim zakresie słyszy dźwięki normalny człowiek.

Na wyjściu przetwornika A/D otrzymujemy binarną wartość mierzonego napięcia. Dla standardu CD przyjęto, iż wartość ta będzie
liczbą 16-to bitową. 16 bitów odpowiada dwóm bajtom danych. W ciągu jednej sekundy przetwornik A/D produkuje:
44.100 × 2 = 88.200 B
Cała płyta CD może pomieścić 74 minuty nagrania. Daje to 74 × 60 = 4440 sekund. Zatem płyta powinna pomieścić:
88.200 B × 4.440 sek × 2 kanały = 783.216.000 B = 747 MB
Rzeczywista pojemność dysku jest nieco większa, ponieważ muszą się na nim znaleźć dodatkowe informacje, np. na temat
zapisanych utworów, ich położenia, długości. Dane są kodowane kodem ECC, który potrafi usuwać błędy odczytu. Gdyby to nie
było zrobione, płyta CD bardzo szybko przestałaby być użyteczna z powodu drobnych zarysowań powierzchni.
Sam dysk CD jest w miarę prostym krążkiem tworzywa poliwęglanowego o grubości 4/100 cala (1.2 mm), średnicy 12 cm i wadze
14 g. Podczas produkcji w fabryce na krążku tym zostają odciśnięte przez matrycę mikroskopijnej wielkości wgłębienia (tzw. pity),
tworząc pojedynczą, ciągłą ścieżkę spiralną, na której zapisane są dane cyfrowe.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 210 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

Po odciśnięciu tych wgłębień powierzchnia dysku CD zostaje pokryta cienką warstwą aluminium. Warstwa ta pełni rolę lustra,
które będzie odbijało światło lasera. Następnie na aluminium nakłada się akrylową warstwę ochronną, na której zwykle drukowana
jest etykieta dysku CD. Warstwa ta ma za zadanie zabezpieczyć aluminium przed ścieraniem się z powierzchni płyty.

Odczyt danych z powierzchni dysku CD odbywa się za pomocą światła lasera. Do tworzenia tego światła stosuje się zwykle diodę
LED (ang. Light Emitting Diode), która emituje światło o długości fali równej 780 nm. Jest to światło czerwone na granicy
widzialności oka człowieka. Światło lasera pada na powierzchnię płytki i zostaje odbite przez warstwę aluminium. Po odbiciu trafia
na fotodiodę, która zamienia strumień świetlny na prąd elektryczny. Prąd ten zostaje odpowiednio wzmocniony i służy do odczytu
informacji zapisanej na płytce CD.
Układ odczytujący wraz z optyką jest umieszczony na specjalnym wózku, który przemieszcza się wzdłuż promienia dysku CD
przy pomocy małego silniczka.

Optyka ma za zadanie odpowiednio skupić światło lasera na powierzchni dysku. Aby wyeliminować kurz i małe rysy, wiązka
lasera posiada kształt stożka, który na powierzchni płyty ma średnicę około 800 μm, natomiast na powierzchni aluminiowej tylko
1,7 μm. Skonstruowanie układu ogniskowania, który by zapewniał takie parametry w trakcie wirowania dysku byłoby bardzo trudne.
Dlatego stosuje się dynamiczne ogniskowanie wiązki - soczewki skupiające umieszczone są wewnątrz specjalnych cewek, które
przesuwają się w polu magnetycznym, ogniskując promień lasera.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 211 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

Wykorzystuje się do tego celu zmienny kształt wiązki lasera po przejściu jej przez soczewkę cylindryczną. Gdy wiązka jest w
ognisku, ma kształt kołowy. Jeśli jest niezogniskowana, to przyjmuje kształt eliptyczny z wydłużoną osią poziomą lub pionową w
zależności od tego, czy ognisko jest wcześniej, czy później. Plamka lasera pada na specjalny detektor, który jest wyposażony w
cztery punkty pomiarowe (fotodiody) A, B, C i D.

Do sterowania ruchem soczewki skupiającej używa się sygnału różnicowego (A+B) - (C+D). Taki system dynamicznie reguluje
układ optyczny, który nadąża za drganiami spowodowanymi ruchem dysku CD. Ten sam detektor używany jest również do
pozycjonowania lasera na ścieżce z pitami. Jeśli ścieżka przesuwa się w prawo lub w lewo, do więcej sygnału dostaje się
odpowiednio do diody D lub C.

W takich przypadkach układ sterujący odpowiednio przesuwa wózek z głowicą laserową, zapewniając ciągły odczyt ścieżki.
Oprócz problemów z pozycjonowaniem wiązki laserowej, układ napędowy CD musi również zapewnić stałą prędkość liniową
promienia lasera na ścieżce. Powoduje to, iż dysk CD obraca się z różną prędkością kątową w zależności od położenia głowicy
laserowej. Im bliżej środka dysku, tym prędkość ta jest większa.
Sam odczyt polega na tym, iż laser w różny sposób odbija się od powierzchni dysku. Natrafiając na pit, zostaje on rozproszony i w
efekcie do detektora dostaje się mniej światła. Powoduje to modulację strumienia świetlnego, a w efekcie modulację prądu
elektrycznego otrzymywanego z detektora. Na podstawie tych zmian układy logiczne stacji CD odczytują informację zapisaną na
dysku CD.
Tak w uproszczeniu działa system CD. W toku rozwoju wprowadzono w nim wiele zmian i ulepszeń, które poprawiły osiągi stacji
CD oraz zwiększyły ich niezawodność. Dyski CD pierwotnie używano tylko do zapisu muzyki, jednakże szybko stały się
nośnikiem danych cyfrowych dla rozwijających się komputerów. Ponieważ dane cyfrowe nie mogą zawierać żadnych błędów, na
dyskach CD ROM stosuje się lepszy system korekcji błędów ECC. Z tego powodu pojemność typowego dysku CD wynosi około
650 MB danych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 212 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

Technologia dysków CD została rozszerzona o dyski zapisywalne - CD-R (ang. Compact Disk Recordable). Wymagają one
specjalnych stacji CD-ROM, które posiadają możliwość zapisu danych na dysku CD-R, zwanych nagrywarkami CD (ang. CD
Recorder). Budowa płyt CD-R nieco różni się od zwykłych płyt CD. Przede wszystkim nie występują w nich pity. Zamiast nich
pomiędzy warstwą poliwęglanu a powłoką odbijającą (zamiast aluminium stosuje się tu warstewkę złota, dlatego płyty CD-R
posiadają często żółty kolor powierzchni refleksyjnej) umieszczona jest warstwa specjalnego tworzywa, które zmienia barwę pod
wpływem odpowiednio silnego światła lasera. Na wewnętrznej powierzchni dysku z poliwęglanu wykonany jest cieniutki rowek,
posiadający kształt spirali. Służy on do prowadzenia lasera podczas zapisu danych.

W trakcie zapisu laser pracuje z dużo większą mocą. Rozgrzane tworzywo zmienia swoją barwę. Zmiany barwy wzdłuż rowka
zapisującego odpowiadają pitom zwykłej płyty CD. Przy normalnym odczycie laser nie posiada odpowiednio dużej mocy, aby
zmienić kolor barwnika. Zatem raz zapisaną płytę CD-R można dowolną ilość razy odczytywać, jak zwykły dysk CD.
Oprócz płyt CD-R, które umożliwiają jednokrotny zapis, opracowana również płyty CD-RW (ang. Compact Disk ReWritable),
pozwalające na wiele cyklów zapisu, kasowania i ponownego zapisu. W dysku CD-RW pomiędzy warstwą z poliwęglanu a warstwą
refleksyjną znajduje się warstwa ze specjalnego stopu czterech metali - srebra, indu, antymonu i telluru. Warstwa ta posiada
własność zmian przezroczystości pod wpływem światła lasera o różnej energii. Proces ten jest w pełni odwracalny. Dzięki temu
informację zapisaną na płycie CD można wymazać i zastąpić inną.
Nagrywarki CD mogą pracować z różnymi prędkościami zapisu. Za pojedynczą prędkość przyjmuje się standardowy czas
odtwarzania płyty CD-Audio - 74 minuty. Nagrywarka pracująca z większą prędkością zapisuje pełen dysk CD w czasie
odpowiednio krótszym:
Prędkość zapisu Czas zapisu płyty CD
×1 74 min
×2 37 min
×4 18 min
×8 9 min
× 16 5 min
× 32 3 min
× 48 2 min

Dysk DVD
Rosnące wymagania użytkowników oraz potrzeba cyfrowego zapisu filmów doprowadziły do opracowania ulepszonego standardu
DVD (ang. Digital Video Disk). W systemie DVD zmniejszono rozmiar plamki lasera, dzięki czemu udało się zwiększyć ponad 6-
cio krotnie pojemność dysku. Ścieżki na dysku DVD są mniejsze w porównaniu z dyskiem CD i mieszczą więcej informacji. Dyski
DVD opracowano z myślą o cyfrowym zapisie obrazu TV. Standardowa pojemność jednej strony dysku DVD wynosi około 4,7 GB,
co pozwala na zapis 2 godzin filmu w formacie MPEG-2 (telewizyjny format cyfrowy). Jednakże wraz z upowszechnieniem się tego
standardu został on zaadoptowany przez komputery jako tani nośnik dużej ilości informacji.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 213 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

Dysk DVD wykorzystuje do maksimum możliwości lasera czerwonego. Dalsze zagęszczanie ścieżek i zmniejszanie rozmiarów
pitów napotyka na barierę rozdzielczości promieni lasera. Jednakże dyski DVD mogą być dwuwarstwowe oraz obustronne. W
płytach dwuwarstwowych DVD DL (ang. DVD Double Layer) dostęp do głębszej warstwy uzyskuje się regulując skupienie wiązki
laserowej.

Rozwiązanie to pozwala podwoić pojemność płyty DVD do 8,5 GB. Na płycie DVD DL można zapisać 4 godziny filmu w cyfrowej
jakości wraz z 6 kanałowym dźwiękiem. Płyta dwustronna i dwuwarstwowa DVD posiada pojemność 17,5 GB.
Płyty DVD również występują w wersji zapisywalnej DVD+R i DVD-R. Oba te standardy nieznacznie różnią się między sobą:
DVD-R: pojemność 4,489MB 4,706,074,624 bajtów, czyli 4.383GB - lepsze do filmów
DVD+R: pojemność 4,483MB 4,700,372,992 bajtów, czyli 4.377GB - lepsze do danych

Wzrost pojemności dysku DVD-R w porównaniu z CD-R uzyskano za pomocą zmniejszenia rozmiarów pitów. Zapis i odczyt
dokonywany jest laserem o długości fali 650 nm. Dyski wykonuje się z dwóch krążków poliwęglanowych, które klei się razem w
trakcie produkcji płyty. Pierwszy z tych krążków posiada warstwę zapisywalną, pokrytą warstwą refleksyjną wykonaną z
aluminium i specjalnego barwnika, zmieniającego kolor pod wpływem odpowiednio silnego światła lasera. Drugi krążek stabilizuje
zachowanie się całego dysku DVD podczas operacji odczytu/zapisu. Dyski dwustronne mają warstwę zapisywalną na obu
krążkach. Standard DVD wyparł we współczesnym sprzęcie informatycznym standard CD - nagrywarki DVD stały się
standardowym elementem wyposażenia wszystkich współczesnych komputerów. Ich zaletą jest możliwość odczytu i zapisu
również zwykłych płyt CD, CD-R, CD-RW.

Dyski DVD również występują w wersji wielokrotnego zapisu DVD-RW. Zasada działania tego systemu jest bardzo podobna do
CD-RW. Warstwa zapisywalna może być wielokrotnie kasowana światłem lasera i zapisywana ponownie. Technologia
wielokrotnego zapisu dotyczy również dysków DVD dwuwarstwowych.
Ilość czasu niezbędnego do zapisu dysku DVD-R lub DVD-RW zależy od szybkości zapisu nagrywarki DVD, użytego trybu zapisu
przez tę nagrywarkę, ilości informacji do zapisu oraz zastosowanego systemu weryfikacji zapisu. Szybkość nagrywania danych
mierzona jest w ten sam sposób, co szybkość odczytywania danych przez zwykłą stację DVD-ROM lub odtwarzarki DVD. Przy
pojedynczej prędkości nagrywarka zapisuje w każdej sekundzie 1,32 MB danych. Większe prędkości zapisu są wielokrotnościami
tej prędkości podstawowej.

Szybkość Czas zapisu


odczytu/zapisu Szybkość zapisu standardowej
MB/sek płyty
DVD DVD
1x 1.32 57 min
2x 2.64 28 min
3x 3.96 19 min
4x 5.28 14 min
5x 6.60 12 min
6x 7.93 10 min
8x 10.57 7 min
10x 13.21 6 min
12x 15.85 5 min
16x 21.13 4 min

Tryby zapisu
Wykorzystując osiągnięcia standardów CD-R i CD-RW, parametry zapisywalnych dysków DVD znacznie ulepszono w krótkim
czasie. Szybkość zapisu dysków DVD obecnie przewyższa nawet najszybsze nagrywarki CD-R i CD-RW.

Stała Prędkość Liniowa - Constant Linear Velocity (CLV)


Pierwotnie nagrywarki DVD pracowały w trybie CLV w celu utrzymania stałej szybkości przesyłu danych w obrębie całego dysku.
Tryb CLV ustala szybkość obrotową dysku od 1400 obr/min, która następnie jest zmniejszana do 580 obr/min, gdy głowica
laserowa odczytuje lub zapisuje dane ze wewnętrznej lub zewnętrznej średnicy dysku. Ponieważ cały dysk zapisywany jest ze

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 214 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

stałą szybkością przesyłu danych, to zapis 4,7 GB zajmuje około 57 minut czasu przy pojedynczej prędkości CLV. Gdy rośnie
szybkość zapisywania, rośnie również szybkość przesyłu danych, zatem przy 4 x CLV czas zapisu wynosi w przybliżeniu 14 min.
Czas zapisywania zależy również od ilości danych do zapisu. Zatem dyski niepełne zostaną zapisane w proporcjonalnie krótszym
czasie. Lecz zapisywanie przy dużych prędkościach wymaga coraz szybszych obrotów dysku (przy 6 x CLV od 8400 obr/min do
3480 obr/min), co stawia duże wymagania fizyczne dla nagrywarek, dysków DVD oraz oprogramowania. Wytwórcy sprostali tym
wyzwaniom wykraczając poza tryb CLV w celu uzyskania jeszcze wyższych parametrów zapisu.

Strefowo Stała Prędkość Liniowa - Zoned Constant Linear Velocity (ZCLV)


W przeciwieństwie do trybu CLV, w którym jest utrzymywana stała prędkość przesyłu danych w całym procesie zapisu, tryb ZCLV
dzieli dysk na strefy w każdej z nich stosuje stopniowo większą szybkość zapisu. Na przykład nagrywarka 8 x ZCLV DVD+R/+RW
zapisuje pierwsze 800 MB dysku w trybie 6 x CLV, a resztę w trybie 8 x CLV. Nagrywarka DVD-RAM stosuje inny rodzaj ZCLV, w
którym dysk jest dzielony na dużo więcej stref (np. dysk 4.7 GB na 34 strefy). Tutaj prędkość obrotowa jest utrzymywana na
stałym poziomie w każdej strefie, lecz różni się pomiędzy strefami, dając w wyniku mniej więcej stałą szybkość przesyłu danych
w całym procesie zapisu dysku.

Stała Prędkość Kątowa - Constant Angular Velocity (CAV)


W trybie CAV dysk wykonuje stałą liczbę obrotów w całym procesie zapisu. W wyniku szybkość przesyłu danych ciągle wzrasta,
gdy głowica laserowa przesuwa się wzdłuż promienia dysku ku jego krawędzi. Przykładowo, w trybie 5 x CAV nagrywarka DVD-
RAM rozpoczyna zapis przy prędkości 2 x na wewnętrznej średnicy dysku i przyspiesza stopniowo do 5 x przy zewnętrznej
średnicy dysku.

Weryfikacja Zapisu i Obsługa Błędów


Oprócz prostego zapisu danych, niektóre oprogramowanie nagrywające wykonuje weryfikację zapisu danych lub stosuje
zaawansowane techniki obsługi błędów zapisu, co w rezultacie może nawet podwoić całkowity czas zapisu dysku. Zwykle
weryfikacji dokonuje się po zapisie danych, natomiast obsługa błędów wykonywana jest w trakcie zapisywania. Weryfikację
danych w niektórych programach zapisujących dyski DVD można wyłączyć, lecz obsługa błędów jest zaprogramowana w samych
nagrywarkach i zwykle nie może być wyłączona.

Region DVD

Wytwórcy filmów podzielili świat na regiony nadając im numery od 1 do 6 (Polska jest w regionie 2). Filmy DVD posiadały
zakodowany numer regionu. Ich odtwarzanie było możliwe tylko wtedy, gdy stacja DVD posiadała taki sam kod regionu jak film.
Pierwsze stacje DVD pozwalały na pięciokrotne wprowadzenie kodu regionu. Po wyczerpaniu tego limitu dalsza zmiana kodu nie
była już możliwa (oczywiście bez odpowiedniej modyfikacji sprzętowej). Działania te miały na celu ograniczenie swobodnej
dystrybucji filmów DVD na świecie i zagwarantowanie zysków dla ich producentów (np. tanie filmy z USA nie mogły być
odtwarzane w Europie lub Ameryce Południowej).
Dzisiaj rozwiązanie to już praktycznie straciło na znaczeniu, ponieważ współczesne stacje DVD mają wbudowany kod 0, który
pozwala na odtwarzanie dysku DVD z dowolnego regionu. Istnieje również oprogramowanie maskujące kod regionu w stacjach
DVD-ROM lub jego całkowite usunięcie przy przegrywaniu. Obecnie coraz popularniejsze staje się zakupywanie filmów poprzez
sieć Internet, a standard DVD będzie powoli odchodził do lamusa.

Dysk Blue-Ray
Ograniczeniem technologii DVD jest długość fali świetlnej zastosowanego tam lasera - 640 - 790 nm. Przy takim świetle nie da się
zmniejszać pitów, będących nośnikami danych, gdyż przestałyby być widoczne. Przełom technologiczny nastąpił dopiero po
opracowaniu przez japońskiego naukowca Shuji Nakamurę nowego lasera, który produkuje światło fioletowe o długości 405 nm.
Kolor światła lasera użyto w nazwie nowej technologii (ang. blue ray - niebieski promień). Takie światło posiada dużo większą
rozdzielczość, co umożliwia z kolei zagęszczenie ścieżek i zmniejszenie rozmiaru pitów. Dzięki temu pojemność dysków BD
(ang. Blue-ray Disk) osiąga 25 GB. Taka pojemność potrzebna jest do cyfrowego zapisu filmów w technologii HD (ang. High
Definition - Wysoka Jakość).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 215 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

Dyski BD mogą występować w odmianach wielowarstwowych. Dwuwarstwowy dysk ma pojemność 50 GB, 4 warstwowy - 100 GB.
Rekordzistą jest dysk 16 warstwowy o pojemności 400 GB. Dysk Blu-ray posiada dwie warstwy: pierwsza o grubości 1,1 mm,
druga o grubości 0,1 mm, na której zapisywane są dane. Minimalna długość pitu wynosi 0,15 µm. Odstęp pomiędzy ścieżkami jest
równy 0,32 µm, średnica plamki lasera wynosi 0,48 µm.
Oprócz zwykłych dysków BD-ROM (ang. Blue-ray Read Only Memory) istnieją zapisywalne dyski BD-R (ang. Blue-ray Disk
Recordable) oraz dyski wielokrotnego zapisu BD-RE (Blue-ray Disk REwritable). Ich technologie są zbliżone do technologii
odpowiednich dysków CD i DVD.

Producenci filmów w jakości HD podzielili świat na trzy regiony (Polska należy do regionu B/2), podobnie jak w przypadku DVD.
Odtwarzacz Blue-ray może odtwarzać tylko płyty BD o takim samym kodzie regionu jak kod odtwarzacza. Działanie to ma na celu
kontrolę nad dystrybucją filmów na świecie. Oczywiście odpowiedzią rynku było pojawienie się specjalnych odtwarzaczy Blue-ray
od niezależnych producentów, które potrafią odczytywać płyty BD z dowolnego regionu.

Należy tu wspomnieć, iż z technologią Blue-ray konkurują dyski HD DVD, które posiadają większą pojemność - 30 GB.
Nowoczesne nagrywarki pozwalają na zapisywanie i odczytywanie obu rodzajów dysków (jak również formatów CD i DVD).
Ponieważ ceny tych urządzeń szybko spadają, w niedalekiej przyszłości wyprą one standard DVD w komputerach osobistych.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany


Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 216 / 253


Bit w zastosowaniach - Pamięć CD/DVD/Blue-Ray 2014-10-03

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0047.php 217 / 253


Bit w zastosowaniach - Wejście/Wyjście 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Sterowanie za pomocą bitów


Wejście / Wyjście
Bramki logiczne Centronics
Cyfrowe układy scalone TTL i CMOS RS-232
Zasilanie układów TTL i CMOS PS/2
Zjawisko hazardu w sieciach logicznych USB
Przerzutniki
Pamięć
Wejście / wyjście
Termin wejście/wyjście (ang. input/output) odnosi się do wymiany informacji pomiędzy
systemem przetwarzania danych, takim jak komputer, a światem zewnętrznym. Przez
wejście (ang. input) rozumiemy informację napływającą do systemu. Wyjście (ang. output)
odnosi się do informacji wyprowadzanej z systemu, która została przez ten system
przetworzona.
Bez wejścia/wyjścia każdy komputer stałby się urządzeniem zupełnie bezużytecznym,
ponieważ, nie mogąc wymieniać danych z otoczeniem, nie mógłby przetwarzać nowych
informacji, a z kolei użytkownicy nie mogliby otrzymywać wyników tego przetwarzania.
Zatem dzięki wejściu/wyjściu komputery są urządzeniami interaktywnymi, które potrafią
reagować na zmiany w otaczającym je świecie i podejmować odpowiednie do tych zmian
decyzje. Cecha ta umożliwia zastosowanie komputerów do sterowania różnego rodzaju
urządzeniami technicznymi.
Porty we/wy (ang. I/O ports) są dla komputera oknem na świat. Umożliwiają one połączenie
z różnymi urządzeniami we/wy (ang. I/O devices) w celu przesyłania danych. To dzięki nim
możesz używać klawiatury, myszki, drukarki, monitora.
Rozwój portów we/wy następował wraz z rozwojem sprzętu informatycznego. Początkowo informację do komputerów wprowadzano
za pomocą czytników taśm perforowanych - takie rozwiązanie stosował np. Konrad Zuse w swoich komputerach Z1 i Z3. Wyniki
odczytywano na specjalnych wskaźnikach lub były one zapisywane również na taśmach perforowanych. Później taśmy
perforowane zastąpiono czytnikami kart, dyskami magnetycznymi, dyskami CD, DVD, BD, kartami sieciowymi, drukarkami itp.
Zmieniały się urządzenia i ich parametry, jednakże sama idea wciąż pozostaje taka sama - dostarczyć do komputera dane i
wyprowadzić wyniki obliczeń.
Porty we/wy są jednym z trzech podstawowych składników architektury każdego systemu komputerowego:
1. Pamięć - przechowuje informację
2. Porty we/wy - umożliwiają wymianę informacji z otoczeniem
3. Procesor - przetwarza informację

W tym rozdziale opisujemy pięć podstawowych portów we/wy:

Centronics - port równoległy


RS-232 - port szeregowy
PS/2 - port klawiatury i myszki
USB - uniwersalną magistralę szeregową

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0048.php 218 / 253


Bit w zastosowaniach - Wejście/Wyjście 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0048.php 219 / 253


Bit w zastosowaniach - Centronics 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Sterowanie za pomocą bitów


Centronics - port równoległy
Bramki logiczne Centronics
Cyfrowe układy scalone TTL i CMOS RS-232
Zasilanie układów TTL i CMOS PS/2
Zjawisko hazardu w sieciach logicznych USB
Przerzutniki
Pamięć
Wejście / wyjście

Port równoległy Centronics został opracowany w Wang Laboratories przez dr An Wanga, Roberta Howarda
i Prentice Robinsona. Złącze to zostało opracowane głównie do transmisji danych pomiędzy komputerem a
drukarką - jednakże później wykorzystywano je również do podłączania takich urządzeń jak skanery i
plotery. Obecnie Centronics zaczyna przechodzić do historii - większość współczesnych urządzeń
peryferyjnych jest podłączana do komputera za pomocą magistrali USB, która posiada dużo większą
szybkość działania i możliwość jednoczesnej obsługi większej liczby urządzeń.
W telekomunikacji rozróżniamy dwa rodzaje transmisji danych:
1. Transmisję szeregową (ang. serial transmission) - bity danych są wysyłane
pojedynczo jeden po drugim. Zaletą takiego systemu jest mała liczba kanałów
transmisyjnych. Upraszcza to budowę urządzeń nadawczo odbiorczych.
2. Transmisję równoległą (ang. parallel transmission) - bity tworzące słowo
danych (np. 8 bitów = bajt) są przesyłane jednocześnie w osobnych kanałach
Dr An Wang transmisyjnych. Zaletą jest duża szybkość transmisji, jednakże występuje
komplikacja urządzeń nadawczo-odbiorczych.

Interfejs Centronics wykorzystuje transmisję równoległą. Magistrala interfejsu posiada 8 linii transmisji danych, 4 linie sygnałów
sterujących oraz 5 linii statusu. Standard Centronics opisuje dokładnie norma IEEE 1284. Komputery IBM-PC są wyposażone w
gniazdo Centronics typu DB-25 Female (żeńskie), które widzimy na poniższym obrazku po lewej stronie. Z gniazdem tym
współpracuje wtyczka kabla Centronics typu DB-25 Male, którą widzimy po stronie lewej na środkowym obrazku. W drukarkach
stosuje się złącze DB-36 Male, widoczne poniżej po stronie prawej:

Komputer IBM-PC Kabel łączący komputer z drukarką Drukarka

DB-25 Female DB-25 Male DB-36 Male DB-36 Female

Sygnały gniazda-wtyczki DB-25 i DB-36


Poszczególne wtyki posiadają w DB-25 następującą numerację (widok od strony wtyków, nie od strony lutów):

Komputer Kabel Kabel Drukarka

Gniazdo DB-25 Female Wtyczka DB-25 Male Wtyczka DB-36 Male Gniazdko DB-36 Female

W poniższej tabeli zebraliśmy przypisania sygnałów do poszczególnych wtyków DB-25:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 220 / 253


Bit w zastosowaniach - Centronics 2014-10-03

Nr wtyku Nazwa sygnału Kierunek transmisji Opis sygnału


1 STROBE PC → Druk. Sygnał zegarowy
2 D0 PC → Druk.
3 D1 PC → Druk.
4 D2 PC → Druk.
5 D3 PC → Druk.
8 linii danych
6 D4 PC → Druk.
7 D5 PC → Druk.
8 D6 PC → Druk.
9 D7 PC → Druk.
10 ACK PC ← Druk. Potwierdzenie przyjęcia danych
11 BUSY PC ← Druk. Drukarka jest zajęta
12 POUT PC ← Druk. Skończył się papier w drukarce
13 SEL PC ← Druk. Drukarka jest włączona
14 AUTOFEED PC → Druk. Automatyczne przesuwanie wiersza
15 ERROR PC ← Druk. Wskazuje na błąd drukarki (lub jej wyłączenie)
16 RESET PC → Druk. Resetuje drukarkę, czyści jej bufor i inicjuje ją.
17 SLCT IN PC → Druk. Uaktywnia drukarkę lub ją dezaktywuje
18-25 GND N/A Masy dla sygnałów 1-12, w większości przypadków są to skrętki dwóch przewodów.

A tutaj mamy przypisania sygnałów do poszczególnych wtyków DB-36:

Nr wtyku Nazwa sygnału Kierunek transmisji Opis sygnału


1 STROBE PC → Druk. Sygnał zegarowy
2 D0 PC → Druk.
3 D1 PC → Druk.
4 D2 PC → Druk.
5 D3 PC → Druk.
8 linii danych
6 D4 PC → Druk.
7 D5 PC → Druk.
8 D6 PC → Druk.
9 D7 PC → Druk.
10 ACK PC ← Druk. Potwierdzenie przyjęcia danych
11 BUSY PC ← Druk. Drukarka jest zajęta
12 POUT PC ← Druk. Skończył się papier w drukarce
13 SEL PC ← Druk. Drukarka jest włączona
14 AUTOFEED PC → Druk. Automatyczne przesuwanie wiersza
15 n/c N/A Nie używane
16 0V N/A Masa logiczna
17 CHASSIS GND N/A Masa osłony
18 +5 V PULLUP PC ← Druk. Napięcie stałe +5 V (maksymalnie 50 mA)
19-30 GND N/A Masy dla sygnałów 1-12, w większości przypadków są to skrętki dwóch przewodów.
31 RESET PC → Druk. Resetuje drukarkę, czyści jej bufor i inicjuje ją.
32 ERROR PC ← Druk. Wskazuje na błąd drukarki (lub jej wyłączenie)
33 0V N/A Masa sygnałowa
34 N/C N/A Nie używane
35 +5 V PC ← Druk. Napięcie stałe +5 V
36 SELCTIN PC → Druk. Uaktywnia drukarkę lub ją dezaktywuje

Poszczególne sygnały portu Centronics posiadają następujące zastosowanie:

STROBE - Sygnał STROBE jest najważniejszym sygnałem portu Centronics, ponieważ informuje on drukarkę, że może
odczytywać bajt z linii danych D0-D7. Zwykle STROBE ustawiony jest na 1 (ma napięcie 5V), a w momencie
transmisji danych zmienia się na 0 (napięcie spada do około 0,5V). W tym momencie na liniach danych D0-D7
muszą być ustawione przesyłane bity. Ponieważ elementy cyfrowe posiadają różne czasy propagacji, sygnał
STROBE powinien przechodzić w stan 0 z pewnym opóźnieniem, które gwarantuje ustalenie się napięć na
wyjściach D0-D7. Opóźnienie to wynosi około pół mikrosekundy. Następnie sygnał STROBE przechodzi w stan
niski na około 1 mikrosekundę. Po powrocie STROBE do stanu 1 dane na liniach D0-D7 utrzymują się jeszcze
przez około pół mikrosekundy. Zatem całkowity czas przesłania 1 bajtu danych wynosi około dwóch mikrosekund.
D0-D7 - 8 linii danych przenosi informację od komputera do drukarki (w pierwotnym standardzie Centronics linie te były
jednokierunkowe, później jednak zaczęto wprowadzać dwukierunkowe linie danych, które umożliwiały transmisję

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 221 / 253


Bit w zastosowaniach - Centronics 2014-10-03

jednokierunkowe, później jednak zaczęto wprowadzać dwukierunkowe linie danych, które umożliwiały transmisję
również w kierunku odwrotnym). Są to zwykle kody znaków oraz dane graficzne i kody sterujące (np. przejście na
inny krój pisma, pismo pochyłe lub pogrubione, itp.). Każda linia przekazuje jeden bit informacji. Bity są
reprezentowane przez zwykłe poziomy TTL: 1 - 5V, 0 - 0,5V.
ACK - Ten sygnał przekazuje komputerowi potwierdzenie, iż drukarka odczytała dane z linii D0-D7. Jest on aktywny w
stanie niskim, tzn. utrzymuje napięcie 5V, które w momencie potwierdzenia spada do około 0,5V. W ten sposób
komputer będzie wiedział, iż dane zostały przekazane do drukarki. Stan niski utrzymuje się typowo przez około 8
mikrosekund.
BUSY - Przesłanie każdego bajtu zajmuje około 2 mikrosekundy, co oznacza, iż do drukarki dociera strumień danych o
szybkości 500.000 B na sekundę. Tak szybko drukarka nie potrafi drukować, dlatego zastosowano linię BUSY. Po
odebraniu każdego bajtu drukarka ustawia tę linię na 1, aby powstrzymać transmisję następnych bajtów aż do
momentu, gdy drukarka poradzi sobie z bajtem właśnie odebranym. Gdy linia przyjmie stan 0, komputer może
kontynuować przesłanie kolejnego bajtu.
POUT - Jeśli w drukarce skończy się papier, to ustawia ona linię POUT na 1. W przeciwnym razie linia ta ma stan 0.
Komputer, wykrywszy w ten sposób brak papieru, może odpowiednio poinformować swojego użytkownika. Gdy
wystąpi taka sytuacja, linia BUSY również przechodzi w stan wysoki, aby komputer nie przesyłał dalszych danych
aż do momentu rozwiązania tego problemu przez użytkownika. Oczywiście przy braku papieru na drukarce zapala
się odpowiednie światełko, ale kto na nie patrzy...
SEL - Gdy drukarka jest włączona i gotowa do przyjmowania danych (mówimy, że jest online), ustawia sygnał SEL na 1.
Jeśli sygnał ten ma wartość 0, to drukarka jest odłączona (mówimy offline) i komputer nie będzie przesyłał do niej
danych.
AUTOFEED - Nie wszystkie drukarki traktują znak CR (ang. carriage return - powrót karetki - kod 13) w ten sam sposób.
Niektóre z nich przesuną głowicę na początek drukowanego wiersza, a inne przesuną dodatkowo papier jeden
wiersz w dół (lub w górę). Większość drukarek pozwala ustawić przełącznikami DIP lub w inny sposób, jak mają
reagować na znak końca wiersza CR. Sygnał AUTOFEED załatwia tę sprawę. Gdy komputer ustawi ten sygnał na
0 , to po odebraniu znaku CR drukarka automatycznie przewinie papier o jeden wiersz. Jeśli sygnał ten jest
ustawiony na 1, to w celu przesunięcia papieru o jeden wiersz, komputer musi przesłać oprócz znaku CR również
znak LF (ang. line feed - przesuw o wiersz - kod 10). Oczywiście całą sprawą zajmuje się oprogramowanie
komunikujące się z drukarką - użytkownik często nawet nie jest świadomy tych problemów, bo i po co - dzisiaj
większość drukarek pracuje w trybie graficznym drukując całą stroną.
ERROR - Ta linia informuje komputer o wystąpieniu błędu w drukarce. Rodzaj błędu nie jest określony. Jeśli drukarka nie
wykryła błędów, ustawia linię ERROR na 1. W przypadku błędu linia ta przyjmuje stan 0.
RESET - Ten sygnał jest wykorzystywany przez komputer do ponownej inicjalizacji drukarki. Normalnie RESET ma stan 1.
Przy inicjalizacji jest ustawiane na 0. Sygnał taki przydaje się do ustawienia drukarki w stan początkowy przy
rozpoczynaniu sesji drukowania. Poprzednia sesja mogła przesłać do drukarki różne kody sterujące, które ustawiły
ją w jakiś niepożądany stan: np. druk pisma pochyłego, pogrubionego, itp. Resetując drukarkę, pozbywamy się
tych ustawień.
SELCTIN - Sygnał ten pozwala komputerowi aktywować (stan 0) i dezaktywować drukarkę (stan 1). Gdy drukarka jest w
stanie offline, nie będzie przyjmowała danych od komputera.

Tryby pracy portu Centronics


Port Centronics pierwotnie miał być wykorzystywany do połączenia komputera z drukarką. Jednakże bardzo szybko okazało się,
iż może on przesyłać dane również pomiędzy innymi typami urządzeń. Aby usprawnić taką komunikację, rozszerzono definicję
sygnałów w kolejnych wersjach interfejsu Centronics. Poniżej krótko opisujemy tryby pracy portu Centronics.

Tryb Kompatybilności - Compatibility Mode - SPP


Tryb ten jest używany do komunikacji komputerów osobistych z drukarkami. Często jest on opisywany skrótem SPP
(ang. Standard Parallel Port - Standardowy Port Równoległy) lub jako tryb Centronics (ang. Centronics Mode).
Poniższy rysunek przedstawia przebieg sygnałów na istotnych liniach portu Centronics w czasie transmisji danych
od komputera do drukarki.

Cykl przesyłu bajtu danych w trybie kompatybilności


1. Komputer umieszcza bajt danych na liniach D0-D7.
2. Komputer sprawdza status drukarki. Jeśli nie ma błędów, sprawdzany jest stan linii BUSY. W przypadku
błędów transmisja jest przerywana. Czas ten jest również wykorzystywany do ustalenia się sygnałów na
liniach danych.
3. Jeśli linia BUSY ma stan 0, to komputer ustawia linię STROBE w stan 0. Powoduje to odczyt danych z linii
D0-D7 przez drukarkę. Drukarka ustawia linię BUSY na stan 1 do momentu przetworzenia odczytanych
danych.
4. Komputer ustawia linię STROBE z powrotem na stan wysoki i czeka na potwierdzenie odbioru danych. Gdy
drukarka odczyta dane, generuje ujemny impuls potwierdzający na linii ACK. Gdy dane zostaną przetworzone
i drukarka stanie się gotowa do odczytu kolejnego bajtu, ustawia linię BUSY na stan 0.

Faza Negocjacji
Wszystkie następne tryby pracy interfejsu Centronics wymagają wstępnej negocjacji komputera z urządzeniem
zewnętrznym, w wyniku której komputer otrzymuje informację zwrotną o możliwościach podłączonego przez port
urządzenia oraz o rodzajach obsługiwanych przez niego trybów komunikacyjnych.
Negocjacja (ang. negotiation) jest ciągiem zdarzeń w porcie Centronics, które nie wpływają na pracę starszych
urządzeń nie obsługujących negocjacji. Natomiast w przypadku nowszych urządzeń pozwalają na ich właściwą

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 222 / 253


Bit w zastosowaniach - Centronics 2014-10-03

identyfikację. Negocjację przeprowadza się zawsze w trybie kompatybilności SPP. Jeśli dane urządzenie nie
zareaguje odpowiednio na zdarzenia negocjacji, to komputer pozostawi port Centronics w trybie SPP, co umożliwi
mu współpracę ze starszym sprzętem. Natomiast urządzenia standardu IEEE 1284 zareagują odpowiednio na tę
sekwencję i komputer będzie dla nich mógł wybrać właściwy sposób funkcjonowania interfejsu.
W czasie fazy negocjacji komputer umieszcza tzw. bajt rozszerzenia (ang. Extensibility Data Byte) na liniach D0-
D7 i inicjuje sekwencję negocjacji. Żądanie może dotyczyć przejścia interfejsu w określony tryb pracy lub pobrania
numeru ID urządzenia zewnętrznego. Numerem identyfikacyjnym się tutaj nie zajmiemy, poniższy opis dotyczy
natomiast podstawowej sekwencji negocjacji.
Poniższa tabela przedstawia bity bajtu rozszerzenia oraz ich znaczenie dla urządzenia peryferyjnego.

Bit Opis wartość


binarna
D7 Żądanie rozszerzonego połączenia 1000 0000
D6 Żądanie trybu EPP 0100 0000
D5 Żądane trybu ECP z RLE 0011 0000
D4 Żądanie trybu ECP bez RLE 0001 0000
D3 Zarezerwowane 0000 1000
Nibble 0000 0100

Byte 0000 0101


Żądanie numeru ID
D2 Dane zwracane trybem:
ECP bez RLE 0001 0100

ECP z RLE 0011 0100


D1 Zarezerwowane 0000 0010
D0 Tryb Byte 0000 0001
żaden Tryb Nibble 0000 0000

Na poniższym rysunku przedstawiono przebiegi sygnałów występujących podczas negocjacji komputera z


urządzeniem zewnętrznym.

1. Komputer umieszcza na liniach danych D0-D7 bajt rozszerzenia.


2. Następnie ustawia linie SELECTIN na 1 i AUTOFEED na 0, co jest informacją dla urządzenia zewnętrznego, iż
nastąpi sekwencja negocjacji.
3. Urządzenie obsługujące dodatkowe tryby odpowie przez ustawienie ACK na 0, a ERROR, POUT i SEL na 1.
Urządzenia nie obsługujące nowych trybów transmisji nie zareagują - port pozostanie w trybie SPP.
4. Teraz komputer ustawia linię STROBE na 0. Jest to sygnał dla urządzenia, że można odczytać bajt
rozszerzenia z linii D0-D7.
5. Komputer ustawia linie STROBE i AUTOFEED z powrotem na 1, aby zasygnalizować urządzeniu
zewnętrznemu, że zostało rozpoznane jako urządzenie obsługujące dodatkowe tryby przesyłu danych.
6. Urządzenie zewnętrzne odpowiada przez ustawienie POUT na 0. Pozostałe linie ERROR i SEL zostają
ustawione na 0 lub 1 w zależności, od aktualnych możliwości urządzenia:
ERROR na 0, jeśli urządzenie posiada dostępny kanał zwrotny,
ERROR na 1, jeśli urządzenie nie ma kanału zwrotnego
SEL na 1, jeśli żądany tryb jest dostępny
SEL na 0, jeśli żądanego trybu urządzenie nie obsługuje.
7. Teraz urządzenie zewnętrzne ustawia linię ACK na 1, aby zasygnalizować koniec sekwencji negocjacji i
ustawienie linii portu w stan zgodny z pożądanym trybem transmisji.

Tryb Nibble
Termin angielski nibble oznacza czwórkę bitów - pół bajtu. Jeden bajt składa się z dwóch takich czwórek: starszej i
młodszej:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 223 / 253


Bit w zastosowaniach - Centronics 2014-10-03

← bajt →
b7 b6 b5 b4 b3 b2 b1 b0
starszy niblle młodszy nibble

Tryb Nibble jest najpopularniejszym sposobem uzyskania kanału zwrotnego z urządzenia podłączonego do portu
Centronics, gdyż nie opiera się on na standardowym sposobie pracy poszczególnych linii sygnałowych - w innych
trybach linie te muszą być zwykle dwukierunkowe, a to z kolei wymaga przebudowy elektroniki realizującej to
połączenie. Tryb ten zwykle łączy się z trybem kompatybilności w celu stworzenia pełnego, dwukierunkowego kanału
wymiany danych. Oczywiście, podłączone urządzenie do portu Centronics musi obsługiwać ten tryb. Komputer
sprawdza w fazie negocjacji możliwości urządzenia podłączonego do portu Centronics.
Standardowy port Centronics udostępnia pięć linii sygnałowych, którymi urządzenie zewnętrzne może się
komunikować z komputerem. Linie te służą normalnie do informowania komputera o statusie drukarki. Jednakże
można je wykorzystać do przesłania bajtu danych jako dwóch nibble w dwóch kolejnych cyklach. Poniższa tabela
definiuje nazwy sygnałów w trybie Nibble.

Sygnał w Nazwa w
trybie SPP trybie
Nibble
We/Wy Opis wykorzystania sygnałów w trybie Nibble

STROBE STROBE Wy Nieużywane w transmisji zwrotnej.

AUTOFEED HostBusy Wy Sygnał potwierdzenia przyjęcia danych w trybie Nibble. Stan 0 oznacza
gotowość komputera na przyjęcie danych.
SELECTIN 1284Active Wy Ustawione na 1 w trybie przesyłu Nibble.
INIT INIT Wy Nieużywane w transmisji zwrotnej.
Ustawiane na 0 przy ważnym nibble, ustawiane na 1 w odpowiedzi na
ACK PtrClk We HostBusy 1.
BUSY PtrBusy We Przesyła bit nibble b3, później b7
PE AckDataReq We Przesyła bit nibble b2, później b6
SELECT Xflag We Przesyła bit nibble b1, później b5
ERROR DataAvail We Przesyła bit nibble b0, później b4
D0-D7 nieużywane

Poniższy rysunek przedstawia przebiegi sygnałów przy transmisji bajtu w trybie Nibble.

1. Komputer sygnalizuje gotowość na przyjęcie danych przez ustawienie linii HostBusy na 0.


2. W odpowiedzi urządzenie zewnętrzne umieszcza bity młodszego nibble na liniach DataAvail, XFlag,
AckDataReq i PtrBusy. W porcie Centronics są to linie statusu drukarki.
3. Urządzenie zewnętrzne sygnalizuje komputerowi dostępność danych, ustawiając linię PtrClk na 0.
4. Komputer odczytuje nibble i w odpowiedzi ustawia linię HostBusy na 1. Jest to sygnał dla urządzenia, że
pierwszy nibble został odczytany.
5. Urządzenie zewnętrzne ustawia linię PtrClk na 1, aby potwierdzić pierwszy nibble.
6. Kroki od 1 do 5 zostają powtórzone dla starszego nibble.
Tryb nibble jest realizowany programowo. Ogranicza to maksymalną szybkość przesyłu danych do około 50 KB na
sekundę. Nie stanowi to problemu w przypadku drukarek, lecz ogranicza inne urządzenia, które posiadają dużo
większą szybkość transmisji danych (stacje dysków, modemy sieciowe, itp). Największą zaletą tego rozwiązania
jest możliwość uzyskania tego trybu na wszystkich komputerach PC wyposażonych w standardowy port Centronics.

Tryb Byte
Późniejsze implementacje standardu Centronics, dokonane szczególnie przez IBM na modelach PS/2, dodały
możliwość dwukierunkowej komunikacji poprzez linie danych D0-D7, zatem port Centronics mógł służyć zarówno do
przesyłania danych od komputera jak i do ich odczytu z urządzenia zewnętrznego. Dzięki takiemu rozwiązaniu
urządzenie zewnętrzne może przesyłać do komputera pełny bajt danych w jednym cyklu po liniach D0-D7. Tryb
bajtowy również jest uaktywniany poprzez negocjację komputera z urządzeniem zewnętrznym.
Ten tryb pozwala urządzeniu zewnętrznemu przesyłać bajt danych do komputera PC z szybkością zbliżoną do trybu
kompatybilności. Poniższa tablica przedstawia sygnały wykorzystywane w trybie Byte.

Sygnał w Sygnał w

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 224 / 253


Bit w zastosowaniach - Centronics 2014-10-03

Sygnał w Sygnał w We/Wy Opis sygnałów w trybie Byte


trybie SPP trybie Byte
Ustawiane w stan 0 na końcu przesyłania każdego bajtu w celu zaznaczenia,
STROBE HostClk Wy że bajt został odczytany. Jest sygnałem potwierdzenia.

AUTOFEED HostBusy Wy Ustawiane na 0, gdy komputer jest gotowy do odczytu bajtu.. Ustawiane na 1,
gdy bajt zostanie odczytany. Sygnał potwierdzenia odbioru.
SELECTIN 1284Active Wy Ustawione na 1, gdy komputer pracuje w trybie rozszerzonej transmisji.
INIT INIT Wy Nieużywane, ustawione na 1.

ACK PtrClk We Ustawione na 0, gdy dane są gotowe do odczytu z D0-D7. Ustawiane na 1 w


odpowiedzi na przejście linii HostBusy w stan 1.
BUSY PtrBusy We Informuje o zajętości urządzenia.
PE AckDataReq We Występuje z DataAvail
SELECT Xflag We Znacznik rozszerzenia. W trybie Byte nie jest używany.
ERROR DataAvail We Ustawiane na 0 przez urządzenie zewnętrzne, gdy dane zwrotne są dostępne.
D0-D7 D0-D7 We/Wy Używane do przesyłu danych z urządzenia zewnętrznego do komputera.

1. Komputer sygnalizuje możliwość przyjęcia danych przez ustawienie linii HostBusy na 0.


2. Urządzenie peryferyjne odpowiada przez umieszczenie bajtu danych na liniach D0-D7.
3. Urządzenie informuje komputer o dostępności danych przez ustawienie linii PtrClk na 0.
4. Komputer odczytuje bajt z linii D0-D7 i ustawia linię HostBusy na 1, aby poinformować urządzenie
zewnętrzne, że odczytał dane, ale nie jest jeszcze gotowy na kolejny bajt.
5. Urządzenie peryferyjne potwierdza przesłanie bajtu ustawiając PtrClk na 1. W tym czasie komputer tworzy
ujemny impuls na linii HostClk, aby wysłać potwierdzenie do urządzenia zewnętrznego.
6. Dla kolejnego bajtu powtarzane są kroki od 1 do 5.

Tryp EPP
EPP pochodzi od angielskiej nazwy Enhanced Parallel Port - Ulepszony Port Równoległy. Protokół EPP został
opracowany przez firmy Intel, Xircom i Zenith Data Systems. Celem tego projektu było stworzenie portu równoległego
o wysokich parametrach użytkowych, który byłby wciąż kompatybilny ze standardowym portem Centronics. Protokół
EPP, oferując wiele korzyści wytwórcom urządzeń peryferyjnych sterowanych przez port równoległy, bardzo szybko
się rozpowszechnił i stał się opcjonalnym sposobem przesyłu danych. Stało się to przed przyjęciem standardu IEEE
1284.
Protokół EPP udostępnia cztery typy cykli przesyłu danych:

1. Cykl Zapisu Danych


2. Cykl Odczytu Danych
3. Cykl Zapisu Adresu
4. Cykl Odczytu adresu
Cykle danych używane są do przesyłu danych pomiędzy komputerem a urządzeniem zewnętrznym. Cykle adresu
służą do przekazywania adresu, kanału lub polecenia i informacji sterujących. W poniższej tabeli przedstawiamy
sygnały używane przez tryb EPP wraz z ich odpowiednikami dla portu SPP.

Sygnał w Sygnał w
We/Wy Opis sygnałów w trybie EPP
trybie SPP trybie EPP
STROBE WRITE Wy Aktywny w stanie 0. Oznacza operację zapisu. W cyklu odczytu ma stan 1.

AUTOFEED DATASTB Wy Aktywny w stanie 0. Oznacza wykonywanie operacji odczytu lub zapisu
danych.

SELECTIN ADDRSTB Wy Aktywny w stanie 0. Oznacza wykonywanie operacji odczytu lub zapisu
adresu.
INIT RESET Wy Aktywny w stanie 0. Resetuje urządzenie zewnętrzne.
Przerwanie z urządzenia zewnętrznego. Wykorzystywany do generacji
ACK INTR We przerwania w komputerze.

BUSY WAIT We Sygnał potwierdzenia. W stanie 0 oznacza zgodę na rozpoczęcie cyklu. W


stanie 1 oznacza zgodę na zakończenie cyklu.
D0-D7 D0-D7 We/Wy Dwukierunkowe linie danych oraz adresów.
POUT definiowany We Może być używane w różny sposób przez każde urządzenie peryferyjne.
SELECT definiowany We Może być używane w różny sposób przez każde urządzenie peryferyjne.
ERROR definiowany We Może być używane w różny sposób przez każde urządzenie peryferyjne.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 225 / 253


Bit w zastosowaniach - Centronics 2014-10-03

ERROR definiowany We Może być używane w różny sposób przez każde urządzenie peryferyjne.

Na rysunku poniżej przedstawiamy przykładowy cykl zapisu danych - w cyklu adresu zamiast linii DATASTB jest
używana w identyczny sposób linia ADDRSTB. W cyklu odczytu linia WRITE zachowuje stan 1 przez cały czas
trwania cyklu. Sygnał IOW (ang. Input Output Write - Zapis Do Portu We/Wy) jest sygnałem mikroprocesora, a nie
portu EPP. Znalazł się on na rysunku po to, aby pokazać, iż cały cykl zapisu EPP do urządzenia zewnętrznego
odbywa się w czasie jednego cyklu we/wy wykonywanego przez procesor.

1. Mikroprocesor wykonuje cykl we/wy zapisu do portu danych EPP.


2. Linia WRITE zostaje ustawiona w stan 0 i na liniach D0-D7 pojawiają się dane.
3. Linia DATASTB przechodzi w stan 0, ponieważ linia WAIT posiada stan 0.
4. Port czeka na potwierdzenie od urządzenia peryferyjnego (linia WAIT musi przejść w stan 1).
5. Linia DATASTB powraca do stanu 1 i cykl EPP kończy się.
6. Kończy się cykl we/wy mikroprocesora.
7. Linia WAIT przechodzi w stan 0, co oznacza zgodę na rozpoczęcie kolejnego cyklu.

Ponieważ cykl przesyłu danych w porcie EPP odbywa się w ciągu jednego cyklu we/wy mikroprocesora, port ten
może osiągnąć dużą szybkość przesyłu danych - od 500KB do 2MB na sekundę. Jest to jedna z głównych zalet
trybu EPP.
Tryb ECP
ECP jest skrótem angielskiej nazwy Extended Capability Port - Port o Rozszerzonych Możliwościach. Standard
ECP został opracowany wspólnie przez Microsoft i Hewlett Packard do współpracy z drukarkami i skanerami.
Zapewnia on szybką, dwukierunkową wymianę danych pomiędzy komputerem a urządzeniem zewnętrznym. Protokół
ECP umożliwia transmisję dwukierunkową dla danych oraz dla rozkazów. Zaimplementowano również kompresję
danych typu RLE (ang. Run Length Encoding), dzięki której ilość przesyłanych danych może być istotnie mniejsza -
jest to szczególnie pożądane przy urządzeniach, które wymagają przesyłania dużej liczby danych, takich jak
drukarki laserowe i skanery. Jednakże tryb kompresji RLE musi być obsługiwany po obu stronach toru
transmisyjnego, aby można było z niego skorzystać.

Kodowanie RLE polega na zastępowaniu powtarzających się ciągów znaków lub bajtów informacją o
ich liczbie powtórzeń. Załóżmy, że mamy ciąg:

AAAAAAAAAABBBBBCCCCCCCCCCCCCCCDDDDDDDDDD

W ciągu tym występuje 40 znaków = 40 bajtów danych. Powtarzające się znaki zastępujemy
znakiem oraz liczbą jedno bajtową, określającą ilość powtórzeń znaku. Otrzymamy:

A(10)B(5)C(15)D(10)

Na niebiesko zaznaczyliśmy bajty, które zawierają liczbę powtórzeń poprzedzającego je


czerwonego znaku. Teraz liczba bajtów wynosi tylko 8 - dane skompresowaliśmy do 20% pierwotnej
objętości, czyli 5 do 1. Tego typu powtarzające się dane często występują w grafice - np. tło składa
się z jednolitych, dużych obszarów, wypełnionych tym samym kolorem kolorem. Ponieważ ilość
powtórzeń jest przesyłana w inny sposób niż znaki, przy znakach nie powtarzających się nie
przesyłamy bajtu ilości powtórzeń. Taki system pozwala zawsze skompresować dane, jeśli
zawierają powtórki. Przy danych różnorodnych nic nie tracimy.

Port ECP pozwala również na adresowanie kanałów, dzięki czemu komputer może komunikować się niezależnie z
różnymi urządzeniami logicznymi, które fizycznie znajdują się w jednej obudowie - np. urządzenia wielofunkcyjne
zawierające jednocześnie fax/modem, skaner i drukarkę. Adresowanie kanałów umożliwia komputerowi pobieranie
danych z modemu w czasie, gdy kanał drukarki jest zajęty przetwarzaniem i wydrukiem dokumentu. W trybie
kompatybilności CPP, gdy drukarka staje się zajęta przetwarzaniem danych, komunikacja z nią nie jest możliwa. W
trybie ECP komputer ma możliwość odwołania się do innego kanału i transmisja może odbywać się dalej.
Protokół ECP zmienia definicje sygnałów SPP, aby były bardziej spójne z regułami transmisyjnymi w tym trybie. W
poniższej tabeli zebraliśmy sygnały stosowane w trybie ECP.

Sygnał w Sygnał w
We/Wy Opis sygnałów w trybie ECP
trybie SPP trybie ECP
Używane wraz z PeriphAck do przesyłu danych lub adresu do urządzenia
STROBE HostClk Wy peryferyjnego.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 226 / 253


Bit w zastosowaniach - Centronics 2014-10-03

Udostępnia stan Rozkazu/Danych w transmisji do urządzenia. Używane z


AUTOFEED HostAck Wy PeriphClkdo przesyłu danych w kierunku odwrotnym.
SELECTIN 1284Active Wy Ustawione na 1, gdy komputer obsługuje tryb transmisji rozszerzonej.
Ustawiane na 0, aby przełączyć kanał na transmisję w odwrotnym
INIT ReverseRequest Wy
kierunku.
ACK PeriphClk We Używane wraz z HostAck do przesyłu danych w kierunku odwrotnym.

BUSY PeriphAck We Używane z HostClk d przesyłu danych lub adresu do urządzenia.. W


kierunku odwrotnym udostępnia stan Rozkazu/Danych.
PE AckReverse We Ustawiane na 0 w celu potwierdzenia dla ReverseRequest.
SELECT Xflag We Znacznik rozszerzenia.

ERROR PeriphRequest We Ustawiane na 0 przez urządzenia w celu poinformowania komputera o


dostępności danych zwrotnych.
Używane do przesyłu danych pomiędzy komputerem a urządzeniem
D0-D7 D0-D7 We/Wy
zewnętrznym.

Na obrazku poniżej przedstawiono cykle przesyłu informacji od komputera do urządzenia zewnętrznego. Gdy linia
HostAck jest ustawiona na 1, to przesyłane są dane. Gdy linia HostAck jest ustawiona na 0, komputer przesyła
rozkaz, który jest albo liczbą powtórzeń poprzednio przesłanego bajtu danych dla RLE, albo adresem kanału
urządzenia logicznego. Rozpoznanie umożliwia najstarszy bit D7. Jeśli ma on wartość 0, to bity D0-D6 zawierają
liczbę powtórzeń dla RLE (0-127). Jeśli bit D7 ma wartość 1, to bity D0-D6 określają numer kanału logicznego (0-
127). Na obrazku tym przedstawiono przesłanie bajtu danych, po którym następuje przesłanie rozkazu.

1. Komputer umieszcza dane na liniach D0-D7 oraz zaznacza cykl danych przez ustawienie na 1 linii HostAck.
2. Komputer ustawia linię HostClk na 0, aby zasygnalizować gotowość danych dla urządzenia peryferyjnego.
3. Urządzenie peryferyjne potwierdza gotowość do odczytu przez ustawienie linii PeriphAck na 1.
4. Komputer ustawia linię HostClk z powrotem na 1. W tym momencie urządzenie peryferyjne powinno odczytać
dane z linii D0-D7.
5. Urządzenie peryferyjne ustawia linię PeriphAck na 0, aby powiadomić komputer, że jest gotowe na przyjęcie
kolejnego bajtu danych.
6. Cykl się powtarza, jednakże tym razem będzie to cykl rozkazowy, ponieważ linia HostAck przyjmuje stan 0.

Kolejny rysunek przedstawia przesłanie danej i rozkazu w kierunku odwrotnym - od urządzenia peryferyjnego do
komputera.

1. Komputer żąda transmisji kanałem zwrotnym przez ustawienie linii ReverseRequest na 0.


2. Urządzenie peryferyjne potwierdza gotowość do transmisji zwrotnej przez ustawienie linii AckReverse na 0.
3. Urządzenie peryferyjne umieszcza dane na liniach D0-D7 i ustawia PeriphAck na 1, aby zaznaczyć cykl
danych.
4. Urządzenie ustawia linię PeriphClk na 0, aby zaznaczyć ważność danych na liniach D0-D7.
5. Komputer potwierdza ustawieniem HostAck na 1.
6. Urządzenie ustawia linię PeriphClk na 1. W tym momencie komputer powinien odczytać dane z linii D0-D7.
7. Komputer ustawia linię HostAck na 0, aby zgłosić gotowość przyjęcia kolejnej danej.
8. Cykl się powtarza, lecz tym razem będzie to cykl rozkazu, ponieważ urządzenie zewnętrzne ustawiło linię
PeriphAck na 0.

Powyższy opis nie wyczerpuje wszystkich cech trybu ECP. Niestety, ilość informacji jest tutaj dosyć obszerna i
zainteresowanych muszę odesłać do bardziej szczegółowej literatury.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 227 / 253


Bit w zastosowaniach - Centronics 2014-10-03

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0049.php 228 / 253


Bit w zastosowaniach - RS-232 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Sterowanie za pomocą bitów


RS-232 - port szeregowy
Bramki logiczne Centronics
Cyfrowe układy scalone TTL i CMOS RS-232
Zasilanie układów TTL i CMOS PS/2
Zjawisko hazardu w sieciach logicznych USB
Przerzutniki
Pamięć
Wejście / wyjście
Słowo RS-232 pochodzi od nazwy angielskiej - Recommended Standard 232 (Polecany Standard 232). Odnosi się on do protokołu
transmisji szeregowej (ang. serial transmission), w której bity są przesyłane kolejno jeden po drugim. Już od ponad 20 lat port szeregowy RS-
232 jest stosowany w komputerach PC do podłączania różnych urządzeń - najczęściej modemów i drukarek. Obecnie staje się już przestarzały
(podobnie jak port Centronics) i jest systematycznie wypierany przez USB.

Podstawy portu RS-232


Dane są transmitowane tylko w jednym kierunku po danej linii transmisyjnej. Aby zatem zrealizować połączenie dwustronne
musimy posiadać dwie linie transmisyjne. Te dwie linie wraz z masą dają trzy linie, co jest minimalną, niezbędną konfiguracją tego
portu. Aby połączenie było bardziej stabilne, szczególnie na większych odległościach, port został wyposażony w
dodatkowe linie, które służą do przesyłania potwierdzeń odbioru danych. Zatem port RS-232 może składać się z
od 3 do 22 sygnałów i może pracować z szybkością od 100 bodów do 20 kilo bodów (1 kb = 1000 bitów na sekundę).
Standardowe prędkości transmisji to 2,4k, 9,6k i 19,2k. W użyciu są również wyższe prędkości transmisji - 38,4k i
57,6k, lecz standard ich nie pokrywa - mimo to mogą być stosowane. Kabel RS-232 może posiadać długość do
około 17 metrów.
Dane są transmitowane szeregowo (tzn. bit po bicie) w jednym kierunku po parze przewodów. Linia danych
wychodzących jest nazywana Tx (ang. transmission - nadawanie), natomiast linia danych wchodzących ma nazwę Rx
(ang. reception - odbiór). Najprostszy, dwukierunkowy system komunikacyjny wymaga tylko trzech linii: Tx, Rx i GND
(ang. ground - masa). Skrzyżowanie linii danych Tx i Rx pomiędzy dwoma systemami pozwala im się nawzajem
porozumiewać:

Każdy bajt może być wysłany w dowolnej chwili. Nie jest on synchronizowany z odbiornikiem - mówimy, że jest to szeregowa
transmisja asynchroniczna, w której nie ma sygnału zegarowego. Dlatego nadajnik i odbiornik muszą na obu końcach być
ustawione w dokładnie taki sam sposób, inaczej strumień bitów zostałby źle odczytany. Bity są wysyłane poprzez odpowiednie
ustawienie napięcia elektrycznego na linii Tx:

+ 12 V - transmitowany bit 0
- 12 V - transmitowany bit 1

Czas transmisji bitu zależy od ustalonej szybkości transmisji - ten parametr muszą zawsze wynegocjować urządzenie nadawcze z
odbiorczym. Gdy nic nie jest transmitowane, linia Tx jest utrzymywana w stanie -12V. Przed rozpoczęciem transmisji bajtu
wysyłany jest bit startowy o wartości 0 - linia Tx skacze do napięcia +12V. Bit ten nie wchodzi w skład transmitowanego bajtu.
Jego zadaniem jest poinformowanie odbiornika, że transmisja się rozpoczęła. Po bicie startu są wysyłane kolejne bity bajtu danych
- od najmłodszego do najstarszego. Liczba przesyłanych bitów zależy od wybranego rodzaju transmisji, może to być 5, 7 lub 8
bitów danych. Po przesłaniu bitów danych może być przesyłany bit parzystości lub nieparzystości:

bit parzystości ma wartość 0, gdy liczba bitów 1 w danych jest parzysta, lub 1, gdy liczba bitów 1 w danych jest
nieparzysta:
00111010 0
00101010 1
bit nieparzystości ma wartość 0, gdy liczba bitów 1 w danych jest nieparzysta, lub 1, gdy liczba bitów 1 w danych jest
parzysta
00111010 1
00101010 0

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0050.php 229 / 253


Bit w zastosowaniach - RS-232 2014-10-03

Na końcu transmisji bajtu przesyłany jest przynajmniej jeden bit stopu o wartości 1 - linia Tx przechodzi w stan -12V, w którym
może pozostać, jeśli transmisja danych się zakończyła.
Poniższy rysunek przedstawia transmisję na linii Tx znaku K o kodzie 7510 = 010010112. Do 8 bitów został dodany bit parzystości
0. W sumie przesyłane są kolejno bity 110100100 - od najmłodszego b0 do najstarszego b7 + bit parzystości bp.

Odstęp czasu pomiędzy poszczególnymi bitami jest dla odbiornika bardzo ważny i musi być utrzymywany. To na jego podstawie
odbiornik próbkuje stan swojej linii Rx w połowie okresu przesyłania bitu. Odstęp ten zależy od wybranej szybkości transmisji. Na
przykład dla 19200 bodów czas transmisji pojedynczego bitu to:

tbit = 1 sekunda / 19200 = 0,000052 sek = 52 µs

Aby obliczyć szybkość transmisji portu RS-232 w bajtach, należy wziąć pod uwagę kilka czynników:
na początku transmisji musi wystąpić bit startu
sprawdzanie parzystości lub nieparzystości dodaje do przesyłanych bitów jeden dodatkowy bit
na końcu transmisji może być wymagane 1 lub dwa bity stopu

Załóżmy, że szybkość transmisji wynosi 19200 bodów (bitów na sekundę). Transmisja odbywa się bez bitu parzystości oraz z
jednym bitem stopu. Zatem przesłanie pojedynczego bajtu wymaga przesłania 10 bitów: 1 bit startu, 8 bitów danych oraz 1 bit
stopu. Otrzymujemy:

19200 / 10 = 1920 bajtów na sekundę

Teraz załóżmy, iż w transmisji wykorzystujemy bit parzystości/nieparzystości. Liczba transmitowanych bitów wzrasta do 11.
Zatem

19200 / 11 = 1745 bajtów na sekundę

Jeśli w transmisji dodatkowo wymagane są dwa bity stopu przed rozpoczęciem kolejnej transmisji, to liczba przesyłanych bajtów
wzrasta do 12 i otrzymujemy:

19200 / 12 = 1600 bajtów na sekundę

Złącze RS-232
Komunikacja poprzez złącze RS-232 odbywa się najczęściej pomiędzy terminalem a modemem. Terminal jest urządzeniem
aktywnym, które tworzy i przyjmuje dane. W terminologii telekomunikacyjnej oznacza się go skrótem DTE (ang. Data Terminal
Equipment). W naszym przypadku terminalem jest komputer PC lub stacja robocza. Modem jest urządzeniem komunikacyjnym i
oznacza się go skrótem DCE (ang. Data Communication Equipment). Modem jest urządzeniem biernym, podporządkowanym
terminalowi. Rozróżnienie to jest istotne z tego powodu, iż sygnały w porcie RS-232 są oznaczane z punktu widzenia urządzenia
DTE. Na przykład linia TxD (ang. transmitted data) na urządzeniu DTE jest wyjściem danych, a na urządzeniu DCE jest wejściem
danych. Z kolei linia RxD (ang. received data) jest na urządzeniu DTE wejściem danych, a na urządzeniu DCE wyjściem.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0050.php 230 / 253


Bit w zastosowaniach - RS-232 2014-10-03

Jak sprawdzić, czy nasz port RS-232 jest w trybie DTE? Wystarczy zmierzyć napięcie na końcówce TxD. Dla DTE powinno
wynosić około -12V (stan nieaktywny). W przypadku DCE końcówka ta jest wejściem i nie produkuje napięcia - zmierzone
napięcie będzie w granicach 0V. Nie polecam tej operacji osobom początkującym - łatwo można coś uszkodzić w komputerze -
OSTRZEGŁEM!
Złącze RS-232 pierwotnie zaprojektowano dla wtyku i gniazda 25 końcówkowego DB25. W standardzie uwzględniony został drugi
kanał komunikacyjny. W praktyce jednak stosuje się pojedynczy kanał wraz z jego sygnałami potwierdzeń. Na komputerach
osobistych PC stosowana jest wersja 9 końcówkowa DB9 i nią się tutaj głównie zajmiemy. Po stronie komputera stosuje się
wtyczki DB9 typu male (męskie) z bolcami. Kable posiadają wtyki DB9 female (żeńskie) z otworami na wtyki. Numerki
wtyku/otworu są zwykle umieszczane na wtyczce - czasami należy posłużyć się lupą, aby je poprawnie odczytać.

Gniazdo DB25 Female Wtyczka DB25 Male

Gniazdo DB9 Male Wtyczka DB9 Female

RS-232 DB25
1. FGND (Frame Ground) - wspólna masa
2. TxD (Transmit Data) - wysyłane dane
3. RxD (Receive Data) - odbierane dane
4. RTS (Request To Send) - żądanie wysłania danych
5. CTS (Clear To Send) - gotowość na przyjęcie danych
6. DSR (Data Set Ready) - zestaw danych gotowy
7. SGND (Signal Ground) - masa sygnałowa
8. CD (Carrier Detect) - wykrycie sygnału nośnego
12. SDCD (Secondary Carrier Detect)
- wykrycie sygnału nośnego w drugim kanale
13. SCTS (Secondary Clear to Send)- gotowość na przyjęcie danych w drugim kanale
14. STxD (Secondary Transmit Data)- wysyłane dane w drugim kanale
15. TCLK (Transmit Clock) - nadawczy sygnał zegarowy dla transmisji
synchronicznej
16. SRxD (Secondary Receive Data) - odbierane dane w drugim kanale
17. RCLK (Receive Clock) - odbiorczy sygnał zegarowy dla transmisji
synchronicznej
19. SRTS (Secondary Request To - żądanie wysłania danych w drugim kanale
Send)
20. DTR (Data Terminal Ready) - gotowość terminalu
21. RL/SQ (Signal Quality detector) - czujnik jakości sygnału
22. RI (Ring Indicator) - wskaźnik dzwonka dla modemu telefonicznego
23. CH/CI (Signal Rate Selector) - wybór szybkości sygnału
24. ACLK (Auxiliary Clock) - zegar pomocniczy dla drugiego kanału

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0050.php 231 / 253


Bit w zastosowaniach - RS-232 2014-10-03

RS-232 DB9
1. CD (Carrier Detect) - wykrycie sygnału nośnego
2. RxD (Receive Data) - odbierane dane
3. TxD (Transmit Data) - wysyłane dane
4. DTR (Data Terminal Ready) - gotowość terminalu
5. SGND (Signal Ground) - masa sygnałowa
6. DSR (Data Set Ready) - zestaw danych gotowy
7. RTS (Request To Send) - żądanie wysłania danych
8. CTS (Clear To Send) - gotowość na przyjęcie danych
9. RI (Ring Indicator) - wskaźnik dzwonka dla modemu telefonicznego
FGND (Frame Ground) - wspólna masa

Wtyczka testowa RS232 z pętlą zwrotną


Poniższe połączenie złącza RS-232 female (żeńskie) może być stosowane do testów portu szeregowego na twoim
komputerze. Linie danych i potwierdzeń zostały połączone. W ten sposób wysyłane dane trafią natychmiast z
powrotem do portu. Test można wykonać za pomocą standardowego oprogramowania komunikacyjnego.

Druga wersja umożliwia pełne przetestowanie portu RS-232 za pomocą programów diagnozujących - np. Norton
Diagnostics lub Chekit.

Testowanie odbywa się w kilku krokach. Dane zostają wysłane przez linię TxD, a odebrana informacja z linii RxD jest
następnie porównywana z danymi wysłanymi. Zaletą drugiej wersji jest możliwość przetestowania linii RI, która służy
do reakcji na sygnał dzwonka w modemie telefonicznym, który pojawia się przy próbie nawiązania połączenia
zewnętrznego.

Kable modemu zerowego RS-232


Najprostszym sposobem połączenia ze sobą dwóch komputerów PC przez złącze RS-232 jest wykorzystanie tzw.
kabla modemu zerowego (ang. null modem cable). Nazwa pochodzi stąd, iż fizycznie w tym połączeniu nie
występuje żaden modem - wystarczają same kable. Najprostsze połączenie wymaga jedynie trzech linii: TxD, RxD
oraz GND. Nie są używane sygnały potwierdzające.

Złącze 1 Złącze 2 Funkcja


2 3 Rx ← Tx
3 2 Tx → Rx
5 5 Masa sygnałowa

Jeśli oprogramowanie komunikacyjne wymaga obecności sygnałów potwierdzających, można zastosować poniższy
kabel modemu zerowego, w którym zostały zapętlone sygnały potwierdzeń. Zaletą jest stosowanie tylko trzech
przewodów do transmisji danych.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0050.php 232 / 253


Bit w zastosowaniach - RS-232 2014-10-03

Złącze 1 Złącze 2 Funkcja


2 3 Rx ← Tx
3 2 Tx → Rx
5 5 Masa sygnałowa
1+4+6 - DTR → CD + DSR
- 1 + 4 + 6 DTR → CD + DSR
7+8 - RTS → CTS
- 7+8 RTS → CTS

Kolejny kabel tworzy modem zerowy z częściowym potwierdzeniem transmisji.

Złącze 1 Złącze 2 Funkcja


1 7+8 RTS2 → CTS2 + CD1
2 3 RxD ← TxD
3 2 TxD → RxD
4 6 DTR → DSR
5 5 Masa sygnałowa
6 4 DSR ← DTR
7+8 1 RTS1 → CTS1 + CD2

I na koniec kabel modemu zerowego ze wszystkimi sygnałami potwierdzającymi.

Złącze 1 Złącze 2 Funkcja


2 3 RxD ← TxD
3 2 TxD → RxD
4 6 DTR → DSR
5 5 Masa sygnałowa
6 4 DSR ← DTR
7 8 RTS → CTS
8 7 CTS ← RTS

List do administratora Serwisu Edukacyjnego I LO

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0050.php 233 / 253


Bit w zastosowaniach - RS-232 2014-10-03

Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0050.php 234 / 253


Bit w zastosowaniach - PS/2 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Sterowanie za pomocą bitów


PS/2 - port myszki i klawiatury
Bramki logiczne Centronics
Cyfrowe układy scalone TTL i CMOS RS-232
Zasilanie układów TTL i CMOS PS/2
Zjawisko hazardu w sieciach logicznych USB
Przerzutniki
Pamięć
Wejście / wyjście

Nazwa PS/2 pochodzi od angielskich słów Personal System/2, które wprowadziła firma IBM w roku 1987 dla swojej nowej serii komputerów
osobistych. Komputery te były następcami wcześniejszych serii XT i AT. Wyposażono je w nowe możliwości graficzne oraz szybsze procesory.
Jedną z innowacji było zastąpienie starego gniazda klawiatury RS-232 nowym portem PS/2, który umożliwiał podłączenie do komputera
klawiatur oraz myszek.

Gniazda PS/2 w obudowie


Wtyczka PS/2 komputera IBM PC

Obecnie standard ten jest wypierany przez USB, który w niedalekiej przyszłości prawdopodobnie przejmie obsługę transmisji do wszelkich
urządzeń zewnętrznych. Poniżej przedstawiamy gniazdo PS/2 oraz opisy sygnałów:

Wtyk 1 DATA - dane


Wtyk 2 N/C - niepołączone
Wtyk 3 GND - masa
Wtyk 4 Vcc - napięcie stałe +5 V, maksymalny prąd 275 mA
Wtyk 5 CLK - takty zegarowe
mini DIN-6
PS/2 Wtyk 6 N/C - niepodłączone

Obecnie używa się kolorowych wtyczek i gniazd do identyfikacji połączonych z nimi urządzeń. Klawiatura stosuje kolor fioletowy, a myszka
zielony. W starszych modelach komputerów IBM-PC można było spotkać 5-cio wtykowe gniazda PS/2. Sygnały w obu są identyczne, co
umożliwia stosowanie prostych przejściówek. Inne jest tylko przypisanie sygnałów stykom.

Wtyk 1 CLK - takty zegarowe


Wtyk 2 DATA - dane
Wtyk 3 N/C - niepodłączone
Wtyk 4 GND - masa
Wtyk 5 Vcc - napięcie stałe +5 V, maksymalny prąd 275 mA
DIN-5
XT/AT

Do komunikacji z komputerem IBM-PC myszka z klawiaturą PS/2 stosują dwukierunkową, synchroniczną transmisję szeregową. Transmisja
odbywa się po magistrali zbudowanej z dwóch linii sygnałowych:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0051.php 235 / 253


Bit w zastosowaniach - PS/2 2014-10-03

CLK - takty zegarowe, które wyznaczają okresy odczytywania bitów z drugiej linii DATA
DATA - transmitowane bity danych

Linie CLK i DATA są dwukierunkowe - podłączone do kontrolerów w klawiaturze i myszce za pomocą złącz typu OE (ang. Open Collector).

Wyjście złącza OC można zwierać do masy. Dzięki temu łatwo realizuje się za jego pomocą magistrale dwukierunkowe. Jeśli sygnały
wyjściowe DATA i CLK są nieaktywne, to tranzystory znajdują się w stanie wysokiej impedancji pomiędzy złączem emitera i kolektora i napięcie
na wyjściach jest podciągane przez rezystory R do + 5V. Jeśli któryś z sygnałów staje się aktywny, to otwiera on odpowiedni tranzystor i
napięcie na wyjściu spada prawie do 0V (około 0,2V), ponieważ wyjście zostaje zwarte do masy poprzez otwarte złącze emiter-kolektor
tranzystora. Stan linii jest odczytywany poprzez wzmacniacze i trafia na wejścia kontrolera.
Magistrala jest w stanie bezczynnym, gdy obie linie DATA i CLK są w stanie wysokim - 5V. Tylko w takim stanie myszka i klawiatura może
rozpocząć swoją transmisję. Komputer posiada całkowitą kontrolę nad magistralą i w każdej chwili wolno mu zablokować transmisję przez
ustawienie linii CLK na 0V (zwarcie do masy na złączu OC po stronie komputera).
Sygnał zegarowy zawsze dostarcza urządzenie zewnętrzne (myszka lub klawiatura). Jeśli komputer chce wysłać swoje dane, to najpierw blokuje
transmisję z urządzeniem przez ustawienie linii CLK w stan niski. Następnie wymusza stan niski na linii DATA i zwalnia linię CLK. Jest to stan
"żądania odczytu danych", który informuje urządzenie zewnętrzne, że musi rozpocząć generację impulsów zegarowych i odczytywać kolejne
bity z linii DATA.

Stany magistrali
DATA CLK Stan
+5V +5V bezczynna
+5V 0V blokada transmisji
0V +5V żądanie przesłania danych od komputera do urządzenia

Dane są przesyłane w porcjach po jednym bajcie. Każdy bajt przesyłany jest jako 11-12 bitów. Ich znaczenie jest następujące:

1 bit startowy - ma zawsze wartość 0.


8 bitów danych, jako pierwszy przesyłany jest najmłodszy bit
1 bit nieparzystości
1 bit stopu - zawsze ma wartość 1
1 bit potwierdzenia

Bit nieparzystości (ang. odd parity) jest ustawiany na 1, gdy w przesyłanym słowie występuje parzysta liczba bitów o stanie 1, w przeciwnym
razie jest zerowany. Zatem liczba jedynek w bajcie danych plus bit nieparzystości jest zawsze nieparzysta. Bit nieparzystości pozwala
wykrywać błąd w transmisji. Myszka i klawiatura musi sprawdzać stan tego bitu w stosunku do odebranych danych. Jeśli będzie on niezgodny z
danymi, to odpowiedź urządzenia powinna być taka, jakby otrzymało nieprawidłowe polecenie.
Po bicie stopu urządzenie potwierdza odbiór danych ustawiając stan niski na linii DATA przez okres jednego taktu, po czym linia DATA i CLK
przechodzą w stan wysoki - magistrala bezczynna.
Poniższy rysunek przedstawia transmisję od komputera do urządzenia. Czerwone linie przerywane oznaczają moment odczytu danych z linii
DATA.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0051.php 236 / 253


Bit w zastosowaniach - PS/2 2014-10-03

Dane przesyłane od urządzenia do komputera są odczytywane na opadającym zboczu sygnału zegarowego, natomiast dane od komputera do
urządzenia są odczytywane na narastającym zboczu. Częstotliwość taktów zegarowych musi mieścić się w zakresie od 10kHz do 16,7kHz.
Oznacza to, iż w stanie wysokim sygnał zegarowy znajduje się od 30 do 50 µs i tyleż samo w stanie niskim. Stan linii DATA może się zmieniać
w połowie impulsu zegarowego - w czasie od 15 do 25 µs po wystąpieniu zbocza opadającego lub narastającego.
Gdy klawiatura lub myszka chce przesłać informację do komputera, najpierw sprawdza linię CLK, aby się upewnić, że jest ona w stanie
wysokim. Jeśli nie, to komputer blokuje transmisję i urządzenie musi zapisać w tymczasowym buforze dane, które chciało przesłać. Linia CLK
musi znaleźć się w stanie wysokim przez co najmniej 50 µs, zanim urządzenie będzie mogło przesłać swoje dane. Urządzenie sprawdza linię
CLK co około 10 µs.
Dane są przesyłane identycznie jak opisano powyżej - nie występuje tylko ostatni bit potwierdzenia - komputer jest urządzeniem nadrzędnym i w
przypadku błędu on podejmuje decyzję, co należy zrobić, dlatego potwierdzenie nie jest konieczne.. Poniższy rysunek przedstawia transmisję
od urządzenia do komputera.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0051.php 237 / 253


Bit w zastosowaniach - USB 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1Materiały pochodzą z Wikipedii oraz witryny How Stuff Works

Sterowanie za pomocą bitów


USB - Uniwersalna Magistrala Szeregowa
Bramki logiczne Centronics
Cyfrowe układy scalone TTL i CMOS RS-232
Zasilanie układów TTL i CMOS PS/2
Zjawisko hazardu w sieciach logicznych USB
Przerzutniki
Pamięć
Wejście / wyjście

Informacje wstępne
Nazwa USB pochodzi od angielskiego terminu Universal Serial Bus - Uniwersalna Magistrala Szeregowa. Każdy współczesny
komputer osobisty jest wyposażony w porty USB, dzięki którym mozna do niego podłączać zewnętrzne urządzenia takie jak
klawiatury, myszki, joysticki, drukarki, modemy, pendrive'y itp. USB nadaje tym urządzeniom jakby wspólny standard współpracy
z komputerem i jest rozwiązaniem jak najbardziej przyszłościowym. Dlatego warto poznać zasady pracy USB.
Podłączanie urządzenia USB do komputera jest bardzo proste - wystarczy znaleźć gniazdo USB (większość komputerów ma je z
przodu obudowy, jedynie starsze modele posiadają gniazda USB z tyłu - w takim przypadku dobrze jest się zaopatrzyć w kabel
przedłużający USB) i włożyć weń wtyczkę USB. Jeśli urządzenie USB jest podłączane po raz pierwszy, to system operacyjny
automatycznie wykrywa je i instaluje odpowiednie oprogramowanie (dla niektórych urządzeń w trakcie tego procesu może być
potrzebny dysk ze sterownikami od producenta, jednakże większość zostanie rozpoznana i zainstalowana automatycznie). Jeśli
urządzenie jest już zainstalowane w systemie, komputer aktywuje je i rozpocznie z nim wymianę danych. Urządzenia USB można
podłączać do komputera i odłączać od niego w dowolnym momencie w trakcie pracy.

Gniazdo USB-A Gniazdo USB-B Pendrive z wtyczką USB-A Gniazdko mini USB

Wtyczka USB-A Wtyczka USB-B Zewnętrzny dysk twardy USB-A Wtyczka mini USB

Duża ilość urządzeń USB wyposażona jest we własny, wbudowany kabel USB z wtyczką typu USB-A. Takie urządzenie można
bezpośrednio podłączyć do gniazdka USB w komputerze. Jeśli urządzenie nie posiada własnego kabla USB, to najczęściej
wyposażone jest w gniazdo USB-B na kwadratową wtyczkę - tak jest przykładowo u drukarek.
Standard USB wykorzystuje dwa rodzaje wtyczek "A" i "B", aby uniknąć zamieszania. Wtyczki typu A służą do podłączania
urządzeń USB w kierunku do komputera, natomiast wtyczki typu "B" są przeznaczone do podłączania w kierunku odwrotnym - od
komputera do urządzenia, a zatem do podłączania urządzeń końcowych. Dzięki temu nie zrobisz pomyłki - jeśli podłączysz kabel
z wtyczką USB-B do danego urządzenia, to będziesz miał pewność, że połączenie to będzie działać. Podobnie możesz włożyć
wtyczkę USB-A do dowolnego gniazdka USB-A i również będzie to działało.

Koncentratory USB
Większość kupowanych dzisiaj komputerów posiada przynajmniej jedno gniazdko USB (komputery stacjonarne zwykle posiadają
ich sześć - 2 z przodu obudowy i 4 z tyłu). Gniazdka USB łatwo jest wyczerpać - wystarczy podłączyć do nich takie urządzenia
USB jak myszka, klawiatura, joystick, kamera, drukarka, mikrofon i już nie ma gdzie włożyć pendrive'a. Problem ten można
rozwiązać na kilka sposobów: odłączyć jedno z urządzeń (niezbyt dobre rozwiązanie), dokupić dodatkową kartę z portami USB
(wymaga umiejętności montażu lub usługi w serwisie) lub zakupić zewnętrzny koncentrator USB - tzw. hub USB (niezbyt duży
koszt). Standard USB przewiduje podłączenie maksymalnie 127 urządzeń, a koncentratory USB są częścią tego standardu.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0052.php 238 / 253


Bit w zastosowaniach - USB 2014-10-03

Koncentratory USB

Typowy hub USB posiada 4 porty typu USB-A - liczba dostępnych portów może być większa. Koncentrator podłącza się do
gniazda w komputerze, a pozostałe urządzenia USB (lub dalsze koncentratory) podłącza się do portów w koncentratorze. Poprzez
łączenie ze sobą koncentratorów można stworzyć dziesiątki portów USB współpracujących z pojedynczym komputerem.
Koncentratory mogą być zasilane lub pasywne. Standard USB umożliwia urządzeniom pobieranie prądu ze złącza USB.
Urządzenia o dużym zapotrzebowaniu na prąd (drukarka, skaner) posiadają swój własny zasilacz, lecz urządzenia o niskiej mocy
(myszki, kamery cyfrowe) pobierają prąd z magistrali USB, co upraszcza ich konstrukcję. Zasilanie (do 500 mA przy 5V dla USB
2.0 i do 900 mA dla USB 3.0) pochodzi od zasilacza wewnątrz komputera. Jeśli podłączone urządzenia posiadają własne
zasilanie, to koncentrator nie musi mieć osobnego zasilania, gdyż żadne z korzystających z niego urządzeń nie wymaga
dodatkowego zasilania przez USB, więc komputer może sobie z nimi poradzić. Jednak w przypadku, gdy używane urządzenia nie
posiadają swojego własnego zasilania (myszki, kamery, joysticki), to prawdopodobnie będzie potrzebny koncentrator z osobnym
zasilaniem. Wtedy zasilanie tych urządzeń przejmuje koncentrator i komputer nie jest obciążany.
Gdy główny sterownik USB startuje, odpytuje wszystkie urządzenia podłączone do magistrali i przydziela każdemu z nich pewien
adres. Proces ten nazywa się wyliczaniem - urządzenia również są wyliczane, gdy podłącza się je później do magistrali. Z
każdego urządzenia komputer odczytuje tryb używanego przez nie przesyłu danych:

Tryb Przerywany (ang. Interrupt Mode) jest używany przez urządzenia takie jak myszka lub klawiatura, które przesyłają
bardzo niewiele danych.
Tryb Masowy (ang. Bulk Mode) jest przeznaczony dla urządzeń takich jak drukarki, które pobierają dane w jednym dużym
pakiecie. Blok danych jest przesyłany w kawałkach 64 bajtowych z potwierdzeniem odbioru.
Tryb Równoczesny (ang. Isochronous Mode) jest przeznaczony dla urządzeń strumieniowych, jak głośniki. Dane są
przesyłane w czasie rzeczywistym pomiędzy komputerem a urządzeniem bez sprawdzania poprawności odbioru.

Sterownik USB może również przesyłać za pomocą pakietów sterujących rozkazy oraz zapytania z parametrami.
Po wyliczeniu urządzeń sterownik USB zapamiętuje całkowitą przepustowość wymaganą przez wszystkie urządzenia pracujące w
trybie równoczesnym lub przerywanym. Są one w stanie skonsumować nawet do 90% przepustowości 480 Mbps (milionów bitów
na sekundę), która jest dostępna dla USB 2.0 (USB 3.0 zwiększa tę prędkość do 4,8 Gbps - miliardów bitów na sekundę). Gdy
zostaje zużyte 90% przepustowości, sterownik odmawia transmisji wszystkim pozostałym urządzeniom pracującym w trybie
równoczesnym lub przerywanym. Pakiety sterujące oraz przesłania typu masowego używają pozostałą przepustowość magistrali
USB (co najmniej 10%).
Magistrala USB dzieli dostępną przepustowość na ramki, które kontroluje sterownik. Ramki zawierają po 1500 bajtów i są
wysyłane co 1 milisekundę. Podczas ramki dostęp do magistrali otrzymują urządzenia pracujące w trybie przerywanym lub
równoczesnym, co gwarantuje im wymaganą przepustowość. Przesyły masowe i sterujące używają tego, co pozostanie z
przepustowości.

Cechy USB

Złącze Nazwa Kolor Opis


1 Vcc Czerwony +5V
2 D- Biały Dane-
3 D+ Zielony Dane+
4 GND Czarny Masa

Przewody w kablu USB 2.0 Oznaczenia złączy USB Funkcje przewodów USB

Uniwersalna magistrala szeregowa posiada następujące cechy:

Sterownik USB jest realizowany przez komputer.


Do magistrali można podłączyć do 127 urządzeń - albo bezpośrednio, albo poprzez koncentratory USB.
Pojedyncze kable USB mogą mieć długość do 5 metrów: za pomocą koncentratorów długość ta może zostać zwiększona
do 30 metrów (sześć odcinków kabla) od komputera.
W standardzie USB 2.0 magistrala może przesyłać dane z maksymalną prędkością 480 megabitów na sekundę.
Kabel USB 2.0 zawiera dwa przewody zasilania (+5 V oraz masa) i skręconą parę przewodów przesyłających dane.
Standard USB 3.0 dodaje cztery dalsze przewody do transmisji danych. Gdy USB 2.0 może przesyłać dane tylko w jednym

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0052.php 239 / 253


Bit w zastosowaniach - USB 2014-10-03

kierunku naraz (do komputera lub od komputera), to USB 3.0 potrafi transmitować dane jednocześnie w obu kierunkach.
Przewodami zasilania komputer może dostarczać prądu 500 mA przy napięciu 5V. Kabel USB 3.0 potrafi dostarczyć prądu
900 mA.
Urządzenia o niskim zapotrzebowaniu na energię (takie jak myszka) mogą pobierać zasilanie bezpośrednio z magistrali.
Urządzenia o dużej konsumpcji mocy (drukarki) muszą posiadać własne źródło zasilania, a z magistrali pobierać jedynie
minimalny prąd. Koncentratory USB mogą być wyposażone we własne zasilanie, aby dostarczać prądu urządzeniom
podłączonym do nich.
Urządzenia USB można podłączać i odłączać od magistrali USB w dowolnym momencie. Kabel USB 3.0 jest kompatybilny
z portami USB 2.0 - tzn. nie zostanie osiągnięta taka szybkość transmisji jak w porcie USB 3.0, jednakże dane i zasilanie
będą mogły być przesyłane przez taki kabel.
Wiele urządzeń USB może zostać uśpionych przez komputer, gdy on sam wejdzie w stan uśpienia w celu oszczędzania
energii.
Urządzenia USB polegają na zasilaniu i danych przekazywanych przez kabel USB.

USB 2.0 i USB 3.0


Standard USB 2.0 został wprowadzony w kwietniu 2000 r. i służy jako unowocześnienie wcześniejszego standardu USB 1.1.
USB 2.0 (ang. High-speed USB - USB o dużej szybkości) udostępnia dodatkową przepustowość dla aplikacji multimedialnych oraz
przechowywania danych i ma szybkość transmisji 40 razy większą od USB 1,1. Aby umożliwić płynne przejście zarówno
użytkownikom jak i producentom, USB 2.0 posiada pełną kompatybilność z wcześniejszymi urządzeniami USB oraz pracuje
również z kablami i złączami przeznaczonymi dla oryginalnego USB.
Obsługując trzy tryby prędkości (1,5, 12 i 480 megabitów na sekundę), USB 2.0 wspiera urządzenia o niskiej szybkości transmisji,
takie jak klawiatury i myszki, oraz również urządzenia o dużej szybkości transmisji, jak kamery sieciowe o wysokiej
rozdzielczości, skanery, drukarki i dyski twarde o dużej pojemności. Pojawienie się standardu USB 2.0 pozwoliło firmom
przodującym na rynku komputerów osobistych rozwinąć urządzenia peryferyjne, które uzupełniają istniejące komputery osobiste o
dużej wydajności.
Standard USB 3.0 (ang. SuperSpeed USB - USB o super prędkości) stał się oficjalny 17 października 2008 roku. USB 3.0 podbija
prędkość transmisji 10 razy w stosunku do USB 2.0 - 4,8 gigabitów na sekundę. Został zaprojektowany z myślą o takich
zastosowaniach jak przesył filmów o wysokiej rozdzielczości lub archiwizacja całego dysku twardego na zewnętrznym urządzeniu.
Gdy rośnie pojemność dysków twardych, rośnie również zapotrzebowanie na szybki przesył danych.
Standard USB 3.0 przyjmował się raczej wolno. Wytwórcy układów scalonych musieli opracować układy dla płyt głównych (ang.
mother board - płyta bazowa komputera), które wspierają USB 3.0. Właściciele komputerów mają możliwość zakupu kart, które po
zainstalowaniu w komputerze udostępniają obsługę standardu USB 3.0. Lecz wsparcie sprzętowe stanowi jedynie część problemu
- musi również istnieć wsparcie ze strony systemu operacyjnego. Microsoft wprowadza wewnętrzną obsługę standardu USB 3.0 w
swoim Windows 8. Inne systemy Microsoftu wymagają instalacji sterowników dostarczanych ze sprzętem. Ostatnie dystrybucje
systemu Linux zawierają wsparcie dla USB 3.0.

Symbole graficzne
Urządzenia współpracujące z USB posiadają różne symbole graficzne, z których użytkownik może wiele wywnioskować.

W ten sposób oznaczane są kable i gniazda USB. Symbol ten


nic nie mówi o rodzaju USB, jedynie że dane urządzenie
współpracuje z magistralą USB.

Na starszych urządzeniach możemy znaleźć inną wersję logo


USB.

Symbol USB 1.1

Urządzenia USB oznaczone zieloną strzałką u dołu mogą


wymieniać dane bez pośrednictwa komputera PC - np. cyfrowy
aparat fotograficzny może połączyć się z kolorową drukarką USB
i wydrukować na niej wybrane zdjęcia.

Symbol USB 2.0 - transfer danych do 480 megabitów na sekundę

USB 2.0 z technologią On-The-Go, czyli możliwość łączenia bez


komputera PC

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0052.php 240 / 253


Bit w zastosowaniach - USB 2014-10-03

USB 2.0 - radiowe. Urządzeń USB obsługujących tę opcję jest


bardzo niewiele.

USB 3.0 - transfer do 4,8 gigabitów na sekundę.

Opis protokołu transmisyjnego USB 2.0 jest bardzo skomplikowany - pełna specyfikacja zawiera ponad 650 stron. Dlatego
zainteresowanych tym standardem odsyłam do materiałów dostępnych w sieci Internet:
usb.org

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0052.php 241 / 253


Bit w zastosowaniach - Procesor 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Przetwarzanie bitów
Procesor
Bramki logiczne Architektura Johna Von Neumanna
Układy kombinatoryczne z bramek cyfrowych Budowa procesora
Przerzutniki Mikroprocesory
Rejestr
Pamięć
Wejście / wyjście

Zmorą dawnych naukowców i inżynierów było wykonywanie czasochłonnych obliczeń.


Nic więc dziwnego, iż wielu wynalazców próbowało zaradzić temu problemowi i
wynajdywało różne maszyny liczące. Początkowo były to urządzenia mechaniczne.
Ojcem współczesnych komputerów możemy śmiało nazwać angielskiego uczonego,
Charlesa Babagge'a (26-12-1791 - 18-10-1871). Wymyślił on urządzenie zwane maszyną
różnicową, które mechanicznie mogło tworzyć tablice (zbiory wartości) różnych funkcji
(logarytmów, trygonometrycznych). W trakcie prac nad tym urządzeniem Babbagge
wpadł na pomysł jeszcze lepszej maszyny - maszyny analitycznej, która miała posiadać
urządzenie obliczeniowe, pamięć, drukarkę oraz program w postaci kart perforowanych
Josepha Jacquarda, które wcześniej stosowano w mechanicznych krosnach. Maszyna
analityczna posiadała wiele cech współczesnych komputerów. Niestety, projekt nigdy nie
został ukończony, ponieważ Babagge wciąż zmieniał plany urządzenia i doszło do ostrej
Procesor Intel Pentium MMX kłótni z inżynierem, który wykonywał elementy mechaniczne. Po tym fakcie projekt
zarzucono, jednakże w roku 1910 syn wynalazcy, Henry Babagge, skonstruował część
tej maszyny - procesor - i w ten sposób udowodnił poprawność projektu swojego ojca. Gdyby maszyna analityczna powstała w XIX wieku, era
komputerów rozpoczęłaby się 100 lat wcześniej. Ciekawostką może być fakt, iż Charles Babagge utrzymywał kontakty listowne z Adą Lovelace,
córką lorda Byrona. Była ona matematyczką i pierwszą na świecie programistką - napisała program obliczania liczb Bernoulliego w języku
maszyny analitycznej Babagge'a. Na jej cześć nazwano język programowania ADA.
Drugim wynalazcą był niemiecki inżynier Konrad Zuse, który w 1936 roku skonstruował pierwszy komputer mechaniczny Z1. Komputer ten
składał się z takich samych bloków funkcjonalnych, jak współczesne komputery. Co ciekawe, procesor tego komputera potrafił wykonywać
działania na liczbach zmiennoprzecinkowych o formacie bardzo zbliżonym do tego, który stosują współczesne komputery IBM.
Procesor jest urządzeniem, które dokonuje przetwarzania danych na podstawie instrukcji zawartych w programie sterującym. Rozdział ten
przybliży czytelnikowi pojęcie procesora i sposób jego działania.
Zapraszam do lektury

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:

Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0053.php 242 / 253


Bit w zastosowaniach - Procesor 2014-10-03

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0053.php 243 / 253


Bit w zastosowaniach - Architektura Johna Von Neumanna 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Przetwarzanie bitów
Architektura Johna Von Neumana
Bramki logiczne Architektura Johna Von Neumanna
Układy kombinatoryczne z bramek cyfrowych Budowa procesora
Przerzutniki Mikroprocesory
Rejestr
Pamięć
Wejście / wyjście
Procesor
Każdy użyteczny komputer musi posiadać następujące elementy składowe:

Procesor jest elementem, który przetwarza dane - wykonuje obliczenia matematyczne i logiczne. Steruje on również przesyłem danych
pomiędzy pozostałymi składnikami komputera.
Operacje wykonywane przez procesor są określone programem. Program jest zbiorem instrukcji, które są kolejno przekazywane do procesora.
Każda instrukcja oznacza pojedynczą operację, którą procesor wykonuje. Wymieniając program, możemy rozwiązywać zupełnie inny problem.
Dzięki tej cesze komputer jest maszyną uniwersalną.
Pamięć przechowuje dane oraz wyniki obliczeń. Procesor może pobierać dane z pamięci i po przetworzeniu ich zapisywać je z powrotem do
pamięci.
Wejście umożliwia wprowadzanie danych do komputera.
Wyjście pozwala komputerowi wyprowadzać na zewnątrz informację przetworzoną.
Dostarczanie programu do procesora w pierwszych komputerach było zupełnie oddzielnym procesem. Najczęściej wykorzystywana była taśma
perforowana, która przesuwała się w specjalnym czytniku (ang. punched tape reader). Układ dziurek na taśmie określał operacje, które miał
wykonywać procesor. Np. Konrad Zuse stosował do tego celu stare taśmy filmowe. Dziurki wybijał na specjalnym urządzeniu. Taśmę można
było skleić końcami w pętlę i uzyskać obliczenia seryjne.

Czytnik taśmy dziurkowanej

Rozwiązanie takie posiadało kilka istotnych wad. Procesor mógł wykonywać tylko instrukcje dostarczane mu przez czytnik. W obliczeniach nie
można było w prosty sposób stosować rozgałęzień (tzn. stosowano różne sztuczki, np. pomijanie określonej liczby instrukcji, itp.). Zatem w

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0054.php 244 / 253


Bit w zastosowaniach - Architektura Johna Von Neumanna 2014-10-03

zasadzie pierwsze komputery były jedynie programowalnymi kalkulatorami i ich zestaw instrukcji ograniczał się zwykle do operacji
arytmetycznych i logicznych nad danymi, odczytu danych z wejścia i zapisu danych na wyjście.
W czasie II Wojny Światowej w USA realizowany był projekt komputera elektronicznego ENIAC (ang.
Electronic Numerical Integrator And Computer – Elektroniczny, Numeryczny Integrator i Komputer). Komputer
ten stosował wciąż starą architekturę - program realizowano za pomocą odpowiednich połączeń kablowych
pomiędzy blokami składowymi. Na Uniwersytecie Pensylwanii w USA, gdzie był konstruowany ENIAC,
pracował bardzo zdolny Węgier o nazwisku John Von Neumann. Stał się on autorem nowej na owe czasy
architektury komputerów, zwanej architekturą Von Neumanna. Polegała ona na tym, iż program komputera był
traktowany na równi z danymi i umieszczono go w pamięci, a nie w osobnym urządzeniu, jak dotychczas.

John Von Neumann

Dzięki tej zmianie program jest traktowany przez procesor jak zwykłe dane. Może on odczytywać go w dowolnym porządku, co umożliwia
realizację odgałęzień w algorytmie obliczeniowym oraz wykonywanie pętli (grupy instrukcji cyklicznie wykonywanych w programie). Dzięki temu
komputer jest w stanie reagować na różne przypadki, które mogą się pojawić w trakcie wykonywania obliczeń. Sposób działania komputera
może się dostosowywać do rodzaju przetwarzanych danych.
Przykład pseudoprogramu z rozgałęzieniem:

jeżeli A > 0, to
W = 1
skocz do K1
inaczej jeżeli A = 0, to
W = 0
skocz do K1
inaczej
W = -1
koniec jeżeli

K1: Pisz W
...
Program ten oblicza wartość funkcji SIGNUM, czyli znak A.

Co więcej, w pamięci można umieścić wiele programów i wykonywać je w różnej kolejności lub nawet jednocześnie (tzw. wielozadaniowość -
ang. multitasking). Tak działają współczesne systemy operacyjne komputerów.

Zainteresowanych tym tematem zapraszamy do artykułów:

PMC 1
PMC 2

Opisują one tzw. PMC - Przykładową Maszynę Cyfrową, czyli bardzo prosty komputer, którego procesor potrafi wykonać tylko 16 typów
instrukcji. Pomimo tego uproszczenia, PMC doskonale odwzorowuje działanie rzeczywistych komputerów i może być wykorzystywana do
wstępnej nauki programowania w języku asemblera. Również polecam artykuł o maszynie Turinga, którą omawia się na pierwszym roku studiów
informatycznych przy okazji problemu obliczalności. W artykule zamieściliśmy prosty symulator, na którym można przetestować wiele
ciekawych problemów związanych z maszyną Turinga.

Podsumowanie
W architekturze Johna Von Neumana mamy cztery elementy składowe komputera:
1. Procesor - pełni centralną funkcję w systemie, przetwarza dane. Jest sterowany programem zawartym w pamięci. Procesor sam
pobiera instrukcje, które ma wykonać. Dzięki temu może on wpływać na sposób wykonywania programu.
2. Pamięć - zawiera dane, wyniki obliczeń oraz program dla procesora. Dostęp do danych i programu odbywa się w podobny sposób.
Program może być wczytywany do komputera poprzez wejście i umieszczany w wybranym miejscu w pamięci.
3. Wejście - umożliwia odczyt danych do przetworzenia (również programu dla procesora).
4. Wyjście - umożliwia przesłanie danych przetworzonych przez komputer.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0054.php 245 / 253


Bit w zastosowaniach - Architektura Johna Von Neumanna 2014-10-03

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0054.php 246 / 253


Bit w zastosowaniach - Budowa procesora 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1

Przetwarzanie bitów
Budowa procesora
Bramki logiczne Architektura Johna Von Neumanna
Układy kombinatoryczne z bramek cyfrowych Budowa procesora
Przerzutniki Mikroprocesory
Rejestr
Pamięć
Wejście / wyjście
Procesor

Komunikacja procesora z resztą systemu komputerowego odbywa się za pomocą tzw. magistral. Magistrala jest zbiorem linii, po których
równolegle przebiegają sygnały. Jeśli sygnały mogą biegnąć tylko w jednym kierunku, to magistrala jest jednokierunkowa, jeśli w obu
kierunkach, to magistrala jest dwukierunkowa. W naszym przypadku będą to sygnały binarne. Wyróżniamy trzy rodzaje magistral:

1. Magistrala danych (ang. data bus) - przenosi dane pomiędzy procesorem a pamięcią i urządzeniami wejścia/wyjścia. Może pracować w
obu kierunkach - tzn. procesor może umieszczać na niej dane dla określonego urządzenia w systemie (dane biegną od procesora do
systemu) lub urządzenie może umieszczać na niej dane dla procesora (dane biegną z systemu do procesora). Takie rozwiązanie wymaga
zastosowania tzw. buforów trójstanowych, czyli bramek, które można wprowadzić w stan wysokiej impedancji wyjścia, dzięki czemu
odłączają one wewnętrzną magistralę od sygnałów zewnętrznych - w przeciwnym razie procesor mógłby zakłócać dane przesyłane do
niego z innych urządzeń w systemie.
2. Magistrala adresowa (ang. address bus) - przenosi adres dla układów pamięci lub dla urządzeń wejścia/wyjścia. W przypadku pamięci
adres ten określa numer komórki, z której procesor chce odczytać dane lub do której procesor chce dane zapisać. Dla urządzeń
wejścia/wyjścia adres określa numer urządzenia, z którym chce się skomunikować procesor. Magistrala adresowa również może
pracować w obu kierunkach - często urządzenia we/wy same pobierają lub zapisują dane w pamięci komputera stosując technologię
bezpośredniego dostępu do pamięci (ang. DMA - Direct Memory Access). Odciąża to procesor od zajmowania się taką transmisją - może
on w tym czasie wykonywać inne zadania.
3. Magistrala sterująca (ang. control bus) - przenosi sygnały sterujące pracą pozostałych składników w systemie oraz sygnały
informacyjne dla procesora (np. że dane z pamięci są już gotowe do odczytu z magistrali danych). Jednym z sygnałów na tej magistrali
jest sygnał taktowania. Procesor oraz pozostałe urządzenia w systemie wykonują działania zgodnie z sygnałami zegarowymi, które
nazywamy taktami. Umożliwia to synchronizację tych urządzeń. Szybkość zegara determinuje szybkość pracy procesora. Im większa
częstotliwość sygnału zegarowego, tym szybciej procesor przetwarza dane. Jednakże nie można tej częstotliwości dowolnie zwiększać -
układy elektroniczne tworzące sieć logiczną komputera posiadają określoną szybkość reakcji. Jeśli zegar będzie pracował zbyt szybko,
to nie zdążą się one ustabilizować i komputer przestanie po prostu poprawnie działać.

Sposób współpracy poszczególnych elementów składowych komputera jest następujący:

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0055.php 247 / 253


Bit w zastosowaniach - Budowa procesora 2014-10-03

Gdy procesor chce odczytać dane z pamięci lub z urządzenia wejścia, to postępuje następująco:

1. Umieszcza na magistrali adresowej adres komórki pamięci lub numer urządzenia we/wy.
2. Na magistrali sterującej umieszcza informację, że chce odczytać dane z pamięci lub z urządzenia we/wy.
3. Pamięć lub urządzenie wejścia umieszcza dane na magistrali danych.
4. Pamięć lub urządzenie wejścia umieszcza na magistrali sterującej informację, że dane są gotowe do odczytu z magistrali danych.
5. Procesor odczytuje dane z magistrali danych.
Podobnie wygląda zapis do pamięci lub do urządzenia wyjścia:

1. Procesor umieszcza dane na magistrali danych.


2. Procesor umieszcza adres komórki pamięci lub numer urządzenia wyjścia na magistrali adresowej.
3. Procesor umieszcza na magistrali sterującej informację, że chce zapisać dane do pamięci lub urządzenia we/wy.
4. Pamięć lub urządzenie wyjścia odczytują dane z magistrali danych. Pamięć umieszcza dane pod adresem odczytanym z magistrali
adresowej. Dla urządzeń wyjścia adres określa numer urządzenia, dla którego są przeznaczone dane.
5. Pamięć lub urządzenie wyjścia umieszczają na magistrali sterującej potwierdzenie odebrania danych.
Wewnętrznie procesor składa się z wielu bloków funkcjonalnych. Poniższy schemat prezentuje bardzo uproszczoną budowę wewnętrzną
procesora (rzeczywiste rozwiązania są wyposażane w wiele dodatkowych elementów, których omówienie wykracza poza ramy tego artykułu):

Działanie tych bloków omówimy na prostych przykładach.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0055.php 248 / 253


Bit w zastosowaniach - Budowa procesora 2014-10-03

Wykonywanie instrukcji
Instrukcja dla procesora jest kodem binarnym, który określa rodzaj operacji do wykonania. Ciąg instrukcji tworzy program dla
procesora. Instrukcje są umieszczane w komórkach pamięci. Do adresowania instrukcji w programie procesor używa specjalnego
rejestru zwanego licznikiem rozkazów lub licznikiem programu (ang. PC - program counter). Rejestr ten przechowuje adres
instrukcji do wykonania. Aby pobrać daną instrukcję, procesor przesyła zawartość rejestru PC na magistralę adresową i odczytuje
dane umieszczone pod tym adresem w pamięci do rejestru instrukcji (ang. IR - instruction register). Po pobraniu kodu instrukcji
rejestr licznika programu PC jest odpowiednio zwiększany i wskazuje kolejną instrukcję w pamięci programu (w ten sposób
pobierane są kolejne instrukcje w programie).
Po umieszczeniu instrukcji w rejestrze IR do pracy przystępuje dekoder instrukcji. Jest to bardzo skomplikowana sieć logiczna,
która analizuje odczytany rozkaz i na tej podstawie określa sekwencję mikrorozkazów, które należy wewnętrznie wykonać, aby
zrealizować pobraną instrukcję. Mikrorozkazy wykonuje blok sterowania (ang. CU - control Unit), wysyłając odpowiednie sygnały
sterujące do pozostałych bloków procesora.
Po zakończeniu wykonywania instrukcji cały cykl pobrania kolejnego rozkazu powtarza się.
Współczesne procesory pobierają rozkazy z pamięci zewnętrznej do tzw. kolejki rozkazowej (ang. instruction queue). Proces
ten jest zwykle niezależny od działania pozostałych elementów procesora i odbywa się równolegle z wykonywaniem innych
rozkazów. Takie rozwiązanie przyspiesza pracę procesora, ponieważ po zakończeniu danego rozkazu ma on gotowy kod
następnego w kolejce.

Jednostka arytmetyczno logiczna


Operacje arytmetyczne i logiczne są wykonywane przez tzw. jednostkę arytmetyczno logiczną (ang. ALU - arithmetic logic
unit). Jest to skomplikowana sieć logiczna, która potrafi wykonywać na dostarczonych danych operacje arytmetyczne (dodawanie,
odejmowanie, mnożenie, dzielenie, porównanie) oraz logiczne (alternatywa, koniunkcja, suma symetryczna, operacje przesuwu
bitów). Dane dla operacji mogą być pobierane z bloku rejestrów wewnętrznych lub z pamięci zewnętrznej albo z urządzeń
wejścia/wyjścia. Również wyniki tych operacji mogą trafić do rejestrów wewnętrznych lub pamięci/urządzeń we/wy. Pozwala to
realizować praktycznie dowolne algorytmy przetwarzania danych.
Blok rejestrów jest pamięcią wewnętrzną procesora. Powodów stosowania rejestrów wewnętrznych jest kilka. Przede wszystkim
są one wewnątrz procesora, zatem dostęp do przechowywanych w nich danych jest bardzo szybki. Drugim powodem jest to, iż
rejestrów jest zwykle niewiele i adresowanie nie wymaga wielu bitów, jak w przypadku pamięci zewnętrznej. Zatem kody instrukcji
działających na rejestrach mogą być krótkie (np. 1-bajtowe). Ponieważ w rejestrach można również przechowywać adresy,
rozwiązanie to jest bardzo wygodne.
Zwykle jeden z rejestrów posiada więcej funkcji niż pozostałe (nie jest to regułą) i nosi on nazwę akumulatora (ang. accumulator
register). Akumulator często jest jednym z argumentów operacji arytmetyczno-logicznych oraz miejscem umieszczania wyniku tej
operacji. Stąd właśnie pochodzi nazwa tego rejestru - akumuluje on jakby wyniki przetwarzania.
Współczesne procesory zawierają również jednostkę arytmetyki zmiennoprzecinkowej (ang. FPU - floating point unit). Potrafi
ona wykonywać sprzętowo (tzn. bardzo szybko) operacje na liczbach rzeczywistych oraz wyliczać wiele funkcji matematycznych
(pierwiastek, sinus, cosinus, tangens, logarytm, itp.).

Skoki, podprogramy i stos


Procesor często musi zmieniać kolejność wykonywanych instrukcji. Osiąga się to za pomocą tzw. rozkazów skoków. Rozkaz
skoku za kodem instrukcji zawiera adres, od którego procesor powinien kontynuować pobieranie kolejnych instrukcji. Adres ten
jest po prostu wpisywany do rejestru licznika programu. Po wykonaniu tej operacji kolejną instrukcję procesor pobierze spod
wskazanego adresu.

Kod instrukcji skoku Adres, pod który należy wykonać skok

W podobny sposób wykonywany jest skok do podprogramu. Jedyna różnica polega na tym, iż procesor zapamiętuje, skąd ten
skok nastąpił (tzn adres zaraz za instrukcją skoku do podprogramu). W podprogramie może być zawarta instrukcja powrotu, która
powoduje, iż ten zapamiętany wcześniej adres zostaje z powrotem umieszczony w rejestrze licznika rozkazów i program
kontynuuje się od następnej instrukcji za instrukcją skoku do podprogramu. Pozwala to wielokrotnie wykorzystywać często
używane fragmenty kodu w różnych miejscach programu - piszemy tzw. podprogram, czyli ciąg instrukcji zakończony instrukcją
powrotu z podprogramu, a następnie skaczemy do niego z różnych miejsc w programie za pomocą instrukcji skoku do
podprogramu. Stosowanie podprogramów często skraca długość programu i upraszcza go.
Adres powrotu zapamiętywany jest na tzw. stosie maszynowym (ang. machine stack). Jest to obszar pamięci adresowany przez
rejestr wskaźnika stosu (ang. SP - stack pointer). Stos zwykle rośnie w dół pamięci. Zapis na stos jest wykonywany następująco
(jedna z możliwych wersji - w różnych procesorach szczegóły mogą wyglądać inaczej):

1. Procesor przesyła zawartość rejestru SP na magistralę adresową, a daną do zapisu na magistralę danych.
2. Procesor na magistrali sterującej umieszcza żądanie zapisu do pamięci.
3. Po otrzymaniu potwierdzenia zapisu, procesor zmniejsza zawartość rejestru SP tak, aby wskazywał on niższe, niezajęte
miejsce na stosie.
Odczyt ze stosu wykonywany jest następująco:
1. Procesor zwiększa zawartość rejestru wskaźnika stosu SP, aby wskazywał on poprzednio zapisaną na stosie daną.
2. Procesor umieszcza na magistrali adresowej zawartość SP, a na magistrali sterującej umieszcza żądanie odczytu pamięci.
3. Po otrzymaniu potwierdzenia, procesor odczytuje z magistrali danych daną ze stosu.
Stos jest bardzo wygodną strukturą danych i jej wykorzystanie nie ogranicza się tylko do podprogramów i ich adresów powrotnych.
Zwykle każdy procesor posiada wiele rozkazów, które pozwalają mu umieszczać na stosie zwartości rejestrów, innych komórek
pamięci, itp. Dzięki stosowi można realizować wiele algorytmów rekurencyjnych.

Język asemblera
Program zwierający instrukcje dla procesora nosi nazwę kodu maszynowego (ang. machine code). Jest to kod binarny, dla

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0055.php 249 / 253


Bit w zastosowaniach - Budowa procesora 2014-10-03

człowieka zwykle nieczytelny. Aby umożliwić programowanie procesorów opracowana w latach 50-tych XX wieku język
symboliczny, zwany językiem asemblera (ang. assembler lub assembly language). W języku tym każda instrukcja maszynowa
jest reprezentowana za pomocą tzw. mnemonika, czyli kilkuliterowego napisu, który kojarzy się z wykonywaną operacją.
Dodatkowo określone są reguły dla argumentów operacji.
Przykład (mikroprocesor 6502)
LDA - LoaD Accumulator - ładuj daną do akumulatora
LDA #liczba - ładuj do akumulatora liczbę
LDA adres - ładuj do akumulatora zawartość komórki spod wskazanego adresu
STA - STore Accumulator 0 prześlij zawartość akumulatora do pamięci
STA adres - umieść zawartość akumulatora we wskazanej komórce pamięci
ADC - ADd with Carry - dodaj z przeniesieniem
ADC #liczba - dodaj liczbę do akumulatora
ADC adres - dodaj do akumulatora zawartość komórki pamięci spod wskazanego adresu
...
Program napisany w języku asemblera jest zwykłym tekstem - składa się z liter. Procesor w takiej postaci nie jest w stanie go
zrozumieć. Dlatego należy zawsze dokonać kompilacji, czyli zamiany tekstu programu na odpowiadające mu instrukcje binarne
dla procesora. Operacji tej dokonuje program zwany asemblerem.
Programowanie w języku asemblera daje 100% kontrolę nad całym komputerem. Jednakże jest bardzo trudne, ponieważ
programista musi dokładnie znać budowę całego komputera, specyfikę wykonywania w nim różnych działań, itp. Poza tym każdą
operację należy rozbić na elementarne instrukcje dla procesora. Programy w języku maszynowym są mało czytelne dla człowieka,
a częste błędy trudno zdiagnozować i wymagają one dużej koncentracji przy ich wyszukiwaniu. W początkach swojej działalności
informatycznej często programowałem w asemblerze komputery ZX81, ZX-Spectrum, Atari 800XL/130XE, Commodore 64, Amiga i
IBM. Nad niektórymi błędami w programach straciłem całe tygodnie (nie narzekam, bo miałem z tego mnóstwo satysfakcji i niezłą
zabawę intelektualną). Dlatego, o ile nie istnieją jakieś ważne powody, lepiej jest programować komputery w językach wysokiego
poziomu, jak chociażby C++. Zaoszczędzimy wiele czasu i niepotrzebnej frustracji - chociaż i tam błędy potrafią być złośliwe.
Dodatkowo, programy w języku maszynowym są nieprzenośne na inne platformy sprzętowe, gdzie procesor ma inny zestaw
rozkazów, inaczej są zorganizowane układy wejścia/wyjścia. Wad tych nie posiadają języki wysokiego poziomu, które nie działają
na warstwie sprzętowej komputera, lecz na warstwie rozwiązywanego przez program problemu.

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany
Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na
prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też
tłumaczenia zagadnień szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0055.php 250 / 253


Bit w zastosowaniach - Mikroprocesory 2014-10-03

©2012 mgr Jerzy Wałaszek


I LO w Tarnowie

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych.


Autor artykułu: mgr Jerzy Wałaszek, wersja 2.1Materiały pochodzą z Wikipedii oraz witryny How Stuff Works

Przetwarzanie bitów
Mikroprocesory
Bramki logiczne Architektura Johna Von Neumanna
Układy kombinatoryczne z bramek cyfrowych Budowa procesora
Przerzutniki Mikroprocesory
Rejestr
Pamięć
Wejście / wyjście
Procesor

Rozwój technologii układów scalonych doprowadził na początku lat 70-tych XX wieku do powstania
mikroprocesora, czyli układu scalonego, który wewnątrz zawierał wszystkie podstawowe składniki
procesora. Pierwszy mikroprocesor otrzymał nazwę Intel 4004, Jego twórcą był Federico Faggin. Układ
Intel 4004 był procesorem 4-ro bitowym, tzn. przetwarzał informację w porcjach 4-ro bitowych.
Zaprojektowany został do użytku w kalkulatorach programowanych japońskiej firmy Busicom, jednakże,
jako układ programowalny, mógł być wykorzystywany również do innych celów. Firma Intel zajmowała się
w tym czasie głównie produkcją pamięci scalonych. Z uwagi na ograniczenia technologiczne,
mikroprocesor Intel 4004 został umieszczony w 16-to nóżkowej obudowie (zdjęcie po lewej). Takie
rozwiązanie spowodowało, że magistrala adresowa i magistrala danych musiały być multipleksowane (tzn.
podłączone do tych samych wyprowadzeń układu, które raz pełniły funkcje magistrali adresowej, a raz
Mikroprocesor Intel 4004 magistrali danych). Wymagało to stosowania dodatkowych układów zewnętrznych, które ściśle
współpracowały z mikroprocesorem Intel 4004. Układy te sprzedawano pod nazwą handlową MSC-4 od
listopada 1971. Więcej na ten temat znajdziesz tutaj.
Firma Intel nie była jedyną, która zajmowała się badaniami nad mikroprocesorem. Z konkurentów w owym czasie należy również wymienić firmy
Texas Instrument oraz Rockwell International, które pracowały nad własnymi rozwiązaniami. Firmie Intel po prostu udało się wcześniej ukończyć
badania i wprowadzić do produkcji swoje rozwiązanie.
Mniej więcej w tym samym czasie, gdy był opracowywany Intel 4004, inżynierowie Intela pracowali nad
nowym układem, który ostatecznie otrzymał oznaczenie Intel 8008. Zawierał on około 3500 tranzystorów,
posiadał 18-nóżkową obudowę, zegar 500 kHz, 8-bitową magistralę danych, 14-bitową magistralę adresową
(pamięć do 16KB), 8-bitowy akumulator oraz sześć 8-bitowych rejestrów ogólnego przeznaczenia.
Mikroprocesor potrafił wykonywać operacje arytmetyczne i logiczne oraz reagował na przerwania.
Przerwanie jest w działaniu podobne do wywołania podprogramu, Różnica polega na tym, iż wywołanie to nie
następuje w wyniku wykonania instrukcji, lecz jako reakcja na otrzymanie sygnału przerwania na magistrali
sterującej. W takim przypadku mikroprocesor przerywa wykonywanie bieżącego programu, zapamiętuje na
stosie stan licznika programu PC i dokonuje skoku pod pewien ustalony adres, gdzie znajduje się
odpowiednia procedura obsługi przerwania. Po jej wykonaniu, następuje odtworzenie ze stosu rejestru PC i Mikroprocesor Intel 8008
kontynuowanie wykonywania programu głównego. Przerwania są bardzo wygodną cechą mikroprocesorów.
Umożliwiają one bieżącą obsługę różnych urządzeń bez ciągłego ich monitorowania. Jeśli zaistnieje potrzeba obsługi takiego urządzenia, to
generuje ono przerwanie, a mikroprocesor zajmuje się jego obsługą.
W dalszej kolejności powstały mikroprocesory Intel 8080, MOS 6502 oraz
Z80. Były to mikroprocesory 8-bitowe (Z80 posiadał wiele cech
mikroprocesorów 16-bitowych, np. operacje arytmetyczne), magistrala
adresowa 16-bitowa pozwalała im na adresowanie do 64KB pamięci
zewnętrznej. Częstotliwość taktowania tych procesorów była odpowiednio:
8080 - 1MHz / 2MHz, Z80 - 2Mhz / 4Mhz / 6MHz (dzisiaj > 20MHz), 6502 -
1..2MHz. Więcej tutaj.
Ciekawym rozwiązaniem był układ 6502 (stosowany później w popularnych
komputerach lat 80-tych: Commodore 64 i Atari XL/XE). Otóż w układzie
tym nie było osobnego trybu komunikacji z urządzeniami we/wy. Rejestry
tych urządzeń zajmowały pewien obszar w przestrzeni adresowej
mikroprocesora. Komunikacja odbywała się zatem tak samo jak z
Mikroprocesor Intel 8080 pamięcią zewnętrzną. Takie rozwiązanie pozwala przetwarzać dane z
rejestrów we/wy na równi z danymi z pamięci. Mikroprocesor Intel 8080
odniósł bardzo duży sukces rynkowy i był przez wiele lat produkowany w wielu różnych krajach - nawet w PRL-owskiej Polsce pod nazwą
MCY7880 w firmie CEMI. Z kolei układ Z80 okazał się najlepszym mikroprocesorem 8-bitowym i jest on produkowany do dzisiaj - oczywiście w
nowej wersji.
Pierwszy mikroprocesor 16-bitowy pojawił się w roku 1973. Był to układ IMP-16 firmy National Semiconductor. Firma Intel wyprodukowała swój
pierwszy mikroprocesor 16-bitowy Intel 8086 w 1978 roku. Układ zawierał 29 tysięcy tranzystorów, był taktowany zegarem 4,77MHz i pozwalał
na adresowanie 1MB pamięci zewnętrznej. Popularność tego układu, będącego następcą wcześniejszych Intel 8008 i Intel 8080/8085, wzrosła
po zastosowaniu go w komputerach osobistych IBM XT (właściwie w tych pierwszych komputerach IBM zastosowano okrojoną wersję Intel 8088,
która wewnętrznie była taka sama jak Intel 8086, lecz zewnętrznie posiadała 8-bitową magistralę danych, co wpływało znacząco na szybkość
pracy tego mikroprocesora).

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0056.php 251 / 253


Bit w zastosowaniach - Mikroprocesory 2014-10-03

W roku 1979 firma Motorola wypuszcza 32-bitowy mikroprocesor MC68000,


który w tamtym czasie był najbardziej wydajnym procesorem na świecie.
Układ potrafił adresować ciągły obszar pamięci do 16MB (procesor Intel
8086 mógł adresować jedynie segmenty o rozmiarze do 64KB w obrębie
swojej pamięci 1MB), posiadał 8 rejestrów danych oraz osiem rejestrów
adresowych. Wewnętrznie był układem w pełni 32-bitowym. Zewnętrznie
posługiwał się magistralą 16-bitową. Zawierał 68 tysięcy tranzystorów, stąd
wzięła się jego nazwa. Mikroprocesory MC68k zastosowano w kultowych
komputerach Commodore Amiga oraz Apple Mcintosh, które spotykamy do
dziś (w unowocześnionych wersjach oczywiście).
W 1982 firma Intel zaprezentowała 16-bitowy mikroprocesor Intel 80286,
taktowany zegarem 6 MHz. Układ zawierał wewnątrz 134 tysięcy
tranzystorów, posiadał tryb chroniony i mógł adresować do 16MB pamięci
zewnętrznej, jednak nadal w segmentach 64KB. Na tym procesorze można Komputer Amiga 500
było realizować wielozadaniowość, czyli jednoczesne uruchamianie wielu
aplikacji. Polega to na tym, iż każda aplikacja wykonuje swój kod przez pewien okres czasu, po czym następuje przerwanie i procesor
przejmuje kolejna aplikacja. Przy przerwaniu stan każdej aplikacji jest zapamiętywany i odtwarzany przy powrocie do niej procesora. W ten
sposób wykonywany program "nie zauważa", że został chwilowo zawieszony. Ponieważ proces ten odbywa się cyklicznie z dużą
częstotliwością, użytkownik odnosi wrażenia, że naraz w komputerze działa kilka programów. Oczywiście w danej chwili zawsze działa tylko
jeden program. Pełną wielozadaniowość można osiągnąć tylko na komputerach wieloprocesorowych. Mikroprocesory Intel 80286 stosowane były
w komputerach IBM AT
W roku 1984 firma Motorola wypuszcza mikroprocesor MC68020 z przetwarzaniem
potokowym - polega to na tym, iż w trakcie wykonywania instrukcji pobierane są
następne instrukcje i dekodowane. Zatem procesor równolegle (potokowo)
wykonuje wiele zadań, co znacząco przyspiesza jego działanie. MC68020 posiada
już w pełni 32-bitowe szyny adresową i danych. W instrukcjach dzielenia i
mnożenia można w nim stosować dane 64-bitowe. Posiada 256 bajtową pamięć
podręczną (ang. cache memory). Mikroprocesor był stosowany głównie w
nowszych modelach komputerów Amiga oraz Apple Macintosh.
W 1985 Intel przedstawia 32-bitowy procesor 80386, taktowany zegarem 16 MHz,
zawierający wewnątrz 275.000 tranzystorów. Ten układ posiada 32-bitowe
magistrale adresową i danych. Przestrzeń adresowa to 4GB. Rejestry segmentowe
są już 32 bitowe, co pozwala stosować liniowe obszary adresowania do 4GB.
Stosowany w komputerach IBM PS/2 model 70 i 80.
W roku 1989 firma Intel wprowadza na rynek nowy procesor Intel 80486.
Częstotliwość taktowania dochodziła do 50MHz. Układ był usprawnioną wersją
Komputer Apple Macintosh poprzedniego mikroprocesora Intel 80836 i przy tym samym zegarze pracował
około dwa razy szybciej. Mikroprocesory Intel 80486 były produkowane również
przez takie firmy jak AMD i Texas Instrument (częstotliwości taktowania mogły przekraczać 100MHz).
W roku 1990 Motorola wprowadza na rynki mikroprocesor MC68040, który zawiera w środku ponad 1,2 miliona tranzystorów. Procesor
taktowany jest zegarem 25MHz. Staje się on sercem komputerów Amiga 4000, które wykorzystuje się w niektórych produkcjach filmowych do
tworzenia efektów 2D. Więcej informacji na temat tego ciekawego komputera znajdziesz w Wikipedii.
Od roku 1994 rozpoczyna się era mikroprocesorów Pentium. Wprowadzają one
nową jakość do przetwarzania danych na komputerach osobistych. Od tego
momentu nowe mikroprocesory są wprowadzane na rynek podzespołów co kilka
miesięcy, częstotliwości taktowania systematycznie rosną, przekraczając
magiczny próg 1GHz. Podstawowe nowości w procesorach Pentium obejmują:
Architektura superskalarna – analizując programy w języku maszynowym,
można dojść do wniosku, iż pewne rozkazy mogą być wykonywane
niezależnie od siebie. Np. Załóżmy, że mamy wprowadzić do rejestru EAX
liczbę 10, a do rejestru EBX zawartość rejestru ECX. Rozkazy te są
niezależne, tzn. nie ma znaczenia, czy najpierw będzie wykonany pierwszy,
czy drugi z nich. Procesor Pentium w takich przypadkach potrafi wykonać
jednocześnie oba. Powoduje to wzrost szybkości działania w stosunku do
procesora 80486 przy tej samej częstotliwości taktowania - tak naprawdę
procesor Pentium to jakby dwa procesory 80486, które korzystają ze
wspólnych rejestrów i magistral i wykonują ten sam program.
64-bitowa szyna danych. Wszystkie główne rejestry pozostały 32-bitowe, ale
podwojeniu uległa ilość informacji pobieranej z pamięci. Jeden z pierwszych procesorów Pentium
Zestaw instrukcji MMX, które przyspieszają obsługę aplikacji multimedialnych - odtwarzanie filmów i dźwięku.
Rozdzielenie pamięci podręcznej (ang. cache memory) na pamięć podręczną instrukcji i danych oraz podwojenie jej wielkości (2x8kB i
2x16kB w wersji MMX).
Bufory zapisu, które zwiększają prędkość współpracy z pamięcią cache i magistralą (podwojone w wersji MMX).
Przewidywanie rozgałęzień w programie (do 90% skuteczności). Opcja ta pozwala efektywnie zapełniać kolejkę rozkazową, która bez niej
musiała być czyszczona po wykonaniu skoku, ponieważ rozkazy były pobierane z nowego miejsca w pamięci. Dzięki przewidywaniu
skoku, kolejka może być zapełniana rozkazami z właściwego miejsca w pamięci jeszcze przed wykonaniem skoku, co zwiększa
szybkość działania procesora.
Wyższa częstotliwość taktowania szyny (początkowo 60 i 66MHz).
Przeprojektowany koprocesor arytmetyczny (5-6 razy wydajniejszy niż w i486).
Możliwość pracy w systemach wieloprocesorowych
Pełną chronologię tych wydarzeń możesz zobaczyć tutaj.

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0056.php 252 / 253


Bit w zastosowaniach - Mikroprocesory 2014-10-03

List do administratora Serwisu Edukacyjnego I LO


Twój email: (jeśli chcesz otrzymać odpowiedź)

Temat:
Uwaga: ← tutaj wpisz wyraz ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048


Wyślij Kasuj

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby
rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień
szeroko opisywanych w podręcznikach.

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji I Liceum Ogólnokształcące


GNU Free Documentation License. im. Kazimierza Brodzińskiego
w Tarnowie
(C)2014 mgr Jerzy Wałaszek

http://edu.i-lo.tarnow.pl/inf/alg/002_struct/0056.php 253 / 253

You might also like