gpt4 book ai didi

c - PIC18F4550外部中断(按钮不工作)

转载 作者:行者123 更新时间:2023-11-30 15:30:33 26 4
gpt4 key购买 nike

我尝试使用外部中断(按钮)来运行使 LED 闪烁的子例程,但是按下按钮时什么也没有发生?

代码没有进入中断例程,我使用变量cpt来检查。

按钮接线正确(我直接尝试连接到 LED 并工作)

我用Proteus模拟了代码,还是不行

#define _XTAL_FREQ 20000000
#include <pic18f4550.h>

// BEGIN CONFIG
#pragma config OSC = HS

static int cpt = 1;

void IntExternal_INT(void) {

TRISB0 = 1; // PORT B0 as input
INT0E = 1;
INTCONbits.GIE = 1;
INTEDG0 = 1; //: Interrupt Edge Select bit : 1 = Interrupt on rising edge of RB0/INT pin

// 0 = interrupt on falling edge
INT0F = 0;

}

void delay() {
volatile int i, j;
for (i = 0; i < 2000; i++)
for (j = 0; j < 10; j++);
}

void interrupt ISR(void) {
cpt++;

if (INT0IF) //If External Edge INT Interrupt
{

LATDbits.LATD0 = 1; // RD-0 to High
LATDbits.LATD1 = 1; // RD-1 to High

delay();

LATDbits.LATD0 = 0; // RD-0 to LOW
LATDbits.LATD1 = 0; // RD-1 to LOW

delay();

INT0IF = 0; // clear the interrupt
}
}

void main(void) {
IntExternal_INT();
TRISD = 0xF0; // PORT B Setting: Set all the pins in port D to Output.
while (1) {
if (cpt % 2 == 0) {

delay();


LATDbits.LATD0 = 1; // RD-0 to High
LATDbits.LATD1 = 1; // RD-1 to High



delay();


LATDbits.LATD0 = 0; // RD-0 to LOW
LATDbits.LATD1 = 0; // RD-1 to LOW


}
}
}

在实际方案中,我对 MCLR->vss 和 LED->vss 使用上拉电阻

enter image description here

最佳答案

您需要启用外设中断和全局中断:

PEIE = 1

INTCONbits.PEIE = 1

运行前

INTCONbits.GIE = 1;

关于c - PIC18F4550外部中断(按钮不工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553762/

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