PIC09中断系统

合集下载

指令PIC的指令详解

指令PIC的指令详解
MOVLW 3
MOVWF REG1
MOVLW 2
SUBWF REG1,0 W=1 C=1
MOVLW 2
MOVWF REG1
MOVLW 2
SUBWF REG1,0 W=0 C=1
MOVLW 2
MOVWF REG1
MOVLW 3
SUBWF REG1,0 W=FF C=0
51.SUBTRACT W FROM F WITH BORROW
DAW REG1,0 (对F中内容进行10进制调整->F/W+F)
REG1=0XA5 C=0 DC=0->0X05 C=1 DC=0
20.DECREMENT F
DECF CNT,1(寄存器内容减1->W/F)
21.DECREMENT F,SHIP IF 0
DECFSZ CNT,1
LCALL LOW 调用子程序(指令只含低8位地址)
30.MOVE F
MOVF REG,0 ((REG)->W)
31.MOVE F TO P
MOVFP F,P (F:00H-FFH P:00H-1FH)
55.TABLE L
SUBLW K
K-(W)->W
MOVLW 01H
SUBLW 02H W=01H C=1结果为正
MOVLW 02H
SUBLW 02H W=0 C=1结果为0
MOVLW 02H
SUBLW 01H W=FF C=0结果为负
50.SUBTRACT W FROM F
SUBWF F,D
MOVLR 5 BSR=0X22->0X52 (传至高4位 低4位为0)

九齐单片机中断优先级

九齐单片机中断优先级

九齐单片机中断优先级【原创实用版】目录1.介绍九齐单片机中断优先级2.九齐单片机中断优先级的原理3.九齐单片机中断优先级的设置方法4.九齐单片机中断优先级的应用实例5.总结正文【1.介绍九齐单片机中断优先级】九齐单片机是一种常见的微控制器,广泛应用于各种嵌入式系统中。

在九齐单片机中,中断优先级是一种重要的概念,它决定了在多个中断请求同时出现时,单片机处理中断的顺序。

通过设置不同的中断优先级,可以实现对中断的优先响应,提高系统的实时性和稳定性。

【2.九齐单片机中断优先级的原理】九齐单片机的中断优先级基于中断向量表和中断优先级寄存器。

中断向量表存储了各个中断的入口地址,中断优先级寄存器则存储了各个中断的优先级数值。

当多个中断请求同时出现时,单片机会根据中断优先级寄存器的值,按照优先级从高到低的顺序处理中断请求。

【3.九齐单片机中断优先级的设置方法】九齐单片机中断优先级的设置方法如下:1.通过编程设置中断优先级寄存器的值,确定各个中断的优先级。

优先级数值越小,优先级越高。

2.在中断处理程序中,使用优先级数值来判断当前中断的优先级,根据优先级来执行相应的操作。

【4.九齐单片机中断优先级的应用实例】假设九齐单片机系统中有两个中断:外部中断和定时中断。

外部中断用于处理按键等外部事件,定时中断用于处理定时器事件。

为了保证外部事件的及时响应,需要将外部中断的优先级设置高于定时中断。

具体实现如下:1.设置外部中断优先级为 1,定时中断优先级为 2。

2.在外部中断处理程序中,处理按键事件,如需要执行其他操作,可以调用定时中断处理程序。

3.在定时中断处理程序中,处理定时器事件,如需要执行其他操作,可以调用外部中断处理程序。

【5.总结】通过设置九齐单片机的中断优先级,可以实现对中断的优先响应,提高系统的实时性和稳定性。

PIC单片机RB口中断程序设计

PIC单片机RB口中断程序设计

