首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

为什么开机就进中断??

为什么开机就进中断??

程序问题!!开机就进中断,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--){;}
 }
}

试着确定是什么中断?

这有可能是你的reset地址后面没有跳到main入口的语句造成的。

因为在reset地址一般是0x00,后面就是中断向量表,如果0x00中没有跳到main的语句就会执行中断向量表中的程序。

具体情况,具体分析。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

 ?

返回列表