www.mikrocontroller.net

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


Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
}

Autor: TManiac (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.