0

MPLAB シミュレータでタイマー 1 割り込みをデバッグしようとしましたが、デバッガが割り込みサービス ルーチンに行かないようです。

タイマー 1 の設定は私には正しいように思えますが、何か他のものを見逃したかどうかはわかりません。ここにデータシートがあります

/*  
     File: main.c
     Date: 2011-SEP-4
     Target: PIC18F87J11
     IDE: MPLAB 8.76
     Compiler: C18 3.40

 */
#include <p18cxxx.h>

#pragma config FOSC = INTOSC, WDTEN = OFF, XINST = OFF

#pragma code HighISR = 0x08 // high priority 0x18
#pragma interrupt HighISR



int time = 0;

void main(void) {
    /* set FOSC clock to 8MHZ */
    OSCCON = 0b01110000;

    /* turn off 4x PLL */
    OSCTUNE = 0x00;

    /* make all ADC inputs digital I/O */
    ANCON0 = 0xFF;
    ANCON1 = 0xFF;

    // 1/1 prescalar
    T1CONbits.T1CKPS1 = 0;
    T1CONbits.T1CKPS0 = 0;

    // Use Internal Clock
    T1CONbits.TMR1CS = 0;

    // Timer1 overflow interrupt
    PIE1bits.TMR1IE = 1;

    // Enable Timer 1
    T1CONbits.TMR1ON = 1;

    INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
    INTCONbits.GIE = 1; // Enable Global Interrupt



    while (1);

}


// Timer Interrupt

void HighISR(void) {
    if (PIR1bits.TMR1IF == 1) {
        time++;
        PIR1bits.TMR1IF = 0;
    }


}
4

1 に答える 1

0

何が欠けていたのかがわかりました...

 #pragma code highVector=0x08
        void HighVector (void)
        {
            _asm goto HighISR _endasm
        }
        #pragma code /* return to default code section */

これで、プログラム全体は次のようになります

/*  
     File: main.c
     Date: 2011-SEP-4
     Target: PIC18F87J11
     IDE: MPLAB 8.76
     Compiler: C18 3.40

 */
#include <p18cxxx.h>

#pragma config FOSC = INTOSC, WDTEN = OFF, XINST = OFF
#pragma interrupt HighISR



int time = 0;

void main(void) {
    /* set FOSC clock to 8MHZ */
    OSCCON = 0b01110000;

    /* turn off 4x PLL */
    OSCTUNE = 0x00;

    /* make all ADC inputs digital I/O */
    ANCON0 = 0xFF;
    ANCON1 = 0xFF;

    // 1/1 prescalar
    T1CONbits.T1CKPS1 = 0;
    T1CONbits.T1CKPS0 = 0;

    // Use Internal Clock
    T1CONbits.TMR1CS = 0;

    // Timer1 overflow interrupt
    PIE1bits.TMR1IE = 1;

    // Enable Timer 1
    T1CONbits.TMR1ON = 1;

    INTCONbits.PEIE = 1; // Enable Perpherial Interrupt
    INTCONbits.GIE = 1; // Enable Global Interrupt



    while (1);

}


 #pragma code highVector=0x08
        void HighVector (void)
        {
            _asm goto HighISR _endasm
        }
        #pragma code /* return to default code section */


// Timer Interrupt
void HighISR(void) {
    if (PIR1bits.TMR1IF == 1) {
        time++;
        PIR1bits.TMR1IF = 0;
    }


}
于 2013-11-03T20:11:07.057 に答える