Und wie ich das werden würde... ^^

Hallo Sauerbruch.

Die Wahrheitstabelle habe ich jetzt im Ganzen umgesetzt. Dabei sind alle Eingangspins benannt. Die internen PullUp's sind gesetzt, wodurch ich die nicht angeschlossenen Pins im Grunde auch in der Luft hängen lassen könnte - oder was meinst/denkst du? Würde dies vielleicht zu Fehlfunktionen führen?

Der Code sieht bislang so aus (nach meinem letzten Post geschrieben):

Code:
$regfile = "m8515.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32


'-------------------------------------------------------------------------------
'  *** Konfiguriere Ein- und Ausgangsports ***

Config Porta = Input
Config Portb = Output
Config Portc = Output
Config Portd = Output

Porta = &HFF       ' Aktiviert die internen Pullup-Widerstände
Portb = &HFF       ' schaltet alle Ausgänge 1, LED = 0
Portc = &HFF
Portd = &HFF


'-------------------------------------------------------------------------------
'  *** Konfiguriere Timer ***

Config Timer0 = Timer , Prescale = 1024
On Timer0 Isr_timer0
Enable Timer0
Timer0 = 177
Enable Interrupts


'-------------------------------------------------------------------------------
'  *** Deklarieren der Variablen ***

Dim Timercounter As Byte


'-------------------------------------------------------------------------------
'  *** Deklarieren der Subroutinen ***

Declare Sub All_off
Declare Sub All_on
Declare Sub Horizontal_lines
Declare Sub Vertical_lines
Declare Sub Straight
Declare Sub Diagonal_falling
Declare Sub Diagonal_rising
Declare Sub Net
Declare Sub Net_invert
Declare Sub Arrow_up
Declare Sub Moving_net


'-------------------------------------------------------------------------------
'   ===============================
'      ***** Hauptprogramm *****
' ===================================

Do

   Select Case Pina
         Case &B11111111 : Call All_off       '                        00000
         Case &B11111110 : Call All_on       '                        00001
         Case &B11111101 : Call Horizontal_lines       '          00010
         Case &B11111100 : Call Vertical_lines       '              00011
         Case &B11111011 : Call Straight       '                      00100
         Case &B11111010 : Call Diagonal_falling       '           00101
         Case &B11111001 : Call Diagonal_rising       '            00110
         Case &B11111000 : Call Net       '                            00111
         Case &B11110111 : Call Net_invert       '                  01000
         Case &B11110110 : Call Arrow_up       '                    01001
         Case &B11110101 : Call Moving_net       '                 01010


   End Select


Loop


'-------------------------------------------------------------------------------
'  ***  ISR für Timer erzeugen - Overflow-Counter in Warteposition bringen ***

Isr_timer0:
   Timer0 = 177
   Incr Timercounter
' ### Gestartet wird der Timer im jeweiligen Unterprogramm.
' Eingestellt ist der Timer auf 0,01s. ###



'-------------------------------------------------------------------------------
' ====================================
'      ****  Unterprogramme  ****
'   ================================

Sub All_off:       '                00000

   Portd = &B11111111
   Portc = &B11111111
   Portb = &B11111111
   Stop Timer0
   Timer0 = 177

End Sub All_off


Sub All_on:       '                 00001

   Portd = &B00000000
   Portc = &B00000000
   Portb = &B00000000

End Sub All_on


Sub Horizontal_lines:       '       00010

   Portd = &B10101010
   Portb = &B10101010
   Portc = &B10101010

End Sub Horizontal_lines


Sub Vertical_lines:       '         00011

   Portd = &B00000000
   Portc = &B11111111
   Portb = &B00000000

End Sub Vertical_lines


Sub Straight:       '               00100

   Portd = &B11111111
   Portc = &B00000000
   Portb = &B11111111

End Sub Straight


Sub Diagonal_falling :       '      00101

   Portd = &B00100100
   Portc = &B01001001
   Portb = &B10010010

End Sub Diagonal_falling


Sub Diagonal_rising:       '        00110

   Portd = &B10010010
   Portc = &B01001001
   Portb = &B00100100

End Sub Diagonal_rising


Sub Net:  '                         00111

   Portd = &B10101010
   Portc = &B01010101
   Portb = &B10101010

End Sub Net


Sub Net_invert:       '             01000

   Portd = &B01010101
   Portc = &B10101010
   Portb = &B01010101

End Sub Net_invert


Sub Arrow_up:       '               01001

   Portd = &B11011101
   Portc = &B10111011
   Portb = &B11011101

End Sub Arrow_up


Sub Moving_net       '              01010

   Start Timer0
      If Timercounter = 1 Then
         Portd = &B10101010
         Portc = &B01010101
         Portb = &B10101010
      Elseif Timercounter = 120 Then
         Portd = &B01010101
         Portc = &B10101010
         Portb = &B01010101
      Elseif Timercounter = 240 Then
         Timercounter = 0
      End If

End Sub Moving_net
Erläuterungen zu den einzelnen Modulen habe ich nicht mehr beigefügt. Bei Interesse kann man sich das Ergebnis im Code der einzelnen Ports anschauen. Quasi stellen die 3 Ports das Regal dar, welches eigentlich nur nach links gekippt wurde ^^.

Beim letzten Modul mit dem Timer habe ich derzeit noch ein kleines Konflikt-Problem: Die LED leuchten nicht konstant, sondern nur ganz kurz auf, erlöschen sofort wieder und mit dem nächsten Takt erleuchtet die andere LED-Reihe nur ganz kurz - usw.ff. Denke, dass es mit der Ausschalt-Logik zusammenhängt, die ich schreiben musste, wenn kein Eingangsport ein Low-Signal führt. Dann muss die Steuerung nämlich auch alle Ports auf High schalten.

Konfiguriert ist die Steuerung derzeit noch für mein Testboard, das STK-500. Für den Controller selbst muss ich es später komplett invertieren.



LG - Maik