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

PIC12F683电平变化中断触发不了

[复制链接]
4218|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配置的对吗

使用特权

评论回复
5
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;   
              
         }

使用特权

评论回复
6
mm7989680|  楼主 | 2020-12-23 19:06 | 只看该作者
可以了  是proteus 里面的program configurationg word 没有改 要改成0x0CD4

使用特权

评论回复
7
lcczg| | 2020-12-28 14:22 | 只看该作者
mm7989680 发表于 2020-12-23 19:06
可以了  是proteus 里面的program configurationg word 没有改 要改成0x0CD4

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

使用特权

评论回复
8
guanjiaer| | 2021-1-12 12:50 | 只看该作者
一直不可以进入中断吗

使用特权

评论回复
9
heimaojingzhang| | 2021-1-12 12:53 | 只看该作者
看看主循环那能进入判定语句吗

使用特权

评论回复
10
keaibukelian| | 2021-1-12 12:58 | 只看该作者
重复定义也会报错的

使用特权

评论回复
11
labasi| | 2021-1-12 13:00 | 只看该作者
io口的配置的那部分程序贴一下看看

使用特权

评论回复
12
paotangsan| | 2021-1-12 13:02 | 只看该作者
总中断那里开启了吗

使用特权

评论回复
13
heisexingqisi| | 2021-1-12 21:13 | 只看该作者
这个系列没太多复杂度吧

使用特权

评论回复
14
heisexingqisi| | 2021-1-12 21:14 | 只看该作者
是不是有相应的是能没开启

使用特权

评论回复
15
shangwangmj| | 2021-2-5 13:03 | 只看该作者
systemchip 发表于 2020-12-23 13:30
不要在ISR里面操作GIE,非常危险

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

使用特权

评论回复
16
systemchip| | 2021-2-5 13:34 | 只看该作者
硬件会帮你处理的,不需要你人工干预

使用特权

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

本版积分规则

113

主题

374

帖子

4

粉丝