Aufgabe:
Ich will einen Timer Interrupt programmieren, der alle 10 ms aufgerufen
wird und innerhalt der ISR soll bei jedem 1000. mal mein Wert
inkrementiert werden. Das will ich mir ausgeben lassen am Terminal..
1 | //======================== Einbinden von Frunktionsbibliotheken =============================//
|
2 |
|
3 | #include <stdio.h> // Standard Ein-/Ausgabefunktionen
|
4 | #include <at89C51cc03.h> // CC03er-Grundregister
|
5 | #include <at89C51cc03.h> // 8051er-Grundregister
|
6 | #include <reg51.h>
|
7 | #include <irq52.h>
|
8 |
|
9 | //======================== Definition von Konstanten =============================//
|
10 | const unsigned char bit LED1 @ 0x92; // Port-Pin P1.1 (Adresse 92h) LED1 low-aktiv
|
11 | const unsigned char bit LED2 @ 0x93; // Port-Pin P1.2 (Adresse 93h) LED2 low-aktiv
|
12 | const unsigned char bit LED3 @ 0x94; // Port-Pin P1.3 (Adresse 94h) LED3 low-aktiv
|
13 | const unsigned char bit LED4 @ 0x95; // Port-Pin P1.4 (Adresse 95h) LED4 low-aktiv
|
14 |
|
15 | const unsigned char bit Button1 @ 0x92; // Port-Pin P1.1 (Adresse 92h) low-aktiv
|
16 | const unsigned char bit Button2 @ 0x93; // Port-Pin P1.2 (Adresse 93h) low-aktiv
|
17 | const unsigned char bit Button3 @ 0x94; // Port-Pin P1.3 (Adresse 94h) low-aktiv
|
18 | const unsigned char bit Button4 @ 0x95; // Port-Pin P1.4 (Adresse 95h) low-aktiv
|
19 |
|
20 | //======================== Deklaration von Funktionen =============================//
|
21 |
|
22 | void initSerial(void);
|
23 | char receiveCharacter(void);
|
24 | int checkCharacter(void);
|
25 | void sendCharacter(char c);
|
26 | void pause(void);
|
27 | unsigned int Messwertausgabe1; // Variable zur Messwertausgabe
|
28 | unsigned int Messwertausgabe2; // Variable zur Messwertausgabe
|
29 | int i;
|
30 | //======================== Hauptprogramm =============================//
|
31 |
|
32 | i=0;
|
33 |
|
34 |
|
35 | void ISR_Timer0 (void) interrupt
|
36 |
|
37 | {
|
38 |
|
39 | TH0 = 0xD8; // Startwert
|
40 | TL0 = 0xF0;
|
41 |
|
42 | i++;
|
43 | if (i == 1000)
|
44 | {
|
45 | TH0 = 0xD8+1;
|
46 | TL0 = 0xF0+1;
|
47 | printf("TH0%d\n", TH0);
|
48 | printf("TL0%d\n", TL0);
|
49 | i=0;
|
50 | }
|
51 |
|
52 | }
|
53 |
|
54 | void main (void)
|
55 |
|
56 | {
|
57 |
|
58 | TH0 = 0xD8; // Startwert
|
59 | TL0 = 0xF0;
|
60 | TMOD = TMOD | 0x01; // Mode 1, 16-Bit-Zähler
|
61 | TR0 = 1; // Timer starten
|
62 |
|
63 | ET0 = 1; // Timer 0 Interrupt einschalten
|
64 | EA = 1; // Globale Interruptfreigabe
|
65 |
|
66 |
|
67 | while(1);
|
68 |
|
69 | }
|
Der Controller ist aus der 8051 Reihe.
Der Mikrocontroller wird mit 12 MHz getaktet. Durch den Teiler von 12
wird TL0 also jede µs inkrementiert.
Mir wird kein Fehler angezeigt, aber ich bekomme die Werte nicht
ausgegeben.. Wo liegt der Fehler?