⑴ 什么是单片机的中断序号中断序号1表示什么 中断序号3表示什么
单片机的中断序号决定该中断的中断向量的位置(即中断服务程序的入口地址)
即 中断序号就是中断源在单片机的中断向量表中的位置序号。
具体关系: 中断向量=0003H+中断序号×8
例如:
中断0(即中断序号为0 ) 其中断向量=中断服务程序的入口地址=0003H
中断1(即中断序号为1 ) 其中断向量=中断服务程序的入口地址=000BH
对于51单片机:
中断序号0 表示的是外部中断0的中断序号
中断序号1 表示的是定时计数器0的中断序号
中断序号2 表示的是外部中断1的中断序号
中断序号3 表示的是定时计数器1的中断序号
中断序号4 表示的是串行口的中断序号
中断序号5 表示的是定时计数器2的中断序号
呵呵 满意就选满意回答吧
⑵ PIC单片机有哪些中断标志位
PIC16F87X的中断标志位
INTF 外部触发中断标志位
T0IF TMR0溢出中断标志位
RBIF RB端口电平变化中断标志位
TMR1IF TMR1溢出中断标志位
TMR2IF TMR2溢出中断标志位
CCP1IF CCP1中断标志位
CCP2IF CCP2中断标志位
TXIF SCI同步发送中断标志位
RCIF SCI同步接收中断标志位
SSPIF SSP中断标志位
BCLIF SSP IIC总线冲突中断标志位
PSPIF 并行端口中断标志位
ADIF A/D转换中断标志位
EEIF EEPROM中断标志位
PIC874/877 中断源数量 14种
PIC873/876 中断源数量 13种
PIC870 中断源数量 10种
PIC871 中断源数量 11种
PIC872 中断源数量 10种
⑶ c语言 PIC单片机
你这是PIC16位机的中断编程规定的格式,包括_T1Interrupt都是规定的,连大小写都得一模一样。这个是定时器1的中断函数申明。你可以在C30手册中看到它们,
如可以看到其他中断入口的名称:
0 _INT0Interrupt
1 _IC1Interrupt
2 _OC1Interrupt
3 _T1Interrupt
4 _IC2Interrupt
5 _OC2Interrupt
6 _T2Interrupt
7 _T3Interrupt
8 _SPI1Interrupt
9 _U1RXInterrupt
10 _U1TXInterrupt
11 _ADCInterrupt
12 _NVMInterrupt
13 _SI2CInterrupt
14 _MI2CInterrupt
15 _CNInterrupt
16 _INT1Interrupt
17 _IC7Interrupt
18 _IC8Interrupt
19 _OC3Interrupt
20 _OC4Interrupt
。。。。。。
你要学C30,这个手册是必看的,这个手册目前最新版本号是K,文档编号为DS51284K,共有200多页英文版。可以在公司网站中下载:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010065
在这个页面你可以下载到更多的资料和软件。
⑷ 求 PIC 8位单片机 汇编指令比较全的,详细点的
PIC单片机的数据手册文档里就有汇编指令的介绍。Microchip公司官网上有下载的。
如果要带例子的那就找张明峰的书。他出书的时候是Microchip公司中国地区的应用工程师,很多PIC的中文版数据手册就是他和他同事翻译的。
⑸ 跪求pic 单片机 外部中断函数解析
你这个是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.