Hi,
ich möchte den Timer 2 im µC 80C552 nutzen. Diesen möchte ich mit einem
Vorsetzwert versehen,damit jede Millisekunde die ISR aufgerufen wird.
Dazu hab ich folgendes in C programmiert:
1 | #include <stdio.h>
|
2 | #include <string.h>
|
3 | #include <reg552.h>
|
4 |
|
5 | int a = 1;
|
6 | int Messlaenge = 0;
|
7 |
|
8 | void Init_Timer2()
|
9 | {
|
10 | EA = 1;
|
11 | TM2CON = 0x81; //Timer 2 16 bit overflow interrupt select + Systemtakt : 12 (T2MS0 & T2MS1)
|
12 | ET2 = 1; //enable Timer 2 overflow interrupts
|
13 | //Mit TMH2 und TML2 wird der Vorsetzwert des Timer 2 festgelegt.
|
14 | //Timer 2 soll alle 1ms ueberlaufen und einen Interrupt produzieren,dies geschieht bei einem Vorsetzwert von 64613d
|
15 | IEN1 = 0x80;
|
16 | TMH2 = 0xFC;
|
17 | TML2 = 0x65;
|
18 |
|
19 | }
|
20 |
|
21 | void Timer2 (void) interrupt 14 using 3 //nutze Registerbank 3
|
22 | {
|
23 | TMH2 = 0xFC;
|
24 | TML2 = 0x65;
|
25 | Messlaenge ++ ; //Messlaenge incrementieren
|
26 |
|
27 |
|
28 | T2OV = 0; //Interrupt Flag zuruecksetzen
|
29 | }
|
30 |
|
31 | void main()
|
32 | {
|
33 | SP=0x52; //Stack Pointer setzen!
|
34 | Init_Timer2(); //Initialisierung Timer 2
|
35 |
|
36 | /* LCD oeffnen */
|
37 |
|
38 |
|
39 | do{
|
40 |
|
41 | /* Messlaenge auf LCD ausgeben*/
|
42 |
|
43 | }while(a=1); //Endlosschleife
|
44 | }
|
Das oben stehende Programm soll die Variable "Messlaenge"(die jede
Millisekunde um 1 erhoeht werden soll) auf dem LCD ausgeben.
Eigentlich müsste ja nach 300ms in der Variable "Messlaenge" 300 drinnen
stehen,doch das tut es nicht.
Erst nach ca. 23 Sekunden steht in der Variable "Messlaenge" der Wert
300.
Was mache ich falsch?
Danke!
Bernhard