Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2020 mgr Jerzy Wałaszek
I LO w Tarnowie

Bity w elektronice

Konwerter kodu Aikena na kod BCD

SPIS TREŚCI

Opis

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:

obrazek

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:

Cyfra Aiken BCD
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
Na początek:  podrozdziału   strony 

Określenie funkcji logicznych

Na podstawie tabelki układamy tablice Karnaugha dla poszczególnych wyjść transkodera. Wszystkie funkcje sprowadzamy do postaci NAND, aby można było użyć bramek standardowych:

Sygnał D

Obszar D
obrazek 00 01 11 10
00 0 0 0 0
01 0 X X X
11 0 0 1 1
10 X X 0 X

Sygnał C

Obszar C1
obrazek 00 01 11 10
00 0 0 0 0
01 1 X X X
11 1 1 0 0
10 X X 1 X
Obszar C2
obrazek 00 01 11 10
00 0 0 0 0
01 1 X X X
11 1 1 0 0
10 X X 1 X

Sygnał B

Obszar B1
obrazek 00 01 11 10
00 0 0 1 1
01 0 X X X
11 1 1 0 0
10 X X 0 X
Obszar B2
obrazek 00 01 11 10
00 0 0 1 1
01 0 X X X
11 1 1 0 0
10 X X 0 X

Sygnał A

Obszar A
obrazek 00 01 11 10
00 0 1 1 0
01 0 X X X
11 0 1 1 0
10 X X 1 X

Podsumujmy otrzymane funkcje logiczne:

Na początek:  podrozdziału   strony 

Budowa sieci logicznej

Tworzenie sieci logicznej rozpoczynamy od wejść. Jeśli przyjrzysz się wzorom:

to zauważysz, iż używane są w nich wejścia: a, b, b, c, c, d, d. Zaprzeczenia zrealizujemy za pomocą inwerterów NOT.

Realizujemy kolejne funkcje:


 




 




 


Sieć logiczna jest gotowa

Na początek:  podrozdziału   strony 

Symulacja sieci w języku C++

Numerujemy bramki w sieci w kolejności przetwarzanych przez nie sygnałów:

Określamy sieć połączeń:

YB1 = NOT(d)
YB2 = NOT(c)
YB3 = NOT(b)
YB4 = NAND(c,b)
YB5 = NAND(YB2,d)
YB6 = NAND(c,YB3)
YB7 = NAND(YB1,b)
YB8 = NAND(d,YB3)
YB9 = NOT(YB4)
YB10 = NAND(YB5,YB6)
YB11 = NAND(YB7,YB8)
A = a
B = YB11
C = YB10
D = YB9

Program będzie tworzył na wejściach a, b, c i d kolejne wyrazy kodu Aikena. Na wyjściach sieci powinniśmy otrzymać kolejne słowa w kodzie BCD wg poniższej tabelki:
Cyfra Aiken BCD
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
C++
// Symulacja sieci logicznej
// transkodera z kodu Aikena na BCD
// (C)2020 mgr Jerzy Wałaszek
// I LO w Tarnowie

#include <iostream>

using namespace std;

// Funkcje bramek

int NOT(int a)
{
  return !a;
}

int NAND(int a, int b)
{
  return !(a && b);
}

int main( )
{
  // Stany wejściowe oraz stany wyjściowe
  int a,b,c,d,A,B,C,D;

  // Stany wyjściowe bramek
  int YB1,YB2,YB3,YB4,YB5,YB6,YB7,YB8,YB9,YB10,YB11;

  // Licznik pętli i cyfra Aikena
  int i,ca;

  cout << "Cyfra | d c b a | D C B A\n"
          "------+---------+--------" << endl;

  // W pętli generujemy kody cyfr of 0 do 9

  for(i = 0; i < 10; i++)
  {

    ca = i;
    if(i > 4) ca += 6;

    // Wyodrębniamy bity kodu Aikena

    a = (ca & 0x1);
    b = (ca & 0x2) > 0;
    c = (ca & 0x4) > 0;
    d = (ca & 0x8) > 0;

    // Symulacja sieci

    YB1 = NOT(d);
    YB2 = NOT(c);
    YB3 = NOT(b);
    YB4 = NAND(c,b);
    YB5 = NAND(YB2,d);
    YB6 = NAND(c,YB3);
    YB7 = NAND(YB1,b);
    YB8 = NAND(d,YB3);
    YB9 = NOT(YB4);
    YB10 = NAND(YB5,YB6);
    YB11 = NAND(YB7,YB8);
    A = a;
    B = YB11;
    C = YB10;
    D = YB9;

    // Wyświetlamy wyniki

    cout << "  " << i << "   | "
         << d << " " << c << " " << b << " " << a
         << " | "
         << D << " " << C << " " << B << " " << A << endl;
  }
  cout << endl;

  return 0;
}
Wynik:
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

Na początek:  podrozdziału   strony 

Symulacja interaktywna

W symulatorze kod Aikena ustawiasz z lewej strony na kwadratowych przyciskach. Kliknięcie w przycisk zmienia jego stan na przeciwny. Kolor czarny oznacza stan niski 0, kolor czerwony to stan wysoki 1. Kod BCD odczytujemy z okrągłych wskaźników po prawej stronie. Pamiętaj, iż sieć poprawnie działa tylko dla prawidłowych kodów Aikena. Jest to konsekwencją uproszczenia funkcji logicznych.

Symulator
Na początek:  podrozdziału   strony 

Spis elementów

Obciążenia wnoszone przez poszczególne wejścia: a - 0,  b - 3, c - 3,  d - 3,

SN7400 × 2

obrazek

SN7404 × 1

obrazek

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2020 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.