Hallo zusammen,
ich verwende den BASCOM-Compiler und möchte gern eine LED mit
verschiedenen Frequenzen blinken lassen. Dazu nutze ich den 16Bit-Timer
TIMER1.
Folgener Code bewirkt aber keine Änderung der Blinkfrequenz:
1 | $regfile = "m32def.dat"
|
2 | $crystal = 16000000
|
3 |
|
4 | Led1 Alias Portd.5
|
5 | Taste3port Alias Portd.4
|
6 | Taste3 Alias Pind.4
|
7 |
|
8 | Config Taste3 = Input
|
9 | Config Led1 = Output
|
10 | Config Timer1 = Timer , Prescale = 256
|
11 |
|
12 | Dim Tm As Long
|
13 |
|
14 | On Timer1 Timerroutine
|
15 |
|
16 | Enable Timer1
|
17 | Start Timer1
|
18 |
|
19 | Tm = 59285
|
20 |
|
21 | Enable Interrupts
|
22 |
|
23 |
|
24 | Do
|
25 |
|
26 | Debounce Taste3 , 0 , Set_freq , Sub
|
27 |
|
28 | Loop
|
29 |
|
30 |
|
31 | Timerroutine:
|
32 |
|
33 |
|
34 | If Led1 = 0 Then
|
35 | Led1 = 1
|
36 | Timer1 = Tm
|
37 | Return
|
38 | End If
|
39 |
|
40 | If Led1 = 1 Then
|
41 | Led1 = 0
|
42 | Timer1 = Tm
|
43 | Return
|
44 | End If
|
45 |
|
46 | Return
|
47 |
|
48 |
|
49 | Set_freq:
|
50 |
|
51 | Tm = 3035
|
52 |
|
53 | Return
|
54 | End
|
Anfangs blinkt die LED mit 10Hz, wie über Variable 'Tm' in TIMER1
eingestellt.
Bei einem Druck auf 'Taste3' ruft die Hauptschleife die Subroutine
'Set_freq' auf, und ändert den Wert von 'Tm' auf 3035, was einer Sekunde
entspricht. Leider ändert sich die Blinkfrequenz nicht.
Welchen Fehler mache ich hier?
Gruß,
Matthias