Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer


von Niclas (Gast)


Lesenswert?

Hallo
ich habe ein Problem mit diesem Code in Bascom.
1
$regfile = "M8def.dat"
2
$crystal = 1000000
3
$hwstack = 100
4
$swstack = 100
5
$framesize = 100
6
7
Dim Ad As Word
8
Dim Ad_triac As Word
9
10
Config Portb.1 = Output
11
config Portb.2 = Output
12
Config Portb.3 = Output
13
Config Portb.4 = Output
14
15
16
Config Portb.1 = Output
17
Const Timer1_preload = 64559
18
Config Timer1 = Timer , Prescale = 1024
19
Enable Timer1
20
Stop Timer1
21
Timer1 = Timer1_preload
22
On Timer1 Isr_timer1
23
Enable Interrupts
24
Config Adc = Single , Prescaler = Auto , Reference = Avcc
25
Start Adc
26
27
On Int0 On_int0
28
Config Int0 = Falling
29
Enable Int0
30
31
32
Do
33
Portb.1 = 0
34
Portb.2 = 0
35
36
37
38
39
40
Loop
41
42
Isr_timer1:
43
Stop Timer1
44
Timer1 = Timer1_preload
45
PortB.1 = 1
46
Return
47
48
On_int0:
49
50
Start Timer1
51
52
Portb.2 = 1
53
Return
54
55
End                                                         'end program
Bei einem interrupt geht eine Led an, wie sie es soll. Gleichzeitig wird 
auch ein Timer gestartet, der wenn er überläuft eine zweite Led zum 
leuchten bringen soll. ich habe es so angedacht, dass diese nach 9ms 
angehen soll. allerdings tut sie es erst nach 1. Sekunde.
Was habe ich falsch gemacht??

Niclas

von lukas (Gast)


Lesenswert?

Dein Timer1 läuft durch den Prescaler von 1024 mit einer Frequenz von 
ca. 977Hz. Periodendauer ca. 1ms.

Durch den Preload von 64559 braucht es 977 (65536 - 64559) Ticks bis der 
Timer überläuft. 1ms * 977 macht ca eine Sekunde. Deine Beobachtung 
stimmt mit deinem Programm überein.

von Niclas (Gast)


Lesenswert?

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.