Guten Tag.
Habe eine Frage, habe mir ein kleines Programm gebastelt zum Messen von
Zeiten zwischen Zwei Interrupts.
Irgendwie steht der Interruptzähler immer anders obwohl ich GENAU alle
5000Schritte einen Interrupt auf INT0 (Flankenwechsel) ausführe und den
Timer erst beim nächsten Timerwechsel wieder starte um definierte Start
und Stop Punkte zu haben ...
Beschreibung ist ein wenig dürftig da nochnicht fertig ^^.
1
;Programm: Tackte zählen Rechnen
2
;40.000.000 / Tackte
3
;Ergebniss in R21R22R23R24
4
5
6
7
.include "m8def.inc"
8
9
10
.def Zero = r5
11
.def MulSav1 = r7
12
.def MulSav2 = r8
13
.def MulSav3 = r9
14
.def MulSav4 = r10
15
.def MulSav5 = r11
16
.def MulSav6 = r12
17
.def MulSav7 = r13
18
.def MulSav8 = r14
19
.def Temp = r16
20
.def Temp1 = r17
21
.def Temp2 = r18
22
.def Temp3 = r19
23
.def Temp4 = r29
24
.def Ovf = r20
25
.def Mul1 = r21
26
.def Mul2 = r22
27
.def Mul3 = r23
28
.def Mul4 = r24
29
.def Mul5 = r25
30
.def Mul6 = r26
31
.def Mul7 = r27
32
.def Mul8 = r28
33
34
35
.def a0 = r24
36
.def a1 = r23
37
.def a2 = r22
38
.def a3 = r21
39
40
.def b0 = r28
41
.def b1 = r27
42
.def b2 = r26
43
.def b3 = r25
44
45
.def t0 = r29
46
.def t1 = r19
47
.def t2 = r18
48
.def t3 = r17
49
.def t4 = r16
50
51
.org 0x000
52
rjmp Init
53
54
.org 0x001
55
rjmp Int0handler
56
57
.org 0x008
58
rjmp TimerOvf
59
60
61
Init:
62
63
ldi Temp, LOW(RAMEND)
64
out SPL, Temp
65
ldi Temp, HIGH(RAMEND) ;Stack initialiseren
66
out SPH, Temp
67
68
ldi Temp, (1<<TICIE1) | (1<<TOIE1) ; Timer konfigurieren aber nicht starten
69
out TIMSK, Temp
70
;ldi Temp, (1<<CS10)
71
;out TCCR1B, Temp
72
73
ldi Temp, (1<<ISC00)
74
out MCUCR, Temp
75
ldi Temp, (1<<INT0) ; Interrupt konfigurieren
76
out GICR, Temp
77
78
79
ldi Temp, 0x00
80
out DDRD, Temp
81
ldi Temp, 0xFF ; Eingang Konfigurieren
82
out PortD, Temp
83
84
clr Ovf
85
86
sei
87
88
Loop:
89
rjmp Loop ; Endlosschleife
90
91
StartTimer:
92
ldi Temp, (1<<CS10)
93
out TCCR1B, Temp ; Timer Starten um definierte Startzeit zu haben
94
reti
95
96
Int0handler:
97
sbis PinD, 2 ; Je nach Pegel Timer starten oder Rechnen