打印

关于PIC中断里面自定义的变量标志位不能调用问题

[复制链接]
1852|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
abadboy|  楼主 | 2013-11-25 12:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位前辈:我用PIC型号为16F877A,想实现单片机进入睡眠后,中断来了,LED灯亮的功能。我建了RB0下降沿和RB4电平变化中断,在中断里面自定义了两位变量标志,有中断响应时,一直调不了这两个标志(中断有效时,将标志位B_Rb0Int 为 1或 B_Rb4Change 为 1,点亮LED),请帮忙看一下哪里有问题,在此谢过啦!

代码如下:


//***********************************************************************************/
#include<pic.h>              //包含单片机内部资源预定义
__CONFIG(0x3F32); //(芯片配置字(关闭看门狗)

#define LED_PWR RD1 //将LED_BUSY宏定义为RD1端口,输出“0”灯亮
bit B_Rb0Int; //自定义RB0中断有效变量标志
bit B_Rb4Change; //自定义RB4中断有效变量标志


//**************************调用初始化设置*****************
void init () //所有没有用到的IO口,都需要设置为输出“0”,否则会吸收信号干扰耗电
{
TRISB = 0x11; //0001_0001 ,RB4、RB0为输入,其他为输出
INTE=1;       //RB0/INT0外部中断允许位,“1”允许RB0/INT0外部中断,默认关闭
OPTION=0X00;  //选项寄存器,关闭开启WDT
RBIE = 1; //使能RB端口电平变化中断
INTF = 0;RBIF = 0; //清零RB0外部中断和RB7-RB4电平变化中断标志位
}

//**************************调用中断函数*****************
void interrupt USART_PIR(void) //中断函数
{
//**************************RB0外部中断*****************
     if(INTF)   
        {   
   INTF = 0; //清零RB0外部中断标志位
   B_Rb0Int = 1; //B_Rb0Int有效变量标志置1
        }
//**************************RB7-4电平变化中断*****************
    else if(RBIF)     //判断是否为RB4电平变化中断
        {   
  RBIF = 0; //清零
  delay1ms(1500); //延时防抖
  if (RB4 == 1)
   {
   RB4 = RB4;   // 读RB4端口的值,
   B_Rb4Change = 1;
   }
  else
   {
   B_Rb4Change = 0; //B_Rb4Change有效变量标志置0
   }
        }
}

//********************主函数***********************
void main()
{
  init (); //调用端口配制初始化
  while(1)
    {
   if (B_Rb0Int || B_Rb4Change)
    {
    LED_PWR = 0; //中断有效时,LED亮
    delay1ms(1500); LED_PWR = 1;
    B_Rb0Int = 0; INTF = 0;  //清零
    B_Rb4Change = 0; RBIF = 0; //清零
    }
      SLEEP();
}
}
沙发
ayb_ice| | 2013-11-25 14:24 | 只看该作者
有没有全局中断标志?
开?

使用特权

评论回复
板凳
abadboy|  楼主 | 2013-11-25 15:23 | 只看该作者
if (B_Rb0Int || B_Rb4Change)
这一栏改为
if (INTF || RBIF)
工作就是正常的

使用特权

评论回复
地板
ayb_ice| | 2013-11-25 16:02 | 只看该作者
abadboy 发表于 2013-11-25 15:23
if (B_Rb0Int || B_Rb4Change)
这一栏改为
if (INTF || RBIF)

那就是说明你全局中断没有打开,

这样就成了查询方式了

使用特权

评论回复
5
abadboy|  楼主 | 2013-11-25 22:08 | 只看该作者
谢谢你的指教,我开了全局中断就正常了!

使用特权

评论回复
6
ayb_ice| | 2013-11-26 09:01 | 只看该作者
abadboy 发表于 2013-11-25 22:08
谢谢你的指教,我开了全局中断就正常了!

给分啊

使用特权

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

本版积分规则

6

主题

15

帖子

0

粉丝