Hallo David,
ich hoffe, dass deine Anzeige nicht bis 99 gehen wird, sonst wird das ja ein riesiges Programm.
Du kannst auch einen ganzen Port mit einem Befehl setzen.
Anstelle von:

Portd.0 = 1
Portd.1 = 1
Portd.7 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 0
Portc.1 = 1
Portc.2 = 1
Portc.0 = 0
Portc.5 = 0
Portc.6 = 0
Portc.4 = 0
Portc.3 = 0

wäre das dann für die "10" einfach

Portd=191 'oder auch PortD = &B10111111, damit du die einzelnen Bits noch siehst
Portc=6

Und der nächste Schritt wäre dann, diese Werte in ein Array abspeichern:
Segmente_zehner(1)=6
Segmente_Einer(0)=191 'siehe Bemerkung unten

Damit hättest du dann auch die ganzen Ifs eingespart und dein Programm sähe dann recht übersichtlich aus:

Code:
$regfile = "m8def.dat"
$crystal = 1000000                                          ' 1MHZ crystal
$sim
Ddrd = &B11111101                       'Pind.2 ist ein Eingang
Ddrc = &B11111111
Config Pinb.1 = Input

Portd.2 = 1
Portb.1 = 1

Dim Segmente_einer(10) As Byte , Segmente_zehner(10) As Byte

Dim A As Byte                           '256 Werte reichen doch
Dim Einer As Byte , Zehner As Byte

Segmente_einer(1) = &B10000011          'bit 2 muss immer gesetzt sein, weil das der Pullup für PORTD.2 ist
Segmente_einer(2) = &B01011111          'bit 2 muss immer gesetzt sein, weil das der Pullup für PORTD.2 ist
'......                                 'hier musst du noch die anderen Werte hinschreiben
Segmente_einer(10) = &B10111111         'Arrays fangen leider mt Index 0 an, deshalb nehmen wir die 10 für die 0

Segmente_zehner(1) = &B00000110
'......                                 'hier musst du noch die anderen Werte hinschreiben

A = 0

Do
   If Pind.2 = 1 Then                   'Zähler hochzählen
      Incr A
      Waitms 50
   End If

   If Pinb.1 = 1 Then                   'Zähler runterzählen
      Decr A
      Waitms 50
   End If
   If A > 19 Then                      '10 als Maximalwert
      A = 0
   End If

   Zehner = A / 10
   If Zehner = 0 Then Zehner = 10       'siehe oben
   Einer = A Mod 10
   If Einer = 0 Then Einer = 10

   Portd = Segmente_einer(einer)
   Portc = Segmente_zehner(zehner)
   Waitms 450
Loop

End
Das wäre alles.

Ich habe den Taster an PINB.1 genauso abgefragt wie den an PIND.2, oder funktioniert der tatsächlich anders herum?

Gruß

Rolf