'DekoderKoduBCD1

Bascom
Dekoder - Demultiplekser


Demultiplekser posiadający szesnaście wyjść działa podobnie do 74154. Sterowany jest kodem BCD, poziomami wysokimi w wejścia A, B, C, D. Dla przykładu: Jeśli wpiszemy liczbę 12 w kodzie BCD (1100, czytamy od tyłu), to wynikiem będzie pojawienie się poziomu wysokiego w Porcie oznaczonym, jako wy12. Dla poprawnej pracy potrzebne jest podanie poziomu niskiego na G1 i G2, każdy inny stan powoduje wyzerowanie wyjść.



'DekoderKoduBCD1.bas

'Szesnasto wyjściowy demultiplekser BCD/dzies.

'Kod BCD podany jest na wejścia Portd.0, 1, 2, 3. 4 jako A, B, C, D.

'Multipleksowe poziomy wysokie pojawiają się na wyjściach.

'Fusebit ustawiony na generator RC wewnętrzny 0001.

'Pamięć zajęta w 31%.

'Opracował Henryk Wydmuch.

'Schemat: DekoderKoduBCD1.png.

 

$regfile = "m8def.dat"                                      'Dyrektywy dla kompilatora.

$crystal = 1000000                                          'Zastosujemy gen. wew. 1MHz.

 

'Wejścia kodu BCD.

Config Pind.0 = Input                                       'Wejście kodu A.

Config Pinb.0 = Input                                       'Wejście kodu B.

Config Pind.2 = Input                                       'Wejście kodu C.

Config Pind.3 = Input                                       'Wejście kodu D.

 

'Porty pomocnicze.

Config Pind.4 = Input                                       'Tu wpiszemy 0 (G1).

Config Pind.5 = Input                                       'Tu wpiszemy 0 (G2)

 

 

'Multipleksowe wyjścia.

Config Pind.6 = Output                                      '0.

Config Pind.7 = Output                                      '1.

 Config Pind.1 = Output                                     '2.

 Config Pinb.1 = Output                                     '3.

 Config Pinb.2 = Output                                     '4.

 Config Pinb.3 = Output                                     '5.

 Config Pinb.4 = Output                                     '6.

 Config Pinb.5 = Output                                     '7.

 Config Pinb.6 = Output                                     '8.

 Config Pinb.7 = Output                                     '9.

  Config Pinc.0 = Output                                    '10.

  Config Pinc.1 = Output                                    '11.

  Config Pinc.2 = Output                                    '12.

  Config Pinc.3 = Output                                    '13.

  Config Pinc.4 = Output                                    '14.

  Config Pinc.5 = Output                                    '15.

 

 

 'Na wyjściach ustawiony niski poziom.

 Reset Portd.1

 Reset Portd.6

 Reset Portd.7

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

 

 'Deklarujemy zmienną Abcd, w której będzie liczba dziesiętna,

 'odpowiednik kodu BCD na wejściu Portd.0,1,2,3.

 Dim Abcd As Byte

 

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 

 Do

'''''''''''''''''''''''

 If Pind.4 = 1 Then

 If Pind.5 = 0 Then

Abcd = 16

End If

   End If

 If Pind.4 = 0 Then

 If Pind.5 = 1 Then

Abcd = 16

End If

   End If

 If Pind.4 = 1 Then

 If Pind.5 = 1 Then

Abcd = 16

End If

   End If

''''''''''''''''''''''''

 If Pind.4 = 0 Then                                         'Wejście oznaczone jako G1.

 If Pind.5 = 0 Then                                         'Wejście oznaczone jako G2.

 

 If Pind.0 = 0 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 0 Then

 If Pind.3 = 0 Then

Abcd = 0

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 0 Then

 If Pind.3 = 0 Then

Abcd = 1

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 0 Then

 If Pind.3 = 0 Then

Abcd = 2

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 0 Then

 If Pind.3 = 0 Then

Abcd = 3

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 1 Then

 If Pind.3 = 0 Then

Abcd = 4

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 1 Then

 If Pind.3 = 0 Then

Abcd = 5

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 1 Then

 If Pind.3 = 0 Then

Abcd = 6

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 1 Then

 If Pind.3 = 0 Then

Abcd = 7

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 0 Then

 If Pind.3 = 1 Then

  Portb.6 = 1

Abcd = 8

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 0 Then

 If Pind.3 = 1 Then

Abcd = 9

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 0 Then

 If Pind.3 = 1 Then

Abcd = 10

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 0 Then

 If Pind.3 = 1 Then

Abcd = 11

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 1 Then

 If Pind.3 = 1 Then

Abcd = 12

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 0 Then

 If Pind.2 = 1 Then

 If Pind.3 = 1 Then

Abcd = 13

End If

   End If

   End If

   End If

 If Pind.0 = 0 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 1 Then

 If Pind.3 = 1 Then

Abcd = 14

End If

   End If

   End If

   End If

 If Pind.0 = 1 Then

 If Pinb.0 = 1 Then

 If Pind.2 = 1 Then

 If Pind.3 = 1 Then

Abcd = 15

End If

   End If

   End If

   End If

 

End If                                                      'Koniec warunku, gdy Pind.4=0.

End If                                                      'Koniec warunku, gdy Pind.5=0.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Sprawdzanie zmiennej Abcd.

'Jeśli jest zero, to Portd.6=1, pozostałe Porty poziom niski, itd..

Select Case Abcd

  Case 0 : Portd.6 = 1

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 1 : Portd.7 = 1

  Reset Portd.6

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 2 : Portd.1 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 3 : Portb.1 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 4 : Portb.2 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 5 : Portb.3 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 6 : Portb.4 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 7 : Portb.5 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 8 : Portb.6 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 9 : Portb.7 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 10 : Portc.0 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 11 : Portc.1 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 12 : Portc.2 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

  Case 13 : Portc.3 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.4

 Reset Portc.5

  Case 14 : Portc.4 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.5

  Case 15 : Portc.5 = 1

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

  Case 16:                                                  'Gdy Abcd zawiera 16, blokada.

  Reset Portd.6

 Reset Portd.7

 Reset Portd.1

 Reset Portb.1

 Reset Portb.2

 Reset Portb.3

 Reset Portb.4

 Reset Portb.5

 Reset Portb.6

 Reset Portb.7

 Reset Portc.0

 Reset Portc.1

 Reset Portc.2

 Reset Portc.3

 Reset Portc.4

 Reset Portc.5

 

 End Select                                                 'Koniec sprawdzania zmiennej Abcd.

 

Loop                                                        'Cały czas sprawdzaj Porty wejściowe.

End                                                         'Tu kończy się pętla.