[PIC®/AVR®/dsPIC®产品]

PIC12F683电平变化中断触发不了

[复制链接]
3403|15
手机看帖
扫描二维码
随时随地手机跟帖
mm7989680|  楼主 | 2020-12-23 12:08 | 显示全部楼层 |阅读模式
程序如下:
GP4作为输入无法触发电平变化中断,点亮GP0上的LED,哪位指导下
#pragma config FOSC = INTOSCIO  // 4M Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown Out Detect (BOR disabled)
#pragma config IESO = ON        // Internal External Switchover bit (Internal External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)


void main(void) {
         // OSCCON = 0x78;
         //OPTION_REG=0b00000000; //全局使能上拉
         CMCON0 = 0x07;            //关比较器,并设GP0-GP5为数字IO口
         //CMCON1 = 0x07;            //关闭比较器
         ANSEL = 0x00;             //设GP0-GP5为数字IO口
         OPTION_REG = 0b00000000;    //GPIO pull-ups are enabled by individual PORT latch values in WPU register Tck=FOSC/4
         TRISIO4 = 1;                     // 0001 0000 GP4 IN, Other Outputs; Rest are O/Ps
         WPU4 = 0;
         WPU0 = 1;
         IOC4 = 1;                          //GP4 as INT if IO change
         //ADON = 0;

         GIE = 1;
         PEIE = 1;                         //开外部中断
         GPIE = 1;                         //GPIO Change Interrupt Enable bit 开电平变化中断
         //INTE = 1;
         GPtemp = GP4;
         GPIF = 0;                          //GPIO Change Interrupt Flag bit
         GP0=0;
         for(;;)                                             // ?????
         {

         }
}


void interrupt ISR(void)
{
   if(GPIF)            //电平中断
    {
        GPIE=0;
        GPtemp = GP4;
         GP0=1;
        GPIF=0;
        GPIE=1;
    }
    GIE=1;  //开启总中断
}

使用特权

评论回复
systemchip| | 2020-12-23 13:30 | 显示全部楼层
不要在ISR里面操作GIE,非常危险

使用特权

评论回复
lcczg| | 2020-12-23 16:59 | 显示全部楼层
GP0=1是不是能点亮。能的话测下GP4, 在主循环里 if(GP4) GP0=1; else GP0=0; 没问题再测中断部分。

使用特权

评论回复
chuandaoxy| | 2020-12-23 18:17 | 显示全部楼层
lcczg 发表于 2020-12-23 16:59
GP0=1是不是能点亮。能的话测下GP4, 在主循环里 if(GP4) GP0=1; else GP0=0; 没问题再测中断部分。 ...

看一下配置文件,管脚4配置的对吗

使用特权

评论回复
mm7989680|  楼主 | 2020-12-23 19:01 | 显示全部楼层
lcczg 发表于 2020-12-23 16:59
GP0=1是不是能点亮。能的话测下GP4, 在主循环里 if(GP4) GP0=1; else GP0=0; 没问题再测中断部分。 ...

主循环能闪的
      for(;;)                                             // ?????
         {
            
                   delay();
                   GP0 = 0;
                  delay();
                  GP0 = 1;   
              
         }

使用特权

评论回复
mm7989680|  楼主 | 2020-12-23 19:06 | 显示全部楼层
可以了  是proteus 里面的program configurationg word 没有改 要改成0x0CD4

使用特权

评论回复
lcczg| | 2020-12-28 14:22 | 显示全部楼层
mm7989680 发表于 2020-12-23 19:06
可以了  是proteus 里面的program configurationg word 没有改 要改成0x0CD4

配置字你程序里不是定义过了,哪里有冲突?

使用特权

评论回复
guanjiaer| | 2021-1-12 12:50 | 显示全部楼层
一直不可以进入中断吗

使用特权

评论回复
heimaojingzhang| | 2021-1-12 12:53 | 显示全部楼层
看看主循环那能进入判定语句吗

使用特权

评论回复
keaibukelian| | 2021-1-12 12:58 | 显示全部楼层
重复定义也会报错的

使用特权

评论回复
labasi| | 2021-1-12 13:00 | 显示全部楼层
io口的配置的那部分程序贴一下看看

使用特权

评论回复
paotangsan| | 2021-1-12 13:02 | 显示全部楼层
总中断那里开启了吗

使用特权

评论回复
heisexingqisi| | 2021-1-12 21:13 | 显示全部楼层
这个系列没太多复杂度吧

使用特权

评论回复
heisexingqisi| | 2021-1-12 21:14 | 显示全部楼层
是不是有相应的是能没开启

使用特权

评论回复
shangwangmj| | 2021-2-5 13:03 | 显示全部楼层
systemchip 发表于 2020-12-23 13:30
不要在ISR里面操作GIE,非常危险

可以说明一下危害吗?书本都这样教的,进中断先关GIE。改为关PEIE行不?

使用特权

评论回复
systemchip| | 2021-2-5 13:34 | 显示全部楼层
硬件会帮你处理的,不需要你人工干预
85377601cd8fa35c11.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

371

帖子

4

粉丝