Hallo Birgit,
ich glaube du hast ein paar Kleinigkeiten noch nicht so recht
verstanden.
1 | void GT1_viIsrTmr3(void) interrupt T3INT = 0x23
|
2 | {
|
3 | P2 = ~P2;
|
4 | }
|
Das ist deine Interrupt-Routine. Mit dem "interrupt T3INT" gibst du an
das dies die für den Timer 3 Overflow Interrupt ist. Das "=0x23" müsste
doch einen Compiler-Fehler produzieren?
1 | // Initialize port 2
|
2 | DP2 = 0x0001;
|
3 | P2 = 0x0000;
|
Damit hast du nur einen einzigen Ausgangs Pin am Port 2. Und zwar den am
P2_0.
Die Zeilen
1 | DP2_9 = 1; // DP 2_9 is an output for LED
|
2 | DP2_10 = 0; // DP 2_10 is an input for the KEY
|
sind recht sinnlos, da du danach in der Init() Funktion die zuvor
aufgeführten Zeilen ausführst.
Ändere also deine Init()-Routine so ab das dort deine vollständige
Initialisierung geschieht und schmeiße die anderen Zeile raus (immer
logischen Code schreiben!!!). Zum Beispiel so:
1 | // Initialize port 2
|
2 | DP2 = 0x0201; // DP2_0 und DP2_9 sind ausgangspins, alle anderen sind eingang
|
3 | P2 = 0x0000;
|
Dein (vielleicht gewolltes) Programm sieht also so aus:
Der Controller invertiert im Hintergrund, gesteuert durch einen
Interrupt, den gesamten Port 2. Das heißt das auf Grund deiner
Port-Initialisierung zu beginn nur der Pin 0 des Ports 2 blinkt.
Wird dann der Taster an P2_10 gedrückt, wird der Zustand an P2_9
invertiert. Wenn alles Gut geht, müsste also danach die LED entgegen der
anderen Blinken.
Ich selber arbeite mit dem Tasking Compiler anstatt dem Keil, daher mag
man mir verzeihen wenn ich mich an manchen Stellen geirrt habe.
Gruß,
TManiac