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.