Kann es sein, dass der "Input" Befehl den µC ausbremst? oder wartet der bis eine Eingabe kommt?
Code:
'Konfiguration µC:
$regfile = "m8def.dat" 'AT-Mega8
$crystal = 8000000 '18432000
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 8 ' default use 10 for the SW stack
$baud = 38400 '9600
'_______________________________________________________________________________
Ddrb = &B11111111 'PortB = Ausgang (PB0=A usw.)
Ddrc = &B111111 'PortC = Ausgang
Ddrd = &B11110011 'PortD = Ausgang (PD0=Anzeige1, PD4=A2, PD5=A3, PD6=A4) PD2/3 =INT
'Config Int0 = Rising 'Falling 'wechsel von High auf Low
'Config Int1 = Rising 'Falling 'wechsel von High auf Low
'Enable Int0
'Enable Int1
'On Int0 Irq0
'On Int1 Irq1
'_______________________________________________________________________________
Dim Anzeige_akt As Word 'Aktuelle Zeitmessung
Dim Anzeige_str As String * 5 'Zeit als String
Dim Anzeige_str_len As Byte 'String-Länge
Dim Anzeige_ziffer As String * 1 'Aktuelle Ziffer
Dim Anzeige_pos As Byte 'Aktuelle Ziffer im String
Dim I As Byte 'Allgem. Laufzahl
Dim Test As Word
Dim A As Integer
Dim B As Integer
Dim Zeit As Word
Dim Messzeit As Word 'in Millisekunden
Dim Zeitfake As Word 'damit nicht mit dem Wert 0 gerechnet wird
'_______________________________________________________________________________
'TIMER0 Konfiguration für Ziffernwechsel:
Config Timer0 = Timer , Prescale = 1024 '64 '64 -> Timer0 für Anzeige
Const T0_preload = 1 '150 '150 = Startwert Timer0 für 1,2kHz = 300Hz/Anzeige
Tcnt0 = T0_preload
On Timer0 Timer_irq_led 'Timer0-Overflow-Interrupt
Enable Timer0 'Timer0 starten
Enable Interrupts
'_______________________________________________________________________________
Zeit = 0 'gemessene Zeit auf 0 setzen
I = 1
B = 0
Do
'Anzeige:
Anzeige_str = Str(anzeige_akt) ' Wert in String umwandeln
Anzeige_str_len = Len(anzeige_str) ' Stringlänge messen
Anzeige_pos = Anzeige_str_len - I
Anzeige_pos = Anzeige_pos + 1
Anzeige_ziffer = Mid(anzeige_str , Anzeige_pos , 1)
Portc = 0 'Ghosting vermeiden (damit nich auf allen Anzeigen die selbe Zahl steht!!!)
Select Case Anzeige_ziffer 'Ziffer auf Port
Case "0" :
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portb.6 = 1
Portb.7 = 1
Portd.5 = 1
Portd.6 = 0
Portd.7 = 0 'NULL
Case "1" :
Portd.2 = 0
Portd.3 = 1
Portd.4 = 1
Portb.6 = 0
Portb.7 = 0
Portd.5 = 0
Portd.6 = 0
Portd.7 = 0 'EINS
Case "2" :
Portd.2 = 1
Portd.3 = 1
Portd.4 = 0
Portb.6 = 1
Portb.7 = 1
Portd.5 = 0
Portd.6 = 1
Portd.7 = 0 'ZWEI
Case "3" :
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portb.6 = 1
Portb.7 = 0
Portd.5 = 0
Portd.6 = 1
Portd.7 = 0 'DREI
Case "4" :
Portd.2 = 0
Portd.3 = 1
Portd.4 = 1
Portb.6 = 0
Portb.7 = 0
Portd.5 = 1
Portd.6 = 1
Portd.7 = 0 'VIER
Case "5" :
Portd.2 = 1
Portd.3 = 0
Portd.4 = 1
Portb.6 = 1
Portb.7 = 0
Portd.5 = 1
Portd.6 = 1
Portd.7 = 0 'FÜNF
Case "6" :
Portd.2 = 1
Portd.3 = 0
Portd.4 = 1
Portb.6 = 1
Portb.7 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 0 'SECHS
Case "7" :
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portb.6 = 0
Portb.7 = 0
Portd.5 = 0
Portd.6 = 0
Portd.7 = 0 'SIEBEN
Case "8" :
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portb.6 = 1
Portb.7 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 0 'ACHT
Case "9" :
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portb.6 = 1
Portb.7 = 0
Portd.5 = 1
Portd.6 = 1
Portd.7 = 0 'NEUN
Case Else :
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portb.6 = 0
Portb.7 = 0
Portd.5 = 0
Portd.6 = 0
Portd.7 = 0
End Select
'Segment wählen
If I = 1 Then Portc.1 = 1 'EINER
'If I = 2 Then Portc.2 = 1 'ZEHNER
If I = 2 Then
Portc.2 = 1 'ZEHNER
Portd.7 = 1 'EINE Kommastelle
End If
If I = 3 Then Portc.3 = 1 'HUNDERTER
If I = 4 Then Portc.4 = 1 'TAUSENDER
I = I + 1 'Nächste Ziffer
If I >= 5 Then I = 1 'max Anzeigen angeben! damit Anzeige möglichst hell ist(bei 5Anzeigen muss bei der 6. wieder bei 1 Angefangen werden)
'ENDE ANZEIGE
Anzeige_akt = B 'Wert zum anzeigen
Loop
'_______________________________________________________________________________
Timer_irq_led:
Tcnt0 = T0_preload 'Timer wieder laden
A = Udr 'Byte aus UART auslesen
Input B Noecho 'über RS232 empfangen
Print "out " ; B
Return
'-------------------------------------------------------------------------------
'Anschlussbelegung am AT-MEGA8
'-------------------------------------------------------------------------------
'Segment A = PD2 (rote Ader)
'Segment B = PD3
'Segment C = PD4
'Segment D = PB6
'Segment E = PB7
'Segment F = PD5
'Segment G = PD6
'Segment DP = PD7
'Zahl 1 = PC1 ganz rechts EINER (rote Ader)
'Zahl 2 = PC2 2.Stelle von Rechts ZEHNER
'Zahl 3 = PC3 3.Stelle von Rechts Hunderter
'Zahl 4 = PC4 4.Stelle von Rechts Tausender
Lesezeichen