'name : eeprom schreiben.bas 'purpose : Versuchsschaltung 'micro : attiny24 '------------------------------------------------------------------------------- $regfile = "attiny24.dat" ' specify the used micro $crystal = 128000 ' used crystal frequency $hwstack = 20 ' default use 32 for the hardware stack Config Adc = Single , Prescaler = Auto Config Portb = &B00000000 ' oder lieber ddrb = &B00000000 ? Config Porta = &B11111111 ' oder lieber ddra = &B00000000 ? ' 7-Segment-Anzeige Zuordnung zu den Pins: ' a -> Pina.0 ' b -> Pina.1 ' c -> Pina.2 ' d -> Pina.3 ' e -> Pina.4 ' f -> Pina.5 ' g -> Pina.6 ' dp-> Pina.7 ' ' Dim B As Byte Dim A As Byte Dim Eingang As Byte Dim Nmz As Eram Byte ' 10er Minute Nord Dim Nme As Eram Byte ' einer Minute Nord Dim Nn1 As Eram Byte ' erste Nachkommastelle Dim Nn2 As Eram Byte ' zweite Nachkommastelle Dim Nn3 As Eram Byte ' dritte Nachkommastelle Dim Emz As Eram Byte ' 10er Minute Ost Dim Eme As Eram Byte ' einer minute Ost Dim En1 As Eram Byte ' erste Nachkommastelle Dim En2 As Eram Byte ' zweite Nachkommastelle Dim En3 As Eram Byte ' dritte Nachkommastelle ' Declare Sub Progmodus Declare Sub Zahl Declare Sub Speichern Portb = 1 ' Taster auf Ground schalten, so den Pullup Widerstand nutzbar Porta = 1 ' erstmal alles leuchten lassen! Wait 2 $eeprom ' eeprom-Variablen mit Werten füllen Nmz = &B00111111 Nme = &B00000110 Nn1 = &B01011011 Nn2 = &B01001111 Nn3 = &B01100110 Emz = &B01101101 Eme = &B01111100 En1 = &B00000111 En2 = &B01111111 En3 = &B01100111 $data ' Hier beginnt die Hauptschleife Do Porta = &B01000000 ' nur für mich zur Kontrolle Wait 1 Porta = 0 ' Licht wieder ausknipsen -> nun soll es in die Subroutine gehen if Portb.0 = 0 then gosub Progmodus ' hier einfach nur die Eeprom-Speicher ausgeben Porta = Nmz Wait 1 Porta = Nme Wait 1 Porta = Nn1 Wait 1 Porta = Nn2 Wait 1 Porta = Nn3 Wait 1 Porta = Emz Wait 1 Porta = Eme Wait 1 Porta = En1 Wait 1 Porta = En2 Wait 1 Porta = En3 Wait 1 Loop End Progmodus: A = 0 B = 0 ' richtig und erforderlich? Eingang = 0 while portb.0 = 0 debounce portb.2 , 0 , Speichern , Sub debounce portb.1 , 0 , Zahl , Sub wend Return Sub Zahl Eingang = Eingang + 1 ' Zahl hochsetzen Select Case Eingang ' Wertezuordnung gem. Hochzählung von Eingang Case 0 : B = &B00111111 Case 1 : B = &B00000110 Case 2 : B = &B01011011 Case 3 : B = &B01001111 Case 4 : B = &B01100110 Case 5 : B = &B01101101 Case 6 : B = &B01111100 Case 7 : B = &B00000111 Case 8 : B = &B01111111 Case 9 : B = &B01100111 ' Case Else: gosub Ueberlauf ' noch auskommentiert, da nicht sicher ob es funktionieren kann End Select Porta = B End Sub Sub Speichern If A = 0 Then Gosub P0 If A = 1 Then Gosub P1 If A = 2 Then Gosub P2 If A = 3 Then Gosub P3 If A = 4 Then Gosub P4 If A = 5 Then Gosub P5 If A = 6 Then Gosub P6 If A = 7 Then Gosub P7 If A = 8 Then Gosub P8 If A = 9 Then Gosub P9 If A > 9 Then Gosub PA Porta = B A = A + 1 ' nach dem Schreiben Hochzählen für die nächste Stelle End Sub P0: 'Schreiben 10er Minute Nord $eeprom Nmz = B $data Return P1: 'Schreiben einer Minute Nord $eeprom Nme = B $data Return P2: 'Schreiben erste Nachkommastelle $eeprom Nn1 = B $data Return P3: 'Schreiben zweite Nachkommastelle $eeprom Nn2 = B $data Return P4: 'Schreiben dritte Nachkommastelle $eeprom Nn3 = B $data Return P5: 'Schreiben 10er Minute Ost $eeprom Emz = B $data Return P6: 'Schreiben einer minute Ost $eeprom Eme = B $data Return P7: 'Schreiben erste Nachkommastelle $eeprom En1 = B $data Return P8: 'Schreiben zweite Nachkommastelle $eeprom En2 = B $data Return P9: 'Schreiben dritte Nachkommastelle $eeprom En3 = B $data Return PA: ' Was zu viel ist ist einfach zu viel! A = 0 PortA = &B11111111 wait 1 PortA = 0 wait 1 PortA = &B11111111 Return Ueberlauf: ' zurück zum Anfang und gehen sie nicht über Los und ziehen sie nicht.... Eingang = 0 B = &B00111111 Return