2 引ISB寄存器,使RB7~RB4相关的引脚处于输入状态;
◇如果需要弱上拉,通过OPTION_REG的第7位设置;
◇RBIF=O;
◇RBIE=1;
◇GIF=1。
响应状态变化后的中断服务程序。
bit SYSTime;
#defineTimeEnable()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;)
可以把TimeEnable()放到主程序死循环的任何地方,每当程序执行这个宏,SYSTime就会清零,这就是标志位的自我消失.如果在定时器时间基准标志位SYSlms已经置位的话,SYSTime就会置1,这样别的程序就可以利用这个时间消息了,这就是消息的自我发布。下面就是利用这个时间消息来进行按键延时去抖的,首先看一下按键扫描子程序;
首先,在定时器中断里设置一个lms的时间基准标志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下:
unsigned char count;
if((ToIE&TOIF)==1){ //定时器中断
TMRO+=0x09; //每250μs中断一次
if(count==4){
if(RB4==0){ //RB4上的按钮接地
key=1; //按键标志位置位
}
RBIF=0; //清除引脚中断标志位
}
其中,if(RB4==0)语句相当于读取了PORTB端口数据寄存器,取消了状态变化的硬件信号。
下面详细介绍怎么样进行按键去抖。
void seaakey()
{
unsigned char KeyTime,KeyTask;//定义任务时间参数、

pic 中断程序实例

pic 中断程序实例

pic 中断程序实例
下面是一个简单的中断程序实例:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile int count = 0;
ISR(TIMER0_COMPA_vect) 定时器0比较匹配中断
{
count++;
}
int main(void)
{
初始化定时器0和比较匹配值
OCR0A = 255; 设置比较匹配值
TCCR0A = (1 << WGM01); CTC模式
TCCR0B = ((1 << CS00) (1 << CS02)); 分频器1024 TIMSK0 = (1 << OCIE0A); 打开比较匹配中断
sei(); 开启中断
while(1)
{
if(count > 1000) 如果计数超过1000
{
执行你想要做的操作
count = 0; 清零计数器
}
}
}
这个程序使用定时器0的比较匹配中断来计数,每次中断发生时,计数器就会加1。

在主循环中,如果计数器超过了1000,程序就会执行一些操作,并且将计数器清零。

要使这个程序工作,你需要连接一个LED或者其他的输出设备到Arduino板的一个数字引脚上,并在中断发生时将其输出高电平。

你还需要调整比较匹配值和分频器以控制中断的频率。

第7章 中断处理

第7章 中断处理
•打印机的打印事务; 打印机的打印事务; 打印机的打印事务 •数据采集中的 数据采集中的A/D转换等。 转换等。 数据采集中的 转换等
多道程序或多重任务的运行:分时中断处理。 多道程序或多重任务的运行:分时中断处理。
4. 中断源 任何能够引发CPU中断的事件都称为中 中断的事件都称为中 任何能够引发 中断的事件 断源。 断源。
二、多中断源情况下的特殊问题
1. 中断源的识别
对于软件中断而言,CPU对中断源的识别靠 对于软件中断而言, 对中断源的识别靠 软件中断指令( 来识别, 软件中断指令(INT n)中的中断号 来识别,并 )中的中断号n来识别 转到响应中断服务程序去执行。 转到响应中断服务程序去执行。 对于硬件中断,CPU只有一个 只有一个NMI和INTR引 对于硬件中断,CPU只有一个NMI和INTR引 当有多个外设要申请中断时, 脚,当有多个外设要申请中断时,就必须通过中 断接口电路来连接, 断接口电路来连接,同时给每个中断外设编排一 个中断号( 系统称为中断类型码)。 个中断号(8086系统称为中断类型码)。当任一 系统称为中断类型码)。当任一 外设有中断申请时, 外设有中断申请时,通过中断接口电路将外设中 断信号转发给CPU,然后再由 断信号转发给 ,然后再由CPU从中断接口电 从中断接口电 路读取该中断源的编号。 路读取该中断源的编号。
中 断 控 制 器
IRQ0 IRQ1
外设0 外设1
IRQn
外设n
软硬件结合的简易中断控制器
≥1
2. 中断优先级 对于多中断源而言, 对于多中断源而言,存在各中断源的优先级别 问题。当两个及以上的中断源同时申请中断时, 问题。当两个及以上的中断源同时申请中断时,最 先响应哪个中断源的中断请求, 先响应哪个中断源的中断请求,则由它们的优先级 别决定。 别决定。 可屏蔽中断源的优先级别由中断控制器决定。 可屏蔽中断源的优先级别由中断控制器决定。 8086系统中各类中断的优先级别如下: 系统中各类中断的优先级别如下: 系统中各类中断的优先级别如下

九齐单片机中断优先级

九齐单片机中断优先级

九齐单片机中断优先级中断是单片机系统中非常重要的一部分,它可以在特定的条件下打断正在执行的程序,执行一段特定的代码,然后返回到原来的程序继续执行。

在九齐单片机中,中断优先级是一个非常重要的概念,它决定了当多个中断同时发生时,哪个中断会被优先处理。

九齐单片机中断优先级的设置是通过中断优先级寄存器来实现的。

这个寄存器有8个位,每一位对应一个中断源。

当某个中断源发生时,对应的位会被置位,表示该中断源需要被处理。

而中断优先级寄存器的每一位都可以设置为0或1,表示该中断源的优先级。

当多个中断源同时发生时,九齐单片机会按照中断优先级寄存器的设置来确定哪个中断源会被优先处理。

在九齐单片机中,中断优先级寄存器的最高位是最高优先级,最低位是最低优先级。

当多个中断源同时发生时,九齐单片机会首先处理最高优先级的中断源,然后再处理次高优先级的中断源,以此类推,直到处理完所有中断源。

这种处理方式被称为优先级抢占。

九齐单片机中断优先级的设置可以根据实际需求进行调整。

一般来说,对于一些紧急的中断源,可以将其设置为高优先级,以确保它们能够及时得到处理。

而对于一些不太紧急的中断源,可以将其设置为低优先级,以避免它们过于频繁地打断正在执行的程序。

中断优先级的设置还需要考虑到中断源之间的相互关系。

有些中断源可能会依赖于其他中断源的处理结果,这时候就需要将依赖的中断源设置为较高的优先级,以确保它们能够在需要的时候得到及时处理。

除了中断优先级寄存器,九齐单片机还提供了一些其他的中断控制寄存器,用于进一步控制中断的处理。

比如,中断使能寄存器可以用来控制哪些中断源可以被处理,哪些中断源被禁止处理。

中断标志寄存器可以用来标志哪些中断源已经发生,哪些中断源还未发生。

总之,九齐单片机中断优先级的设置是一个非常重要的问题。

合理地设置中断优先级可以提高系统的响应速度和稳定性,确保紧急的中断源能够及时得到处理。

在实际应用中,我们需要根据具体的需求和中断源之间的关系来进行设置,以达到最佳的效果。

指令PIC的指令详解

指令PIC的指令详解
;retlw 0x33('3')
dt "abc" ;retlw 'a' ;retlw 'b'
;retlw 'c'
de(源程序中定义片内eeprom的初值 其实地址0x2100) org 0x2100
de 0,1,2,3
IORLW 0X35((W)或0X35->W)
28.INCLUSIVE OR W WITH F
IORWF RESULT,1 ((W)或RESULT->RESULT)
29.LONG CALL 长调用指令 ???和CALL有区别???
MOVLW HIGH 高位地址
MOVPF WREG,PCLATH 存放在PCLATH中
REG=0X53->0X53 TBLATH=0XAA->0X53 TBLATL=0X55->0X55
TBLPTR=0XA356->0XA357存储单元=0XFFFF->0X5355
F值传至16为TBLAT表锁存器 T=0传低字节 T=1传至高字节;TBLAT内容写入TBLPTR指向的程序存储器单元;I=1 TBLPTR+1 I=0 TBLPTR不变 指令周期2若F=PC 这周期3
DECFSZ CNT,1
GOTO ...
CONTINUE ...(减1后为0跳转至CONTINUE)
22.DECREMENT F,SHIO IF NOT 0
DECFSNZ CNT,0
GOTO ...
CONTINUE ...(减1后不为0跳转至CONTINUE)
23.UNCONDITIONAL BRANCH

第二章PIC单片机系统结构

第二章PIC单片机系统结构

13
PICmicro® 架构
指令实例 PIC MCU 指令编码为操作码和参数 编码用一个字完成
操作码 OP CODE
操作数 k k k k k k k k
PIC微控制器实验室 大学生创新实验室
14
精简指令RISC
• PIC16F877指令集只有35条指令 学习、程序设计便利 • 全部采用单字节指令 (除4条条件跳转指令外)均为单周期指 令 • “单字节”:专指指令字节
Fetch 1 Execute 1 1. MOVLW 55h Fetch 2 Execute 2 2. MOVWF PORTB Fetch 3 Execute 3 3. CALL SUB_1 Fetch 4 4. BSF PORTA, BIT3
Flush Fetch 4 Fetch SUB_1
PIC微控制器实验室 大学生创新实验室
PIC微控制器实验室 大学生创新实验室
20
上电复位 上电延时:72ms 起振延时:1024个时钟周期 看门狗定时器:监视程序运行状态 欠压复位:当电源电压低于4V,单片机保持在 复位状态 在线调试:对芯片程序直接调试 低压编程:允许工作电压VDD作为编程电 压
PIC微控制器实验室 大学生创新实验室
Bank 1
PIC微控制器实验室 大学生创新实验室
31
PIC单片机架构 程序存储器组织
复位矢量入口地址
0000H 0000H
0001H 0001H 0002H 0002H 0003H 0003H
中断服务程序入口地址 片内程序 存储器
0004H 0004H
页面1 页面2 页面3
07FFH 07FFH
分页的程序存储器 分页的程序存储器
(14位内核)

PIC-RB口中断设计

PIC-RB口中断设计

所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。

这就是通常所说的引脚状态变化中断。

在设计引脚中断程序时,有三个需要特别注意的地方。

一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。

放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。

二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。

三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。

2 引脚中断程序设计在主程序里先设置有关的寄存器。

◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态;◇如果需要弱上拉,通过OPTION_REG的第7位设置;◇RBIF=O;◇RBIE=1;◇GIF=1。

响应状态变化后的中断服务程序。

◇检查RBIF是否为l,为l则是引脚变化引起的中断;◇调用延时程序,延时20~30 ms,目的是为了按键去抖;◇判断是引脚出现上升沿还是下降沿引起的中断;◇调用按键处理程序;◇读PORTB口的值,取消状态变化的硬件信号;◇清除RBIF标志。

笔者认为上面程序设计最大的问题是在中断程序里调用延时程序。

大家知道,中档PIC单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。

另外,PIC单片机中断程序人口只有一个,在响应中断的请求时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标志位将一直保留着),直到这个中断程序退出后才会得到响应。

