Hallo zusammen, im Rahmen eines Schulprojektes möchte ich eine Steuerung mit dem C164CI umsetzen. Nun bin ich auf ein Problem mit den Interrupts gestoßen. Irgendwie will das ganze nicht funktionieren. Habe zwar ein Beispiel mit nem C167, aber das bringt mich nicht weiter(andere Befehle). Habe mir mit der Produktbeschreibung mal ein Programm zusammen gestrickt, aber ohne Erfolg. Kann mir vielleicht jemand weiterhelfen? Was habe ich falsch gemacht, bzw. was muss ich ergänzen? Danke für eure Hilfe! Gruß Robert Anbei das Testprogramm: #include <REG164.H> #include <intrins.h> #include <stdlib.h> void main (void) { DP1H=0xff; P1H=0x0; EXISEL=0xffff; CC16IC=0x0044; //Prot 8.0 IEN=1; while(1); } void ext_int_an_p8_0 (void) interrupt 0x30 { P1H++; lcd_init(); lcd_clr(); }
Hallo Robert, der C164CI (was für einen Aufbau hast du? Hat dieser 2x40 Pins?) hat sehr wohl den gleichen Befehlsatz wie der C167, genauso wie alle anderen aus der Familie bis hin zu den XC23xx. Es gibt ein paar Unterschiede bei den Dialekten der C-Compiler, das hat aber nix mit dem µC zu tun. Welcher Compiler wird genutzt. Wo tritt der Fehler auf? Beim compilieren oder reagiert der µC nur nicht wie gewollt ( was ich jetzt mal annehme)? zu deinem Code: EXISEL ist für bestimmte Interupt Eingangsquellen, den "Fast external interrupts". Diese haben den Namen EX#IN. Also wird die Zeile nicht benötigt, es sei denn es ist gewollt. Dann musst du aber das Register EXICON setzen, weil "0 0: Fast external interrupts disabled: standard mode" Auf alle Fälle darf EXISEL nicht 0xffff sein, da laut Manual erreichst das: "11: Input from pin EXxIN ANDed with alternate pin." Es muss mit "01: Input from alternate pin." belegt werden wenn du P8.0 nehmen willst, da "CAN1_RxD CAN 1 Receive Data Input" <-> "EX0SS Associated Interface Line: CAN1_RxD" {Wenn ich ein Fehler beim Interpretieren des UM gemacht sagt bescheid, in der Ecke war ich bisher nicht) Nicht jeder externe Interrupt hat etwas mit den "EX#IN"s zutun. Es gibt auch normale externe Interrupts. P8.0 geht auch als normale Interruptquelle, was einfacher ist. Dann scharst du dir die ganze "EX.." Befehle. Jetzt musst du aber noch sagen ob CC16 Capture oder Compare Funktion hat. Dafür ist CCM4 zuständig. Je nach gewünschter Auslöse Flanke muss der Abschnitt CCMOD16 in CCM4 gleich #01b bis #11b groß sein (# -> kommt auf den gewünschten Timer an, bei dir egal also lass es gleich 0 ) Was machen die lcd-Funktionen in der Interuptroutine? Was ist deren Aufgabe?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.