PIC: Interrupt RB0 als Tasteingang

Gast #518236
Lesenswert?
• ▲
▼
Hallo,

ich bin ziemlich neu in µC-Programmierung, darf mich aber in PICs 
einarbeiten.
Ich habe das MPLAB, PICDEM 2 Plus und CCS Compiler.

Die mirgelieferten Testprogramme laufen, LCD-Display und LED kann ich 
ansteuern. Leider klappt der externe Interrupt an RB0 nicht. Die routine 
wird scheinbar gar nicht durchlaufen.
Zur Vereinfachung habe ich das Programm minimal reduziert, sollt aber so 
doch laufen, oder? An B1 und B2 sind LED , an B0 ist ein Taster 
angeschlossen

Code:

#include<18F452.h>
#fuses HS,NOWDT
#use delay(clock=4000000)
#include<display.c>

boolean a = 0;

#INT_EXT
void ext_isr(void)
{
  output_high(PIN_B2);
  a = !a;
}

void main(void)
{
  enable_interrupts(INT_EXT);
  enable_interrupts(GLOBAL);
  while(1)
  {
    if(a)
      output_high(PIN_B1);
    else
      output_low(PIN_B1);
  }
}

Hat jemand einen Rat für mich?

Vielen Dank!

Gruss

Christoph
Gast #518348
Lesenswert?
• ▲
▼
Hi

Das "auto-I/O" sollte in eurem Fall aktiviert sein.
Deaktivieren tust du es mit der Zeile.
1
#use fast_IO;

Ich rate dir aber stark davon ab, dem CCS-Compiler die Steuerung der 
Tris-Register zu überlassen. Also füg die oben genannte Zeile ein und 
setze die Tris-Register immer selbst. Denn dann weist du auch immer 
welchen Zustand ein Pin gerade hat.

Ich persönlich benutze auch sehr selten die CCS-Internen Befehle, 
sondern setzte meist die Register selbst. Dazu muss man sich zuerst zwar 
eine eigene Header mit den diversen Register Adressen bauen, aber 
dadurch kann man sich dann acuh einiges erleichtern (zb.: Pin toggeln).

Hat bei dir das LED-Blink-Programm funktioniert?

Achja.. wenn du LVP nicht unbedingt brauchst, solltest du es ausschalten 
oder sonst den entsprechenden Pin auf Masse ziehen.

Kennst du die Seite von Sprut? Sie ist zwar für ASM-Programmierung, aber 
dort sind sehr viele nützliche und interessante PIC-Spezifische Sachen 
erklärt.
www.sprut.de

WEiters gibts auf der Seite von Fernando Heitor ein Tutorial für den 
CCS-Compiler, sowie ein sehr empfehlenswertes Forum(wo man als PIC 
Programmierer nicht immer dumm angemacht wird ;-))

http://www.fernando-heitor.de/

Und hier gleich ein Link zum externen Interrupt:
http://www.fernando-heitor.de/component/option,com_openwiki/Itemid,123/id,tutorials:ccs:kapitel_2/

mfg SChoasch
Gast #518585
Lesenswert?
• ▲
▼
Ich habe mit eurer Hilfe weiter probiert:
Den Jumper J6 habe ich entfernt und statt der Ausgabe auf die LED 
(PIN_B1) habe ich die Ausgabe auf den Buzzer (PIN_C2) gelegt.
Das funktioniert!

Sobald ich dann den Jumper J6 wieder stecke, sehe ich, dass meine 
Kontroll-LED (PIN_B2) ebenfalls an ist, aber erst bei dann wieder 
gestecktem J6. Die ISR wurde also durchlaufen und mein Buzzer hat ja 
auch auf die Taste reagiert. Die LEDs an Port B mit der Beschaltung 
machen da die Probleme auf dem PICDEM 2 Plus.

Danke fuer die Hilfe und die Link-Infos!

Grüsse

Christoph

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.