程序问题!!开机就进中断,RB口电平没有变化,直接就进入中断了, 我在RB5口又加了个判断,才解决,可是为什么开机就中断呢/???? 程序质量不够!!怎么改进呢,大虾们多指较!!! #include<pic.h> #include<pic16f62xa.h> __CONFIG(WDTDIS&WRTEN&MCLRDIS&BOREN&UNPROTECT); #define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit)) static bit PORT_0 @ PORTBIT(PORTB,0); //定义PORTB 0位*/ static bit PORT_1 @ PORTBIT(PORTB,1); //定义PORTB 1位*/ static bit PORT_2 @ PORTBIT(PORTB,2); //定义PORTB 2位*/ static bit PORT_3 @ PORTBIT(PORTB,3); //定义PORTB 3位*/ static bit PORT_4 @ PORTBIT(PORTB,4); //定义PORTB 4位*/ static bit PORT_5 @ PORTBIT(PORTB,5); //定义PORTB 5位*/ static bit PORT_6 @ PORTBIT(PORTB,6); //定义PORTB 6位*/ static bit PORT_7 @ PORTBIT(PORTB,7); //定义PORTB 7位*/ void PORTBINT(); //RB口初始化 void INTRB(); //RB口中断服务程序 void delay (int x) ;//延时程序。 main() { delay(10);  ORTBINT(); //初始化RB口 ei(); //开启总中断 while(1) //等待中断 { ; } }
void PORTBINT() //RB口初始化 { TRISB=0xF0; //设置RB口为输入方式 RBPU=0; //开启RB口弱上拉  ORT_5=1; //RB5 先送高电平 RBIE=1; //开启RB口中断  ORTB=PORTB; //读PORTB口,锁存旧值,为变位中断创造条件
} void interrupt RB() //RB口中断服务程序 { if (RBIF==1) //是否RB口中断 { if(PORT_5==0) INTRB();} //是否高电平到低电平变化引起中断,剔出低至高变化中断。 }
void INTRB() //RB口中断服务程序 { RBIF=0; //清 RB口中断标志位  ORTB=PORTB; //读PORTB口,改变中断发生的条件,防止开到位开关一直处于闭合状态时, //再次发生中断
TRISA=0; RA0=1; //BA0输出高电平 } void delay (int x) //延时程序。 { int y; while(x--) { for(y=1000;y>0;y--){;} } }
|