Forum: Mikrocontroller und Digitale Elektronik Interrupts mit dem C164CI - aber wie?


von Robert (Gast)


Lesenswert?

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();
}

von TManiac (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.