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







Zitieren
Lesezeichen