gpt4 book ai didi

c - IOC(图 16f877a)模拟器不会调用 MPLAB XC8 中断例程

转载 作者:行者123 更新时间:2023-11-30 16:53:54 25 4
gpt4 key购买 nike

我写了一些代码,一个简单的程序,试图在 中断期间增加计数器。 。程序构建时没有错误,但存在警告:

:: warning: (1273) Omniscient Code Generation not available in Free mode main.c:32: warning: (520) function "_Interrupt" is never called

#define _XTAL_FREQ 8000000

#include <pic16f887.h>
#include <xc.h>

char counter = 0;
char dummy = 0;

void main(void)
{
TRISB = 0x80; //Configure PORTB pin 7 to input
TRISC = 0xOO; //Configure PORTC to output

INTCONbits.RBIF = 0; //clear interrupt on change flag
INTCONbits.GIE = 1; //enable global interrupts
INTCONbits.RBIE = 1; //enable port change interrupt

while(1)
{
PORTC = counter; //update PORTC with value of counter
}
return;
}

void Interrupt (void)
{
INTCONbits.RBIF = 0; //clear Interrupt on change flag
dummy = PORTB; //do a dummy read to clear IOC flag
counter++; //increment counter
}

在我看到的代码片段中,人们通常在硬件上测试他们的中断。但是我还没有硬件,所以尝试做一些模拟并检查地址寄存器等中的内容。

我假设我能够仅使用软件验证中断例程(请参阅随附的屏幕截图)。 File Registers Counter Variable Address

因此,如果有人能指出我的遗漏,或引导我走向正确的方向,我将不胜感激。

最佳答案

您需要将函数限定符 interrupt 添加到中断服务例程的定义中,以便编译器知道它是一个中断服务例程而不是常规函数,并且可能重命名该函数本身,以便名称和限定符明显分开:

void interrupt ISR (void) //Added 'interrupt' qualifier and renamed function to 'ISR' for clarity.
{
INTCONbits.RBIF = 0; //clear Interrupt on change flag
dummy = PORTB; //do a dummy read to clear IOC flag
counter++; //increment counter
}

关于c - IOC(图 16f877a)模拟器不会调用 MPLAB XC8 中断例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com