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

PIC12F683电平变化中断触发不了

[复制链接]
415|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zwll|  楼主 | 2022-9-1 20:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pzsh 于 2022-11-6 21:26 编辑

PIC12F683电平变化中断触发不了

使用特权

评论回复
沙发
supernan| | 2022-9-1 20:07 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
zwll|  楼主 | 2022-9-1 20:09 | 只看该作者
程序如下:
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;  //开启总中断
}

使用特权

评论回复
地板
ousj| | 2022-9-1 20:11 | 只看该作者
不要在ISR里面操作GIE,非常危险

使用特权

评论回复
5
supernan| | 2022-9-1 20:14 | 只看该作者
GP0=1是不是能点亮。能的话测下GP4, 在主循环里 if(GP4) GP0=1; else GP0=0; 没问题再测中断部分。

使用特权

评论回复
6
zwll|  楼主 | 2022-9-1 20:20 | 只看该作者
看一下配置文件,管脚4配置的对吗

使用特权

评论回复
7
zwll|  楼主 | 2022-9-1 20:21 | 只看该作者
主循环能闪的
      for(;;)                                             // ?????
         {
            
                   delay();
                   GP0 = 0;
                  delay();
                  GP0 = 1;   
              
         }

使用特权

评论回复
8
zwll|  楼主 | 2022-9-1 20:23 | 只看该作者

可以了  是proteus 里面的program configurationg word 没有改 要改成0x0CD4

使用特权

评论回复
9
dengdc| | 2022-9-1 20:26 | 只看该作者
配置字你程序里不是定义过了,哪里有冲突?

使用特权

评论回复
10
wyjie| | 2022-9-1 20:29 | 只看该作者
一直不可以进入中断吗

使用特权

评论回复
11
jiajs| | 2022-9-1 20:31 | 只看该作者
看看主循环那能进入判定语句吗

使用特权

评论回复
12
supernan| | 2022-9-1 20:34 | 只看该作者
重复定义也会报错的

使用特权

评论回复
13
yszong| | 2022-9-1 20:36 | 只看该作者
io口的配置的那部分程序贴一下看看

使用特权

评论回复
14
jiajs| | 2022-9-1 20:38 | 只看该作者
总中断那里开启了吗

使用特权

评论回复
15
ousj| | 2022-9-1 20:40 | 只看该作者
这个系列没太多复杂度吧

使用特权

评论回复
16
ousj| | 2022-9-1 20:42 | 只看该作者
是不是有相应的是能没开启

使用特权

评论回复
17
jiaxw| | 2022-9-1 20:44 | 只看该作者
可以说明一下危害吗?书本都这样教的,进中断先关GIE。改为关PEIE行不?

使用特权

评论回复
18
wyjie| | 2022-9-1 20:47 | 只看该作者
硬件会帮你处理的,不需要你人工干预

使用特权

评论回复
19
wyjie| | 2022-9-1 20:50 | 只看该作者

使用特权

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

本版积分规则

885

主题

11314

帖子

5

粉丝