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

跪求pic 单片机 外部中断函数解析,第1张

你这个是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.

首先,在初始化中设置好I/O口功能。开中断,初始化串口。

然后写个余枝串口中断函数,例如:

void interrupt isr(void)

if(RCIE&&RCIF) //串口接收中断

{

while(!RCIF)

NOP()NOP()NOP()

recive_dat[1]=RCREG//接收1位数据

NOP()NOP()NOP()

CREN=0

NOP()NOP()NOP()

CREN=1

}

当然,你把括号中加上你的函数就好了。

本人建议不要在中断中处理函数,最好在中断中返回个标志位竖芹敏,然后在主函数中执行函数。

如果一定要在中断中执行函数,这个函数最好在其他地方不使用,否则容易出错首春哦。

你说的RXIF我不知道,我只知道RCIF。

很简单的。

在main主程序里面

LOOP GOTO LOOP

这条程序,会不停的执行,到了TMR0溢出的时候就会执行中梁盯断程序颤逗

ORG 0004H为中断程序茄渣卖的地址


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8258149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存