这就要求我们设计中断程序的时候必须尽量短,避免调用子程序,更不要在中断里进行复杂的运算。

PIC单片机的中断程序

PIC单片机的中断程序

PIC单片机的中断程序PIC 单片机的中断程序中断是 PIC 高手必须掌握的武器,转贴一篇,还希望大家补充发表对中断应用的见解。

与 51 或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。

先摘引三个对 PIC 中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。

--------------- john frank :关于 pic 中断有些不明白的地方借用大虾的程序中断服务代码 btfss INTCONT0IE 判断是否为 T0 中断 goto other_int btfssINTCONT0IF it ?s the time of T0 int goto other_int bcf INTCONT0IF 是T0 中断清除中断标志 movlw 0x10 微秒的高位字节加上定时时间 256x16 分频40960x1000 的高位0x10addwf us1goto end_intother_int 可添加其他中断服务代码nop other isr code can be added end_int 恢复现场假如又有新的中断正好在这段程序中间产生 btfss INTCONT0IFgoto other_intbcf INTCONT0IF 程序岂不是要出错跑飞了 john frank:谢谢你的关注。

我讲一下自己的理解,权做回答,不当之处,还请站友们指点。

pic 中档单片机系列没有“硬件中断优先级别”(请允许我这样说),含义是指:当内核正在处理当前的中断服务 A 时,在这个期间里,其他任何中断的产生,只能使其标志位 xxIF 置 1,不能剥夺当前中断服务对CPU 的占用权(反应在 PC 指针不能被新的中断改变指向),必须等到当前中断服务处理 A 完毕,然后,根据 goto other_int 语句的转向,依次判断。

微型计算机原理与接口技术(第三版)课后练习答案

微型计算机原理与接口技术(第三版)课后练习答案

1 思考与练习题一、选择题1.计算机硬件中最核心的部件是( )。

CA.运算器B.主存储器C.CPUD.输入/输出设备2.微机的性能主要取决于( )。

A(B——计算机数据处理能力的一个重要指标)A.CPUB.主存储器C.硬盘D.显示器3.计算机中带符号数的表示通常采用( )。

CA.原码B.反码C.补码D.BCD码4.采用补码表示的8位二进制数真值范围是( )。

CA.-127~+127B.-1 27~+128C.-128~+127D.-128~+1285.大写字母“B”的ASCII码是( )。

BA.41HB.42HC.61HD.62H6.某数在计算机中用压缩BCD码表示为10010011,其真值为( )。

CA.10010011BB.93HC.93D.147二、填空题1.微处理器是指_CPU_;微型计算机以_CPU_为核心,配置_内存和I/O接口_构成;其特点是_(1)功能强 (2)可靠性高 (3)价格低 (4)适应性强 (5)体积小 (6)维护方便_。

P8 P52.主存容量是指_RAM和ROM总和_;它是衡量微型计算机_计算机数据处理_能力的一个重要指标;构成主存的器件通常采用_DRAM和PROM半导体器件_。

P5 P93.系统总线是_CPU与其他部件之间传送数据、地址和控制信息_的公共通道;根据传送内容的不同可分成_数据、地址、控制_3种总线。

P94.计算机中的数据可分为_数值型和非数值型_两类,前者的作用是_表示数值大小,进行算术运算等处理操作_;后者的作用是_表示字符编码,在计算机中描述某种特定的信息_。

P125.机器数是指_数及其符号在机器中加以表示的数值化_;机器数的表示应考虑_机器数的范围、机器数的符号、机器数中小数点位置_3个因素。

P15 P166.ASCII码可以表示_128_种字符,其中起控制作用的称为_功能码_;供书写程序和描述命令使用的称为_信息码_。

P18 P19三、判断题1.计算机中带符号数采用补码表示的目的是为了简化机器数的运算。

PIC第四章

PIC第四章

