Ich habe hier obrigen Code gefunden.Code:$crystal = 4000000 $regfile = "m32def.dat" Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0 Config Lcdbus = 4 Config Pind.2 = Input 'extern INT0 ' Empfangsstatus auf LED ausgeben, damit man sieht, ' ob der AVR auch arbeitet Config Pina.0 = Output Set Portd.2 Set Porta.0 ' Wert des Prescaler durch Testen ermittelt. Config Timer0 = Timer , Prescale = 256 '4000000 / 256 = 15625 Hz Const Startwert = 100 'Überlauf 256 - Startwert 100 = 156 ( 15625 Hz / 156 = 100,1 Hz ) => 10ms Load Timer0 , Startwert Dim I As Byte Dim J As Byte Dim K As Byte Dim Impuls As Byte Dim Pause As Integer Dim Sekunde As Byte Dim Wert As Byte Dim Paritaet As Byte Dim Checker As Byte Dim Wochentag As String * 14 Dim Temp As String * 2 Wochentag = "MoDiMiDoFrSaSo" ' String mit Kuerzel der Wochentage Dim Werte_bit(6) As Byte Dim Werte_start(6) As Byte Dim Minute(42) As Byte ' Enthaelt die Sekunden-Impulse 0 und 1 ' Arrays für Startposition und Laenge der Daten im Array Minute() Werte_start(1) = 4 'Minuten Werte_bit(1) = 6 Werte_start(2) = 12 'Stunden Werte_bit(2) = 5 Werte_start(3) = 19 'Tag Werte_bit(3) = 5 Werte_start(4) = 25 'Wochentag Werte_bit(4) = 2 Werte_start(5) = 28 'Monat Werte_bit(5) = 4 Werte_start(6) = 33 'Jahr Werte_bit(6) = 7 Impuls = 0 Pause = 0 Sekunde = 0 Checker = 0 ' Checker = 0 : Start ' Checker = 1 : Aktuelle Messung nicht erfolgreich ' Checker = 2 : Daten schenen in Ordnung zu sein Config Int0 = Falling '-> bei negiertem DCF-Signal, 'sonst Config Int0 = Rising !!! Enable Interrupts Enable Int0 Enable Timer0 'enable the interrupt On Int0 Zaehle Nosave On Ovf0 Tim0_isr 'Überlauf alle 10ms Cls Cursor Off Lcd "-- --.--.-- --:--:--" ' Display bei Start Do 'endless loop nop Loop End 'end program ' Routine zaehlt Sekunden und wertet Impuls- und Pausenzeit aus. Zaehle: 'Für Debug eingebaut: (zeigt Impuls und Pausenlänge) 'Locate 3 , 1 : Lcd "Imp: " ; Impuls 'Locate 3 , 10 : Lcd "Pau: " ; Pause Incr Sekunde If Sekunde > 18 Then K = Sekunde - 18 If Impuls > 17 Then Minute(k) = 1 Else Minute(k) = 0 End If End If Locate 1 , 19 Wert = Makebcd(sekunde) ' Umweg ueber BCD, dann fuehrende 0 Lcd Bcd(wert) ' Sekunde anzeigen If Pause < 300 And Pause > 200 Then 'Minutenanfang If Checker = 0 Then ' Checker-Flag setzen Checker = 1 Else Checker = 2 Gosub Check_parity End If Sekunde = 0 ' Sekunde 0 setzen Locate 1 , 19 Lcd "00" ' und anzeigen End If If Checker = 2 Then Gosub Dekoder Checker = 1 End If Impuls = 0 Pause = 0 Return ' Timer incrementiert die Zaehler Tim0_isr: Load Timer0 , Startwert If Pind.2 = 0 Then Incr Impuls Set Porta.0 Else Incr Pause Reset Porta.0 End If Return ' Ueberprufung der empfangenen Daten Check_parity: Locate 4 , 1 Lcd Sekunde ' Debug-Ausgabe bei schlechtem Empfaenger ' Stimmt die Zahl der Sekunden? If Sekunde <> 59 Then Checker = 1 End If 'pruefe Minutenparitaet Paritaet = 0 For I = 4 To 10 Paritaet = Paritaet + Minute(i) Next I Paritaet = Paritaet And 1 If Paritaet <> Minute(11) Then Checker = 1 End If Paritaet = 0 'pruefe Stundenparitaet For I = 12 To 17 Paritaet = Paritaet + Minute(i) Next I Paritaet = Paritaet And 1 If Paritaet <> Minute(18) Then Checker = 1 End If 'Lcd Checker 'pruefe Rest Paritaet = 0 For I = 19 To 40 Paritaet = Paritaet + Minute(i) Next I Paritaet = Paritaet And 1 If Paritaet <> Minute(41) Then Checker = 1 End If 'Lcd Checker Return ' Daten im Minuten-Array dekodieren und ausgeben. Dekoder: ' Schleife, weil kompakter For K = 1 To 6 Wert = 0 J = Werte_start(k) + Werte_bit(k) For I = J To Werte_start(k) Step -1 Shift Wert , Left Wert = Wert + Minute(i) Next I J = Werte_start(k) Minute(j) = Wert Next K ' Wochentag aus String schneiden. K = Minute(25) * 2 K = K - 1 Temp = Mid(wochentag , K , 2) ' Raus damit, aufs LCD Locate 1 , 1 Lcd Temp ; " " ; Bcd(minute(19)) ; "." ; Bcd(minute(28)) ; "." ; Bcd(minute(33)) Lcd " " ; Bcd(minute(12)) ; ":" ; Bcd(minute(4)) Return
Was muss ich machen:
-wenn ich das ganze mit 10 MHz betreiben will?
-Stunde, Minute und Tag als Variable verwenden will mit denen ich z.B.
if hour = 10.35 then
...
machen will.
Mfg
EDE







Zitieren

Lesezeichen