| 
 
| 各位前辈:我用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();
 }
 }
 | 
 |