19
助记符 CLRF CLRW CLRWDT BCF BSF RLF RRF ANDWF IORWF XORWF ANDLW IORLW XORLW COMF f f,b f,b f,d f,d f,d f,d f,d K K K f,d
操作说明 f 清零 W 清零 WDT 清零 f 的 b 位清零 f 的 b 位置 1 f 带 C 左循环 f 带 C 右循环 W与f至d W或f至d W 异或 f 至 d K与W至W K或W至W K 异或 W 至 W F 取反至 d
424212助记符功能说明助记符功能说明add相加mov传送sub相减rl左移相与rr右移iorclr清零xor相异或com取反incret返回decbtf测试13字符功能说明fsz寄存器f为0间跳fsc寄存器f的b位为0间跳fss寄存器f的b位为1间跳表示运算结果送入目标寄存器14数据传送类指令共有4条指令主要功能是将数据从源地址或立即数传送至目标地址中
17
例题4 请将通用寄存器20 20H 30H 构成的16 16位 【 例题 4 - 3 】 请将通用寄存器 20 H、30H 构成的 16 位 数据与通用寄存器40 40H 50H构成的16 16位数据相加后 数据与通用寄存器 40 H、50H 构成的 16 位数据相加后 放入40 40H 50H 已知其和不会超出65535 65535。 放入40H、50H 中,已知其和不会超出65535。 20H, H,0 20H的内容送至W MOVF 20H,0 ;将20H的内容送至W 40H, H,1 中的数加上40 中的数, 40H 40H ADDWF 40H,1 ;将W中的数加上40H中的数,送40H 30H, H,0 30H中的数送W MOVF 30H,0 将30H中的数送W 50H, H,1 中的数和50 50H ADDWF 50H,1 W中的数和50H中的数相加 BTFSS STATUS,C 判断有无进位 GOTO LOOP 无进位 40H, H,1 有进位, INCF 40H,1 有进位, LOOP NOP 空操作

PIC16位单片机CAN(5)中断

PIC16位单片机CAN(5)中断

PIC16位单片机CAN(5)中断CAN 数据的接收使用中断来处理。

ECAN 模块会产生三种不同中断,每种中断都具有自己的中断向量、中断允许控制位、中断状态标志和中断优先级控制位。

这些中断是:? CiTXECAN 发送数据请求? CiRXECAN 接收数据就绪? CiECAN 事件中断具体这三种中断的意义就不说了,看手册就行了。

我使用的是事件中断也就是当成功接收报文并装入一个接收缓冲区(报文缓冲区0 至31)时产生中断。

