Code:
'16-bit Timer als Rechteckgenerator
'mit Voreinstellung
'Achtung: bei kleinen Zeiten ist die Zeit zur Rettung der Register nicht zu vernachlässigen
'Nosave bringt, wenn möglich eine starke Verbesserung
'$sim
$regfile = "8515DEF.DAT"
$crystal = 4000000
'Hier werden die Variablen deklariert
Dim Zaehler As Byte , Timervorgabe1 As Word , A As Byte
'Hier werden die Variablen definiert
Readeeprom A , 1 'read byte back
If A = 255 Then
A = 10
End If
Zaehler = 0
'Hier wird der Timer und der Teiler festgelegt
Config Timer0 = Timer , Prescale = 1024
Config Timer1 = Timer , Prescale = 8
'Der Portc wird als Ausgang programmiert
Config Pinc.0 = Output
Config Pinc.2 = Output
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pinc.7 = Output
Config Pind.7 = Input 'Taster_up
Config Pind.6 = Input 'Taster_down
Config Pind.4 = Input 'Taster_store
Config Debounce = 40 'Tastenentprellung 25ms
'Interne Pullup Widerstände einschalten
Portd.7 = 1
Portd.6 = 1
Portd.4 = 1
'Hier geben wir der Definition einen schöneren Namen
Led0 Alias Portc.0
Led2 Alias Portc.2
Led3 Alias Portc.3
Led4 Alias Portc.4
Led5 Alias Portc.5
Led7 Alias Portc.7
'Hier wird das Unterprogramm festgelegt, das
'in dem eingestellten Intervall aufgerufen wird
On Timer0 Timer0_irq
On Timer1 Timer1_irq
'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
Const Timervorgabe0 = 61
Timervorgabe1 = 45536
'Hier werden die Timer aktiviert
Enable Timer1
Enable Timer0
Enable Interrupts
'Hier ist die Programmhauptschleife
Do
'Hauptprogramm
Gosub Taster_up
Gosub Taster_down
Gosub Taster_store
If A = 0 Then
A = 1
Elseif A = 1 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 0,5Hz
Timervorgabe1 = 49911
Elseif A = 2 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 1Hz
Timervorgabe1 = 57724
Elseif A = 3 Then
Config Timer1 = Timer , Prescale = 256 'Ausgabe 1,5Hz
Timervorgabe1 = 60328
Elseif A = 4 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 2Hz
Timervorgabe1 = 49911
Elseif A = 5 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 2,5Hz
Timervorgabe1 = 53036
Elseif A = 6 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 3Hz
Timervorgabe1 = 55119
Elseif A = 7 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 3,5Hz
Timervorgabe1 = 56607
Elseif A = 8 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 4Hz
Timervorgabe1 = 57724
Elseif A = 9 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 4,5Hz
Timervorgabe1 = 58592
Elseif A = 10 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 5Hz
Timervorgabe1 = 59286
Elseif A = 11 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 5,5Hz
Timervorgabe1 = 59854
Elseif A = 12 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 6Hz
Timervorgabe1 = 60327
Elseif A = 13 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 6,5Hz
Timervorgabe1 = 60728
Elseif A = 14 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 7Hz
Timervorgabe1 = 61072
Elseif A = 15 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 7,5Hz
Timervorgabe1 = 61369
Elseif A = 16 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 8Hz
Timervorgabe1 = 61630
Elseif A = 17 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 8,5Hz
Timervorgabe1 = 61859
Elseif A = 18 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 9Hz
Timervorgabe1 = 62064
Elseif A = 19 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 9,5Hz
Timervorgabe1 = 62247
Elseif A = 20 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 10Hz
Timervorgabe1 = 62411
Elseif A = 21 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 10,5Hz
Timervorgabe1 = 62559
Elseif A = 22 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 11Hz
Timervorgabe1 = 62695
Elseif A = 23 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 11,5Hz
Timervorgabe1 = 62818
Elseif A = 24 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 12Hz
Timervorgabe1 = 62932
Elseif A = 25 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 12,5Hz
Timervorgabe1 = 63036
Elseif A = 26 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 13Hz
Timervorgabe1 = 63132
Elseif A = 27 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 13,5Hz
Timervorgabe1 = 63221
Elseif A = 28 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 14Hz
Timervorgabe1 = 63304
Elseif A = 29 Then
Config Timer1 = Timer , Prescale = 64 'Ausgabe 14,5Hz
Timervorgabe1 = 63381
Elseif A = 30 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 15Hz
Timervorgabe1 = 48869
Elseif A = 31 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 15,5Hz
Timervorgabe1 = 49407
Elseif A = 32 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 16Hz
Timervorgabe1 = 49911
Elseif A = 33 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 16,5Hz
Timervorgabe1 = 50384
Elseif A = 34 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 17Hz
Timervorgabe1 = 50830
Elseif A = 35 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 17,5Hz
Timervorgabe1 = 51250
Elseif A = 36 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 18Hz
Timervorgabe1 = 51647
Elseif A = 37 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 18,5Hz
Timervorgabe1 = 52023
Elseif A = 38 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 19Hz
Timervorgabe1 = 52378
Elseif A = 39 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 19,5Hz
Timervorgabe1 = 52716
Elseif A = 40 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 20Hz
Timervorgabe1 = 53036
Elseif A = 41 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 20,5Hz
Timervorgabe1 = 53341
Elseif A = 42 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 21Hz
Timervorgabe1 = 53631
Elseif A = 43 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 21,5Hz
Timervorgabe1 = 53908
Elseif A = 44 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 22Hz
Timervorgabe1 = 54172
Elseif A = 45 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 22,5Hz
Timervorgabe1 = 54425
Elseif A = 46 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 23Hz
Timervorgabe1 = 54666
Elseif A = 47 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 23,5Hz
Timervorgabe1 = 54897
Elseif A = 48 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 24Hz
Timervorgabe1 = 55119
Elseif A = 49 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 24,5Hz
Timervorgabe1 = 55332
Elseif A = 50 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 25Hz
Timervorgabe1 = 55536
Elseif A = 51 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 25,5Hz
Timervorgabe1 = 55732
Elseif A = 52 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 26Hz
Timervorgabe1 = 55920
Elseif A = 53 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 26,5Hz
Timervorgabe1 = 56102
Elseif A = 54 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 27Hz
Timervorgabe1 = 56277
Elseif A = 55 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 27,5Hz
Timervorgabe1 = 56445
Elseif A = 56 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 28Hz
Timervorgabe1 = 56607
Elseif A = 57 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 28,5Hz
Timervorgabe1 = 56764
Elseif A = 58 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 29Hz
Timervorgabe1 = 56915
Elseif A = 59 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 29,5Hz
Timervorgabe1 = 57061
Elseif A = 60 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 30Hz
Timervorgabe1 = 57203
Elseif A = 61 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 30,5Hz
Timervorgabe1 = 57339
Elseif A = 62 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 31Hz
Timervorgabe1 = 57471
Elseif A = 63 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 31,5hz
Timervorgabe1 = 57599
Elseif A = 64 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 32Hz
Timervorgabe1 = 57723
Elseif A = 65 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 32,5Hz
Timervorgabe1 = 57844
Elseif A = 66 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 33Hz
Timervorgabe1 = 57960
Elseif A = 67 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 33,5Hz
Timervorgabe1 = 58073
Elseif A = 68 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 34Hz
Timervorgabe1 = 58183
Elseif A = 69 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 34,5Hz
Timervorgabe1 = 58289
Elseif A = 70 Then
Config Timer1 = Timer , Prescale = 8 'Ausgabe 34,5Hz
Timervorgabe1 = 58393
End If
Loop
Taster_store:
'Debounce Pina.0 , 1 , Pr 'try this for branching when high(1)
Debounce Pind.4 , 1 , Aus_store , Sub 'Taster offen
Debounce Pind.4 , 0 , Ein_store , Sub 'Taster gedrückt
Return
Taster_up:
'Debounce Pina.0 , 1 , Pr 'try this for branching when high(1)
Debounce Pind.7 , 1 , Aus_up , Sub 'Taster offen
Debounce Pind.7 , 0 , Ein_up , Sub 'Taster gedrückt
Return
Taster_down:
'Debounce Pina.0 , 1 , Pr 'try this for branching when high(1)
Debounce Pind.6 , 1 , Aus_down , Sub 'Taster offen
Debounce Pind.6 , 0 , Ein_down , Sub 'Taster gedrückt
Return
Ein_store:
Led7 = 0
Writeeeprom A , 1 'store at first position
Return
Aus_store:
Led7 = 1
Return
'Unterprogramm Rückstellen mit Taste Down
Ein_down:
If A > 0 Then
Decr A
Else
A = 255
End If
Return
'Unterprogramm Ausgaberoutine Taste Down
Aus_down:
Return
'Unterprogramm Rückwärtszählen mit Taste Up
Ein_up:
If A <= 255 Then
Incr A
Else
A = 0
End If
Return
'Unterprogramm Ausgaberoutine Taste Up
Aus_up:
Return
'Dies ist der Programmteil, der in dem gewählten
'Intervall aufgerufen wird
Timer0_irq:
Timer0 = Timervorgabe0
'Beliebige IRQ-Routine
'Dabei sollte man darauf achten das diese nicht mehr Zeit
'benötigt, als das Intervall zuläßt
If Zaehler < 100 Then
Toggle Led4
Incr Zaehler
Elseif Zaehler > 100 And Zaehler < 255 Then
Led4 = 1
Incr Zaehler
Elseif Zaehler < 255 Then
Incr Zaehler
Else
Toggle Led3
Zaehler = 0
End If
'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt
'Hohe Frequenzen sind natürlich nicht mehr sichtbar
Toggle Led2
Return
Timer1_irq:
Timer1 = Timervorgabe1
'Hier könnte nun ihre beliebige IRQ-Routine stehen
'Dabei sollte man darauf achten das diese nicht mehr Zeit
'benötigt, als das Intervall zuläßt
'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt
'Hohe Frequenzen sind natürlich nicht mehr sichtbar
Toggle Led0
Return
Jetzt kapier ich gar nix mehr...da muss irgendwo nen Fehler hängen...sehs abba net
Lesezeichen