跪求pic 单片机 外部中断函数解析

#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
#define rclk RC6
__CONFIG(0X3B31);

void extern_init()
{
GIE=1;//总中断
PEIE=1;//
INTE=1;//外部中断使能
INTF=0;//外部中断标志位
INTEDG=0;//上升沿触发
TRISB=0x01;
PORTB=0X00;
//WDTE=0;
}

void interrupt INT()
{
INTF=0;
INTE=0;
if(!RB0);
delay(5);
if(!RB0);
a++;
INTE=1;
}
这是我编的程序,当控制开关RB0有变化是,没有产生中断,a的数值没有变化,跪求一个满意的答案。本人菜鸟请多多支持!!

你这个是PIC那个芯片啊,各个PIC芯片型号不同,寄存器也不同。
猜想一下,RB0为中断引脚,那可能是PIC16f88x系列的单片机。
那要好好看看这芯片的数据手册了,这个个PORTB0口还对应了一个AD输入端,如果不对ANSELH(模拟选择器高字节寄存器)这个寄存器进行操作,默认是AD输入。所以你读到的数值就不对了。所以,前头配置时候需要ANSELH = 0; (如果不是F88x系列,那看一下对应的单片机的数据手册)
况且,并不需要那样写中断程序,也不能这样写。 因为PIC单片机没有中断向量入口地址选择。所以它一遇到中断信号便进入中断子函数,如果你的程序还有其他中断的话,就可能出错(或者单片机因干扰,产生内部某个外设模块的中断,也会调用你写的外部中断程序)
所以,首先中断子函数开始就需要判断外部中断标志位INTF是否被置位:
if(INTF)
{
//这个大括号内写你的中断操作
}
根据我做的经验,PIC单片机的中断内部最好不要写延时函数,甚至不要调用其他函数,因为在调用中断子函数时候,需要中断的现场保护。在中断里调用其他函数,会影响现场保护时候的堆栈操作,而引起出错甚至程序跑飞。
所以当中断产生的时候,直接给a++即可,既:
void interrupt INT()
{ GIE = 0;
if(INTF)
{
INTF = 0;
a++;
}
GIE = 1;
}
如果是像按键判断的话,可以改一下硬件电路,在RB0输入前串上一个施密特触发器74HC14,这样可以在硬件上进行消抖。如果非要软件消抖,可以把延时放在主程序里,即进入中断后把一个变量置位,然后退出中断程序,在主程序里延时并判断是否还为1.
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-19
RB中断使能和RB中断标志位都没有,初始化时加上
RBIE=1;
RBIF=0;
在中断服务程序里面加上中断标志
if(RBIF==1)
if(RB0==0)
再试试……

跪求pic 单片机 外部中断函数解析
所以,首先中断子函数开始就需要判断外部中断标志位INTF是否被置位:if(INTF){ \/\/这个大括号内写你的中断操作 } 根据我做的经验,PIC单片机的中断内部最好不要写延时函数,甚至不要调用其他函数,因为在调用中断子函数时候,需要中断的现场保护。在中断里调用其他函数,会影响现场保护时候的堆栈操作,而...

PIC单片机汇编语言的中断程序 ,求人分析一下怎么运行的
很简单的。在main主程序里面 LOOP GOTO LOOP 这条程序,会不停的执行,到了TMR0溢出的时候就会执行中断程序 ORG 0004H为中断程序的地址

PIC18单片机 外部中断INT0,中断触发只能是上升或者下降吗?
PIC18单片机 外部中断INT0,中断触发只能是选择上升或者下降,当然在编程时是可以变通的,比如在 下降沿触发中断后,中断处理时马上设置成上升沿触发中断,上升沿触发中断后,中断处理时又马上设置成下降沿触发中断,

PIC单片机电平变化中断与外部中断有什么区别,电平变化中断怎么用?
PIC的电平变化中断一般在PORTB口才有,跟外部中断的主要区别是不能通过寄存器来改变它的触发沿。使用时主要设置它的优先级、使能电平变化中断就可以了。每次有电平变化就可以进入到中断了,进入中断后记得清中断标志位。

求助关于PIC单片机串口中断的接受和发送问题
你在主函数中先把RCIF标志位清零,你做的应该是SCI串行通信吧,一上电,就表示程序开始执行了,你程序一开始执行就是要进行SCI串行通信,当然一开始就进入中断了,如果你不想这样,你可以连一个按钮,当此按钮按下后就进入中断执行SCI通信

PIC单片机 RCIE&&RCIF语句是什么意思
RCIE 是中断开关,RCIF是中断标志位 RCIE: :USART 接收中断允许位 1 = 允许 USART 接收中断 0 = 禁止 USART 接收中断 RCIF: :USART 接收中断标志位 1 = 中断等待响应 0 = 没有等待响应的中断 收到帧头后,开个1ms定时器,1ms内来一个数收一个数,把这些数放到自己的开的数...

关于单片机中断时两个中断出现的不同情况
外部中断 0是最高的,以此是定时器0,外部中断1,定时器1,串口中断!你按下中断0的时候,因为她的中断优先级是最高的,所以他执行的时候,其他的中断是不能执行的。所以只有显示,没有闪烁。你按下中断1的时候,因为定时器0的优先级是比他搞的,那么这样的话就会使得你中断1执行的时候中断0也是...

懂pic单片机中断函数的帮我看看啊,编译通不过哦,程序中的 "_ISR" 是...
ISR一般是这样定义的 define _ISR __attribute__((interrupt))你可以参考C32使用手册

pic单片机时钟中断程序怎么执行的啊?初学,望赐教!帮忙解释一下这个程...
这是个流水灯程序,:\/定时器装初值 执行while(1)定时器标志位溢出时 程序就进入中断了 中断中 副初值 清除定时器中断的标志位 s加1 主函数while1中 如果s加到25(就是中断了25次) 就 清零s 将c口移位 你用什么型号的pic单片机啊 你确定程序可以运行么???

关于单片机外部中断的疑问(51)
第一,我的外部中断0设定为跳变沿触发,如果来了一次下降沿,在处理中断函数的过程中,又来了一次下降沿,这时怎么办?--处理函数,不宜过长,中断频率,不宜过高。--尽量避免这种现象出现。是同样一个中断。这个问题源于一个关于红外遥控的程序,他的意思就是用一次中断来收集共33位数据,可是33...

相似回答