中断算是比较简单的,看一下初始化代码:/* Enable ECAN1 Interrupt */void Interrupt_Init(void) {INTCON2bits.GIE = 1;//使能全局中断INTCON1bits.NSTDIS = 0;//使能中断嵌套IPC8bits.C1IP=6;//ECAN1 事件中断优先级6IFS2bits.C1IF=0;//ECAN1 事件中断标志状态位IEC2bits.C1IE = 1;//ECAN1 事件中断允许位// C1INTEbits.TBIE = 1;C1INTEbits.RBIE = 1;//接收缓冲区中断允许位}再看中断处理函数代码:void__attribute__((__interrupt__,no_auto_psv))_C1Interrupt (void) { IFS2bits.C1IF = 0; // clear interrupt flag ECAN1 事件中断标志状态位if(C1INTFbits.TBIF) {C1INTFbits.TBIF = 0; } if(C1INTFbits.RBIF)//接收缓冲区中断标志位{ // read the message if(C1RXFUL1bits.RXFUL1==1)//接收缓冲区n 满位{// rx_ecan1message.buffer=1; C1RXFUL1bits.RXFUL1=0; } // rxECAN1(&rx_ecan1message); C1INTFbits.RBIF = 0;//接收缓冲区中断标志位清0Nop();Nop();}}中断处理函数的写法可以参考文档的第六章,中断的示例代码。

PCI中断简介--请大家指正

PCI中断简介--请大家指正

PCI中断简介--请大家指正首先介绍一下计算机系统PCI总线中断线在主板上的线路分布:每个PCI插槽为插在它上面的PCI设备提供了4根中断线:INTA#,INTB#,INTC#,INTD#也就是说如果有4个PCI插槽,那么就会有16根中断线。

这些中断线上产生的中断信号最终都要传输到CPU的INTA引脚上面来通知CPU。

那么这就产生了一个疑问,这么多中断线(还包括ISA总线的中断线)只对应CPU的一根中断线,它们在主板上面是怎么样布局的呢?这里就要介绍主板上面涉及到中断管理的两个关键器件:可编程中断路由器以及中断控制器(Intel8259)。

首先介绍中断控制器(Intel8259),这个可能大家都比较熟悉。

简单的说它提供了16个中断输入引脚(对应着计算机设备管理器里面显示的16个中断号)和一个输出引脚,其中输入引脚用于连接设备的中断引脚,也就是连接从PCI总线过来的中断引脚以及ISA总线过来的中断和其它计算机设备过来的中断线。

中断输出引脚连接CPU的INTA。

8259的每一个输入引脚有效都可以引起它的输出的有效(低电平有效),从而将CPU的INTA拉低,CPU便知道有一个中断产生。

并且8259还有另外一个特别重要的功能,就是它为每个连接到它的输入引脚的中断源都保存了一个中断向量,这个中断向量保存了这个中断源对应的中断服务子程序的起始地址。

比如某一时刻,一个申请了中断的ISA设备(它的中断线连接到了8259的输入上面)有效了它的中断线,8259的输出也立刻有效,通知CPU。

CPU得到中断有效的信号后,马上停止正在进行的工作,和8259进行一次通信,从8259那里读取这个中断的中断向量(这个过程叫做“中断确认”),然后程序跳到中断服务子程序的起始地址开始运行。

经过上面的论述,我们了解到8259给所有的计算机设备,包括硬盘、软盘、PCI总线设备、ISA总线设备等,提供了16个可用的中断线。

这里所要注意的是很多系统设备以及ISA总线的设备对于中断线都是独占的,在大多数情况下,除去系统设备以及ISA总线设备所占用的中断外,8259所剩下的可用的中断线就很少了,基本上最多是4、5个。

PIC中档单片机的中断总结

PIC中档单片机的中断总结

PIC中档单片机的中断总结对于来说,一次中断的过程大致有下列阶段:为了使得解释形象和直观,本文采纳一些诙谐的语句来比方解释:中断哀求---------比方成申请买经济适用房的哀求中断标记-------一份申请书本中断使能xxIE-----本单位领导PEIE-------------户口办公室主任GIE--------------银行的管理信贷的科长中断哀求:房子太少,儿子要结婚了,得买房了,可资源和财力有限,不能卖商品房,只好按特别状况处理,写一份申请书(中断标记位IF 置1);本单位领导xxIE看了之后,假如给你盖了一个戳:(即该中断使能位IE=1),那么恭喜你,这份申请书可以提交到更高一级的部门;假如没盖(xxIE= 0),那么对不起,先放我这里吧,等我们讨论讨论好后再说。

假如你不愉快,要拿回申请书撕掉,呵呵,那么IF=0;你的购房哀求之梦破灭;xxIE领导将按照户口,将这些哀求书给分类,一类是外地迁来的户口,提交给户口办公室PEIE主任审查,PEIE主任假如给你盖了个戳(PEIE= 1),那么,他将会把申请书提交给银行的GIE科长批准,否则就是放在这里再讨论讨论或者你要回归撕毁;一类是本地户口,可挺直提交给银行的GIE科长批准,然后你将申请书带到GIE科长的办公室。

GIE科长盖了章之后(GIE=1),然后,你就可以拿着申请书去找房地产商要房子了(此时PC指针=0004H),由于GIE科长有无数事情要做,所以他每盖了一次戳之后(注重是一次不是一个,由于大概有多个中断同时发生,也就是说有其他地方的人来请GIE盖戳),就在办公室门外挂了个牌子:请勿打搅。

他自己则歇息去了,直到接到RETFIE的电话或者有人打他的手机。

房地产商预备给房子了,不过你最好得先把各项手续给填好,叫5w押第1页共4页。

nvic中断的工作原理和使用方法

nvic中断的工作原理和使用方法

nvic中断的工作原理和使用方法中断是计算机系统中一种重要的事件处理机制,用于在系统运行过程中处理和响应各种外部事件和异常情况。

中断是一种异步事件,能够打断当前正在执行的指令序列,转而执行中断处理程序,然后再返回到原来的执行位置继续执行。

中断控制器是负责管理和处理中断的硬件设备。

常见的中断控制器有基于硬件的8259和基于软件的NVIC(Nested Vectored Interrupt Controller)。

本文将详细介绍NVIC中断的工作原理和使用方法。

一、NVIC中断的工作原理NVIC是一种设备级中断控制器,广泛应用于ARM Cortex-M系列微控制器中。

它的主要工作原理如下:1.中断优先级:每个中断都有一个固定的优先级,优先级高的中断在发生时可以立即打断正在执行的指令序列。

ARM Cortex-M微控制器支持动态优先级,可以在运行时改变中断的优先级。

2.中断向量表:NVIC使用一个特殊的存储区域来保存中断向量表(Interrupt Vector Table)。

中断向量表是一个数组,其中每个元素都是一个指向中断处理程序的地址。

当中断发生时,CPU会根据中断号从中断向量表中找到对应的中断处理程序并跳转到该地址执行。

3.中断处理程序:每个中断都有一个对应的中断处理程序,用于处理中断事件。

中断处理程序一般包括保存寄存器状态、处理中断事件、发送中断产生的结果等步骤。

在中断处理程序执行完毕后,CPU会根据中断优先级重新选择下一个要执行的中断处理程序。

4.嵌套中断:NVIC支持嵌套中断,即在一个中断处理程序中允许发生其他中断。

当一个中断处理程序正在执行时,如果发生了其他中断,CPU会中断当前的中断处理程序,先执行新的中断处理程序。

当新的中断处理程序执行完毕后,CPU会返回到之前中断处理程序的执行位置继续执行。

二、NVIC中断的使用方法NVIC中断的使用方法包括中断初始化、中断注册和中断处理程序的编写。

AT89中断系统(二)

AT89中断系统(二)

课题九AT89中断系统(二)
一、复习提问:
1 中断的概念
2 中断的入口地址
3 中断的优先级
二、课题导出:
单片机如何采用查询法还是中断法呢?这就是我们本节课课题中断的初始化。

三、讲授新课:
(一)中断的初始化:
1.设置堆栈指针
2.设置中断的触发方式
3.设置中断的优先级
4.开放中断
(二)中断响应过程
AT89C51的CPU在每一个机器周期顺序检查每一个中断源。

在机器周期的S6采样并按优先级处理所有被激活的中断请求,如果没有被下述条件阻止,将在下一个机器周期的状态响应激活了最高级中断请求:1.CPU正在处理相同的或更高优先级中断。

2.现行的机器周期不是所执行指令的最后一个机器周期。

3.正在执行的指令是中断返回指令(RETI)或者是IE,IP的写操作指令。

(三)断返回
中断服务程序的最后一条指令是中断返回指令RETI。

它的功能是将断点地址弹出送回程序计数器中,使程序能返回到原来被中断的地方继续执行。

(四)中断请求的撤消
1.定时/计数器的溢出中断:CPU响应中断后,由硬件自动清除相应的中断请求标志位,使中断请求自动撤消,不用采取其他措施。

2.外部中断请求:中断请求的撤消与触发方式的控制位的位置有关。

四、巩固提高
提出不同的问题练习写中断的初始化。

五、课堂小结
本节课我们主要讲了以下几个问题:
1中断的初始化,这也是本节课的重点内容。

2中断响应过程。

3中断的返回。

4中断请求的撤消。

六、布置作业
P106-5。

PIC指令详解

PIC指令详解

中档PIC单片机汇编指令详解-----老罗整理NOP 空操作指令语法形式:NOP操作数:无执行时间:一个指令周期执行过程:除了消耗一个指令周期之外,无任何其他影响,所以通常被用来作为延时使用状态标志影响:无说明:指令操作没有任何操作数参与,也不影响任何寄存器的内容和状态,所以通常都是被作为延时使用的。

指令范例:BSF PORTB,0 ;PORTB的第0位输出高电平(1)NOP ;延时,使电平稳定MOVWF 将W寄存器的内容传送到数据寄存器语法形式:MOVWF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:把W寄存器的内容传送到f数据寄存器,W寄存器的内容保持不变,类似于Copy状态标志影响:无说明:该指令是对数据寄存器赋值的主要方式指令范例:MOVLW 0x55 ;W寄存器赋值MOVWF Data ;W寄存器值传送给Data;此时Data=0x55CLRW W寄存器内容清0语法形式:CLRW操作数:无执行时间:一个指令周期执行过程:0x00→W1→Z状态标志影响:Z说明:该指令对W寄存器内容清零,并置位0标志Z另外使用MOVLW 0x00也可以使W寄存器内容为0,但是这条指令不影响0标志Z 指令范例:CLRW ;W=0,Z=1CLRF 数据寄存器内容清零语法形式:CLRF f操作数:f为数据寄存器的低7位地址(0x00~0x7F)执行时间:一个指令周期执行过程:0x00→f1→Z状态标志影响:Z说明:指令对数据寄存器清零,并置位0标志Z指令范例:CLRF TRISB ;端口B所有I/O引脚设为输出SUBWF 将数据寄存器的内容减去W寄存器内容语法形式:SUBWF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,W寄存器内容不变当d=W时,结果放在W寄存器中,数据寄存器f内容不变执行时间:一个指令周期执行过程:【f】-【W】→d状态标志影响:Z DC C说明:要特别注意W寄存器在这条指令中是减数当【f】=【W】时,相减的结果为0,则Z=1当【f】>【W】时,没有借位发生,则C=1当【f】<【W】时,有借位发生,则C=0实际上在PIC单片机中这条指令是通过先对W寄存器的内容求补码,然后与被减数相加,所以在判断是否有借位时和其他单片机不同,请注意指令范例:MOVLW 0x23 ;W=0x23MOVWF tmp ;tmp=0x23MOVLW 0x32 ;W=0x32SUBWF tmp,W ;tmp-W将结果存入W中,W=0xF1,tmp=0x23;过程:tmp=0x23,W求补码为0xCD,所以0x23+0xCD=0xF1,又因tmp<W,所以C=0DECF 数据寄存器的内容递减1语法形式:DECF f,d操作数:f为数据寄存器的低7位地址(0x00~0x7F)d为目的寄存器的低7位地址(0x00~0x7F)当d=f时,结果放在f数据寄存器,f数据寄存器自减1当d=W时,结果放在W寄存器中,W寄存器内容自减1执行时间:一个指令周期执行过程:【f】-1→d状态标志影响:Z说明:该指令对数据寄存器的内容做减1运算。

嵌入式技术及应用实验中断实验报告

嵌入式技术及应用实验中断实验报告

实验步骤与结果分析1、建立工程1)、在工程文件中包含如下文件(int、doc、user、lib、start)2)、选择STM32F103VB芯片3)、分别添加如下文件2、运行过程(1) 使用Keil uVision3 通过ULINK仿真器连接EduKit-M3实验平台,打开实验例程NVIC_test子目录下的NVIC.Uv2例程,编译链接工程;(2) 点击MDK 的Debug菜单,选择Start/Stop Debug Session项或Ctrl+F5键,远程连接EduKit-M3实验平台并下载调试代码到目标系统的RAM中;(3) 程序正常启动运行后,会有以下结果:当第一次发生EXTI9 中断后(按下EduKit-M3实验平台上Key按钮),SysTick 中断的优先级比EXTI0中断优先级高。

