Hallo
BCD-Namen sind unsinnig, weil BCD ja lediglich bedeutet, dass die Ziffern 0 bis 9 in jeweils einem Nipple dargestellt werden. Deshalb würde ich es einfach so lösen:
Code:
$regfile = "attiny2313.dat"
$crystal = 8000000
Config Portd.0 = Input 'für die BCD Eingänge
Config Portd.1 = Input 'für die BCD Eingänge
Config Portd.2 = Input 'für die BCD Eingänge
Config Portd.3 = Input 'für die BCD Eingänge
Dim Bcd_input As Byte
S_ausgang Alias Portd.4 'Ausgang für Stern
R_ausgang Alias Portd.5 'Ausgang für Raute
1_ausgang Alias Portb.7 'Ausgang für 1, usw.
2_ausgang Alias Portb.6
3_ausgang Alias Portb.5
4_ausgang Alias Portb.4
5_ausgang Alias Portb.3
6_ausgang Alias Portb.2
7_ausgang Alias Portb.1
8_ausgang Alias Portb.0
9_ausgang Alias Portd.6
Config S_ausgang = Output
Config R_ausgang = Output
Config 1_ausgang = Output
Config 2_ausgang = Output
Config 3_ausgang = Output
Config 4_ausgang = Output
Config 5_ausgang = Output
Config 6_ausgang = Output
Config 7_ausgang = Output
Config 8_ausgang = Output
Config 9_ausgang = Output
'Const 1 = &B0001 'BCD Code für 1, usw.
'Const 2 = &B0010
'Const 3 = &B0011
'Const 4 = &B0100
'Const 5 = &B0101
'Const 6 = &B0110
'Const 7 = &B0111
'Const 8 = &B1000
'Const 9 = &B1001
'Const S = &B1011 'BCD Code für Stern
'Const R = &B1100 'BCD Code für Raute
Declare Sub All_leds_off
All_leds_off
Do
Bcd_input = Pind And 15 'nur die Bits 0 bis 3 beachten
Select Case Bcd_input
Case 0 : All_leds_off
Case 1 : Toggle 1_ausgang
Case 2 : Toggle 2_ausgang
Case 3 : Toggle 3_ausgang
Case 4 : Toggle 4_ausgang
Case 5 : Toggle 5_ausgang
Case 6 : Toggle 6_ausgang
Case 7 : Toggle 7_ausgang
Case 8 : Toggle 8_ausgang
Case 9 : Toggle 9_ausgang
Case 11 : Toggle S_ausgang
Case 12 : Toggle R_ausgang
End Select
Waitms 200
Loop
End
Sub All_leds_off
S_ausgang = 0
R_ausgang = 0
1_ausgang = 0
2_ausgang = 0
3_ausgang = 0
4_ausgang = 0
5_ausgang = 0
6_ausgang = 0
7_ausgang = 0
8_ausgang = 0
9_ausgang = 0
End Sub
Das ist allerdings ungetestet.
Allerdings ist die direkte Abfrage der Eingangspins kritisch, weil die Pins nie gleichzeitig ihre Pegel wechseln, bzw. erreichen. Deshalb verwendet man bei parallelen Schnittstellen wenigstens ein Gültig-Signal an dem der lesende Partner erkennt, dass alle Datenpins stabile Spannungen haben:
' Pseudocode für Sender
set_bcd_daten
waitms 10 ' warten bis alle Pegel passen
set_bcd_gültig
waitms 300 ' warten bis mindestens einmal gelesen wurde
unset_bcd_gültig
waitms 10 ' warten bis lesen wirklich beendet ist
unset_bcd_daten
' Code für Empfänger:
if bcd_gültig then Bcd_input = Pind And 255
Gruß
mic
[Edit]
Das Gültig-Signal beim MT8870 heißt vermutlich StD:

Zitat von
Datenblatt des MT8870
Q1-Q4 4-BIT DECODED TONE OUTPUT.
StD DELAYED STEERING OUTPUT. INDICATES THAT VALID FREQUENCIES HAVE BEEN PRESENT/ABSENT FOR THE REQUIRED
GUARD TIME THUS CONSTITUTING A VALID SIGNAL.
Lesezeichen