Interrupt an RB0 mit PIC18F25J10

OP #1659638
Lesenswert?
• ▲
▼
Hallo alle zusammen.
Ich möchte meinen PIC18F25J10 so einstellen, das er bei steigender 
Flanke an RB0 einen Interrupt auslöst und in die Interrupt-Routine 
springt. Wenn ich mir das nun mit meinem ICD2 anschaue, dann klappt das 
nicht. Er spingt nicht in die Routine. Habe ich eventuell ein Register 
falsch eingestellt?
als Compiler benutze ich den C18.
Hier mein Quellcode:
#include <p18cxxx.h>

//Konfiguration
#pragma config DEBUG=ON      //Background Debugger enabled, , , , , , ,
#pragma config XINST=OFF    //Instruction set extension disabled
#pragma config STVREN=OFF    //Reset on stack overflow disabled
#pragma config WDTEN=OFF    //Watchdog timer disabled
#pragma config CP0=OFF      //Programm memory is not code protected
#pragma config FCMEN=OFF    //Fail-Safe clock monitor disabled
#pragma config IESO=ON      //Two-speed startup enabled (nur wenn OSC 
auf HS steht)
#pragma config FOSC2=ON      //Clock selected by FOSC as system clock is 
enabled when OSCCON<1:0> = 00
#pragma config FOSC=HS      //High Speed oscillator
#pragma config WDTPS=1      //Watchdog Timer postscale = 1:1


void high_isr (void);              //Funktionsprototyp für Interrupt 
hohe Priorität

//Interrupt mit hoher Priorität
#pragma code high_vector=0x08
void high_interrupt(void)
{
    _asm GOTO high_isr _endasm           //Sprung zur eigentlichen ISR
}
#pragma code                   //return to the default code section
void high_isr (void)
{
  //hier Serviceroutine eintragen
  while(1);
}

//////////////////////
//  Initialisierung  //
//////////////////////

void init_ports (void)              //1=Eingang, 0=Ausgang
{
  ADCON1 = 0b00001111;            //alle digitale I/O (Datenblatt S.218)
  TRISA = 0b00000111;              //RA0...RA2 Eingänge, RA3...RA7 
Ausgänge
  PORTA = 0;                  //alle zurücksetzen
  TRISB = 0b00000001;              //RB0 = external interrupt 0 input
  PORTB = 0;                  //alle zurücksetzen
}
void init_interrupt(void)
{
  INTCON = 0b11010000;            //Interrupts generell erlauben, 
externen interrupt0 ein
  INTCON2bits.INTEDG0 = 1;          //interrupt an RB0 reagiert auf 
steigende Flanke (bit6 > INTEDG0)
  INTCONbits.INT0IF = 0;            //Interrupt zurücksetzen > auf 
erneuten Interrupt an RB0 warten
}

//////////////////////
//  Hauptprogramm  //
//////////////////////

void main (void)
{
  OSCCON = 0b00000000;            //Primary oscillator
  init_ports();
  init_interrupt();

while(1);
}


Vielen Dank für eure Hilfe und noch frohe Ostern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.