因此当EXTI0中断发生时(按下Wakeup按钮),将先执行主要程序代码分析/* Configure one bit for preemption priority */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);主从优先级的选择Group_1,有先占优先级1位,从优先级3位//配置一个比特为抢占优先级/* Enable the EXTI0 Interrupt */ //使能EXTI0中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue;主优先级的选择PreemptionPriorityValueNVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//从优先级等于0.NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Enable the EXTI9_5 Interrupt */ //使能EXTI9_5中断NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//EXTI9_5主优先级的选择等于0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//EXTI9_5主优先级的选择等于0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Configure the SysTick Handler Priority: Preemption priority and sub priority */ //配置SysTick处理程序优先级:抢占优先级和子优先级NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, !PreemptionPriorityValue, 0);while (1){if(PreemptionOccured != FALSE)//当PreemptionOccured != FALSE)抢占发生{GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 -GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_8)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_9, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9)));Delay(0x5FFFF);}}void GPIO_Configuration(void){/* Configure PC6, PC7, PC8 and PC9 as output push-pull */ 使能为推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //使能其速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //使能为推挽输出GPIO_Init(GPIOC, &GPIO_InitStructure);/* Configure GPIOA Pin0 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 使能为浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure GPIOB Pin9 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 使能为推挽输出入GPIO_Init(GPIOB, &GPIO_InitStructure);}GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);/* Configure EXTI Line0 to generate an interrupt on falling edge */ 配置EXTI Line0产生一个中断在下降沿EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);(写不完时,可调整表结构。

PIC程序经典解析

PIC程序经典解析

PIC功能程序集锦电平转变中断INT0注释:IO引脚上的高低电平转变(部份IC可设置上升沿或下降沿响应)可产生中断将MCU 从休眠状态唤醒。

———————————————————————————————————————void Initial_IOC(void) //初始化电平转变中断(PIC16F1828){IOCAP=0x00; //禁止A端口上升沿触发IOCAN=0x04; //许诺RA2下降沿触发IOCBP=0x10; //许诺RB4上升沿触发IOCBN=0xe0; //许诺RB7/RB6/RB5下降沿触发=0; //未发生电平转变中断(清0)=1; //许诺电平转变中断}void Initial_IOC(void) //初始化电平转变中断(PIC16F616){IOCA=0B00111100; //许诺RA2/RA3/RA4/RA5电平转变中断=0; //未发生电平转变中断(清0)=1; //许诺电平转变中断}脉宽调制PWM注释:———————————————————————————————————————void Initial_PWM(void)(PIC16F1828){=1; //禁止输出PR2=0x9c; //TIMER2周期值CCP4CON=0x3f; //占空比低2为10、配置为PWM模式CCPR4L=0x3e; //占空比高8位CCPTMRS0=0x3f; //CCP4基于TIMER2产生T2CON=0x07; //TIMER2 使能TIMER二、前预分频比64=0; //许诺输出}ADC电压读取注释:———————————————————————————————————————void ADC_Converter(void) //ADC转换(PIC16F1828){FVRCON=0xd3; //使能内部固定参考电压模块while(!FVRRDY); //电压稳固标志位ADCON1=0B; //右对齐、FOSC/3二、4096为参考电压=0x09; //通道AN9=1; //开启ADC转换模块DelayMS(1);=1; //开始转换while;Voltage=(ADRESH<<8)|ADRESL; //读取2进制值=0; //关闭}温度指示器注:温度测试范围为-40~+8五、单颗二极管的电压范围为~、温度需校正。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

INTE:外部INT引脚中断屏蔽位 INTE:外部INT引脚中断屏蔽位。 引脚中断屏蔽位。 l=允许外部INT引脚产生的中断; l=允许外部 允许外部INT引脚产生的中断 引脚产生的中断; 0=屏蔽外部INT引脚产生的中断。 屏蔽外部INT引脚产生的中断 引脚产生的中断。 T0IF:TMR0溢出中断标志位。 IF:TMR0溢出中断标志位。 1=TMR0已经发生了溢出; =TMR0已经发生了溢出; 0=TMR0尚未发生溢出。 =TMR0尚未发生溢出。 T0IE:TMR0溢出中断屏蔽位。 IE:TMR0溢出中断屏蔽位。 1=允许TMR0溢出后产生的中断; 允许TMR0溢出后产生的中断; 0=屏蔽TMR0溢出后产生的中断。 屏蔽TMR0溢出后产生的中断。 PEIE:外设中断屏蔽位。 PEIE:外设中断屏蔽位。 1=允许CPU响应来自第二梯队的中断请求; 允许CPU响应来自第二梯队的中断请求 响应来自第二梯队的中断请求; 0=禁止CPU响应来自第二梯队的中断请求。 0=禁止 禁止CPU响应来自第二梯队的中断请求 响应来自第二梯队的中断请求。
从上表可看出, 从上表可看出,各中断源基本上都与各个 外围设备模块相对应的: 外围设备模块相对应的: 多数的外围设备对应着一个中断源(如定时/ 多数的外围设备对应着一个中断源(如定时/计 数器TMR0), 数器TMR0),也有的外围设备对应二个中断源 (如SCI同步/异步接收/发送器USART); SCI同步 异步接收/发送器USART); 同步/ 有的外围设备没有中断源与之对应(如输入/ 有的外围设备没有中断源与之对应(如输入/输 RA和RC); 出端口 RA和RC); 也有的中断源没有外围设备与之对应( 也有的中断源没有外围设备与之对应(例如外部 中断源INT)。 中断源INT)。 PIC16F87X §8.3 PIC16F87X的中断硬件逻辑 PIC16F87X 单片机中, 在 PIC16F87X 单片机中 , 不但中断源的种 类和个数不同,它们的中断逻辑电路也不同。 类和个数不同,它们的中断逻辑电路也不同。
GIE:全局中断屏蔽位(总屏蔽位) GIE:全局中断屏蔽位(总屏蔽位)。 1=允许CPU响应所有中断源产生的中断请求; 允许CPU响应所有中断源产生的中断请求 响应所有中断源产生的中断请求; 0=禁止CPU响应所有中断源产生的中断请求。 0=禁止 禁止CPU响应所有中断源产生的中断请求 响应所有中断源产生的中断请求。 第一外围设备中断标志寄存器PIR1 ⒊第一外围设备中断标志寄存器PIR1 寄存器PIR1也是一个可读/可写的寄存器, 寄存器PIR1也是一个可读/可写的寄存器, 各位的分布形式如下: 各位的分布形式如下:
0=选择RB0/INT下降沿触发 选择RB0 INT下降沿触发 ⒉中断控制寄存器INTCON 中断控制寄存器INTCON 中断控制寄存器是一个可读/ 中断控制寄存器是一个可读/可写的寄存 各位的分布形式如下: 器,各位的分布形式如下:
它将第一梯队中的3个中断源的标志位和屏 它将第一梯队中的 个中断源的标志位和屏 蔽位,以及PEIE和GIE包含在其中: 包含在其中: 蔽位,以及 和 包含在其中 RBIF: 端口 的引脚 的引脚RB4~ RB7电平变化中 : 端口RB的引脚 ~ 电平变化中 断标志位。 断标志位。
§8.4 中断相关的寄存器 与中断有关的特殊功能寄存器SFR共有 与中断有关的特殊功能寄存器SFR共有6个, 共有6 分别是: 分别是: 选项寄存器OPTION_REG 、 选项寄存器 OPTION_REG、 中断控制寄存 INTCON、第一外围设备中断标志寄存器PIR1 器INTCON、第一外围设备中断标志寄存器PIR1、 第一外围设备中断屏蔽寄存器PIE1 第一外围设备中断屏蔽寄存器PIE1(也称中断使能 寄存器) 第二外围设备中断标志寄存器PIR2 寄存器)、第二外围设备中断标志寄存器PIR2和第 二外围设备中断屏蔽寄存器PIE2 如表9 所列。 二外围设备中断屏蔽寄存器PIE2,如表9.2所列。 后5个SFR,共有40位,但仅使用了30位来控 SFR,共有40位 但仅使用了30位来控 制中断,分别与图9 制中断 , 分别与图 9.l中的中断逻辑电路的输入信 号成严格的对应关系。 号成严格的对应关系。
PIC16F87X PIC16F87X单片机的中断系统的逻辑电路如 (a)~(e)所示 101~103) 所示(p 图9.1(a)~(e)所示(p101~103)。 每一种中断源对应了一个中断标志位 每一种中断源对应了一个中断标志位,记 中断标志位, XXXF,以及一个中断屏蔽位或叫中断使能位 中断屏蔽位或叫中断使能位, 为XXXF,以及一个中断屏蔽位或叫中断使能位, 记为XXXE。 记为XXXE。中断源产生的中断信号能否到达 CPU,都受控于相应的中断屏蔽位。 CPU,都受控于相应的中断屏蔽位。 每个中断源申请中断时, 中断标志位会 每个中断源申请中断时 , 其 中断标志 位会 自动置位,中断标志位的清0 自动置位, 中断标志位的清0是由用户程序完成 而每个中断屏蔽位 中断屏蔽位的置位和清位均由用户 的 ; 而每个 中断屏蔽位 的置位和清位均由用户 程序完成。 程序完成。 下图是由一些门电路构成的中断组合逻辑 电路。 电路。
⒈选项寄存器OPTION _REG器是可读写的 OPTION_REG 选项寄存器是可读写的 , 选项寄存器是可读写的, 各位的分布形式: 各位的分布形式:
该寄存器包含了与定时/ 计数器 该寄存器包含了与定时 / 计数器TMR0、 、 分频器和端口RB有关的控制位 。 RB端口引脚 分频器和端口 有关的控制位。 端口引脚 有关的控制位 RB0和外部中断 和外部中断INT复用一脚,与该脚有关的一 复用一脚, 和外部中断 复用一脚 个控制位含义如下: 个控制位含义如下: INTEDG:外部中断INT触发信号边沿选择位 INTEDG:外部中断INT触发信号边沿选择位: 触发信号边沿选择位: 1=选择RB0/INT上升沿触发; 1=选择 选择RB0/INT上升沿触发; 上升沿触发
外围设备在工作过程中,都需要CPU参与 外围设备在工作过程中,都需要CPU参与 控制、协调或交换数据等服务, CPU正是通 控制 、 协调或交换数据等服务 , 而 CPU正是通 过中断技术使得这些外围设备协调工作的。 过中断技术使得这些外围设备协调工作的。 PIC单片机作一次中断处理的过程如下: PIC单片机作一次中断处理的过程如下: 单片机作一次中断处理的过程如下 当某一中断源发出中断请求时: 当某一中断源发出中断请求时: ① 假如 CPU正在执行更重要的任务 ,则可采用屏 假如CPU正在执行 更重要的任务, 正在执行更重要的任务 蔽的方法暂时不响应该中断请求; 蔽的方法暂时不响应该中断请求; ② 如果可以响应该中断请求, 则 CPU执行完当前 如果可以响应该中断请求, CPU执行完当前 指令后, 必须把断点处的程序计数器PC 的值 指令后 , 必须把断点处的程序计数器 PC的值 (即下一条指令的地址 )压入堆栈保存起来 (断点 即下一条指令的地址)压入堆栈保存起来( 保护) 保护),也可以把一些的重要寄存器内容也保护
因此,中断是单片机中很重要的一个概念, 因此,中断是单片机中很重要的一个概念, 是提高工作效率的重要功能, 是提高工作效率的重要功能,中断系统功能的好 坏是衡量单片机功能的重要指标。 坏是衡量单片机功能的重要指标。 单片机的“中断源” 单片机的“中断源”与单片机包含的外围设 备有很大的关系,所谓“中断源” 备有很大的关系 , 所谓 “ 中断源 ” 就是引起中断 的原因或根源,就是中断请求的来源。 的原因或根源,就是中断请求的来源。 PIC16F87X系列集成了较多的外围设备: PIC16F87X系列集成了较多的外围设备: 16F874/877内部集成了15个外围设备; 16F874/877内部集成了 个外围设备 内部集成了15个外围设备; 16F873/876内部集成了12个外围设备; 16F873/876内部集成了 个外围设备 内部集成了12个外围设备; 16F870/872内部集成了10个外围设备; 16F870/872内部集成了 个外围设备 内部集成了10个外围设备; 16F871内部集成了13个外围设备。 16F871内部集成了 个外围设备 内部集成了13个外围设备。
图中全部的的14 个中断源按两个梯队并列 图中全部的的 14个中断源按两个梯队并列 排开,第一梯队中只安排了3个中断源, 排开,第一梯队中只安排了3个中断源,其余的 中断源全部安排到第二梯队中。 中断源全部安排到第二梯队中。 所有的中断源都受“全局中断屏蔽位” 所有的中断源都受“全局中断屏蔽位”(也称总 屏蔽位)GIE的控制 的控制; 屏蔽位)GIE的控制; 第一梯队的中断源不仅受GIE 的控制 第一梯队的中断源不仅受 GIE的控制 , 还要受 的控制, 各自中断屏蔽位的控制; 各自中断屏蔽位的控制; 第二梯队的中断源不仅受到GIE 和各自中断屏 第二梯队的中断源不仅受到 GIE和各自中断屏 蔽 位 的控 制 , 还 要 受到 一 个 外 设 中断 屏 蔽位 PEIE的控制 PEIE的控制。 的控制。
第八章 中断系统
§8.1 中断的基本概念 当单片机正在执行程序时, 当单片机正在执行程序时,出现了某些特 殊状况,例如定时时间到、有键盘信号输入等, 殊状况,例如定时时间到、有键盘信号输入等, 此时CPU须要暂时停止当前的程序 须要暂时停止当前的程序, 此时CPU须要暂时停止当前的程序,而转去执 行处理这些事件的程序, 行处理这些事件的程序,待执行完这些特定的 程序之后,再返回到原先的程序去执行, 程序之后,再返回到原先的程序去执行,这就 形成了一次“中断” 形成了一次“中断”。 “中断”加强了单片机处理突发事件的能 中断” 如果没有中断功能, 力,如果没有中断功能,对可能发生的特殊状 况的处理就必须采用定时查询 就必须采用定时查询, 况的处理就必须采用定时查询,这样就会浪费 大量的CPU时间 大量的CPU时间。 时间。
起来( 现场保护) 起来 ( 现场保护 ) 。 然后再转移到相应的中断服 务子程序中执行。 务子程序中执行。 ③ 在中断服务子程序中 , 首先必须确定 发出中断 在中断服务子程序中, 首先必须确定发出中断 请求的中断源, 请求的中断源 , 然后再跳转到与该中断源相对 应的程序分支中去执行中断服务程序。 应的程序分支中去执行中断服务程序。 ④ 当中断服务程序执行毕后 , 必须先恢复被保护 当中断服务程序执行毕后, 的寄存器的值( 现场恢复) 再将程序计数器PC 的寄存器的值 ( 现场恢复 ) , 再将程序计数器 PC 的值从堆栈中恢复(断点恢复) CPU返回断 的值从堆栈中恢复 (断点恢复 ) , 使 CPU返回断 点处继续执行被中断的程序。 点处继续执行被中断的程序。 §8.2 PIC16F87X的中断源 PIC16F87X的中断源 PIC16F87X单片机具备的中断源如下表所示: PIC16F87X单片机具备的中断源如下表所示:
相关文档
最新文档