1、第5章 中断系统及应用 第5章 中断系统及应用 5.1 概述概述 5.2 SPCE061A中断系统中断系统 5.3 中断系统应用中断系统应用 思考思考题题 第5章 中断系统及应用 5.1 概概 述述 1.中断中断 中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因而必须终止原程序的执行,转去完成相应的处理程序,待处理结束之后再返回继续执行被终止原程序的过程。中断技术能实现CPU与外部设备的并行工作,提高CPU的利用率及数据的输入/输出效率,能及时发现计算机运行过程中的突发事件并自动处理,如计算机对外部事件、硬件故障、运算错误、定时器溢出等做出响应。触键唤醒中断能使我们通过键盘
2、发出申请,随时对运行中的CPU提出请求,转而完成一些必须马上处理的事件。第5章 中断系统及应用 2.中断源中断源 中断源是指在计算机系统中向CPU发出中断请求的事件。中断源可以是人为设定的,也可以是突发的随机事件。如定时器中断就是由定时器溢出产生的中断。第5章 中断系统及应用 3.中断优先级中断优先级 由于在实际应用系统中往往有多个中断源,且中断申请是随机的,有时还可能会有多个中断源同时提出中断申请,但CPU一次只能响应一个中断源发出的中断请求,这时CPU响应哪个中断请求,就需要用软件或硬件按中断源工作性质的轻重缓急给它们安排一个优先顺序,即所谓的优先级排队。中断优先级越高则响应优先权就越高。
3、当CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,CPU就会暂停原来的中断处理程序而转去处理优先级更高的中断请求,处理完毕后再返回原低级中断服务程序,这一过程称为中断嵌套,具有这种功能的中断系统称为多级中断系统。没有中断嵌套功能的则称为单级中断系统。第5章 中断系统及应用 图5.1 中断嵌套示意图响应低级中断请求返回主程序相应高级中断请求返回低级中断程序继续执行主程序CPU正在执行的主程序CPU执行高级中断服务程序CPU执行低级中断服务程序第5章 中断系统及应用 4.中断响应过程中断响应过程 中断响应过程有以下几步:(1)检测中断。在每一条指令结束后,系统自动检测中断请求信号,
4、如果有中断请求且相应的中断允许位为真(允许中断)时,则响应中断。(2)保护现场。CPU一旦响应中断,中断系统会自动保存当前内容PC和SR寄存器内容(通过入栈完成),执行中断服务程序,中断服务程序还可以通过压入堆栈来保护原程序中用到的数据和寄存器的值。保护现场前一般要关中断,以防止现场保护过程中有高优先级中断发生而破坏现场保护。保护现场一般是用堆栈指令将原程序中用到的寄存器压入堆栈,现场保护之后要开中断,以便响应更高优先级的中断申请。第5章 中断系统及应用 (3)中断服务。通过执行中断服务程序完成相应的功能。(4)清除中断标志位。CPU响应中断后,要请除相应的中断请求标志位,以免CPU再次响应该
5、中断。(5)恢复现场。中断服务完成后,返回之前要用弹出堆栈指令使保护在堆栈中的数据和寄存器的值弹出,以实现恢复原有数据的目的。注意:在恢复现场前要关中断,以防止恢复现场过程中再有中断响应破坏恢复现场。现场恢复后应及时开中断。第5章 中断系统及应用 (6)中断返回。此时CPU将PC指针和SR内容弹出堆栈恢复断点,从而使CPU继续执行刚才被中断的程序。在单片机中,中断技术主要用于实时控制和及时处理外部突发事件。要求计算机能及时响应被控对象提出的分析计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。由于这些控制参量的请求都是随机发生的,而且要求单片机必须做出快速响应并及时处理,对
6、此只有利用中断技术才能实现。第5章 中断系统及应用 5.2 SPCE061A中断系统中断系统 5.2.1 中断类型中断类型 1.软件中断软件中断 软件中断是由软件指令break 产生的中断,软件中断的向量地址为FFF5H。2.异常中断异常中断 异常中断是非常重要的事件,该中断一旦发生,CPU必须立即进行处理。目前,SPCE061A定义的异常中断只有复位一种。通常系统复位可以由以下三种情况引起:上电、看门狗计数器溢出和系统电源电压低于限值。不论什么情况引起复位,都会使复位引脚的电位变低,进而使程序指针PC指向由复位向量FFF7H所指的系统复位程序入口地址。第5章 中断系统及应用 3.事件中断事件
7、中断 事件中断简称中断,以下提到的中断均为事件中断,一般产生于片内某部件或由外设中断输入引脚引入的某个事件,这种中断的开放/屏蔽由对应位和相应的IRQ或FIQ总使能控制,由软件设置。事件中断可采用两种方式:快速中断请求(FIQ)和中断请求(IRQ),这两种中断都由相应的总使能来控制。第5章 中断系统及应用 5.2.2 中断源中断源 表表5.1 中断源列表中断源列表 中断源 中断优先级 中断向量 保留字 Fosc/1024 溢出信号 PWM INT 音频输出 FIQ/IRQ0 FFF6H/FFF8H _FIQ/_IRQ0 TimerA 溢出信号 FIQ/IRQ1 FFF6H/FFF9H _FIQ
8、/_IRQ1 TimerB 溢出信号 FIQ/IRQ2 FFF6H/FFFAH _FIQ/_IRQ2 外部信号输入 EXT2 外部信号输入 EXT1 触键唤醒信号 IRQ3 FFFBH _IRQ3 第5章 中断系统及应用 4096 Hz 时基信号 2048 Hz 时基信号 1024 Hz 时基信号 IRQ4 FFFCH _IRQ4 4 Hz 时基信号 2 Hz 时基信号 IRQ5 FFFDH _IRQ5 频选信号 TMB1 频选信号 TMB2 IRQ6 FFFEH _IRQ6 UART 串行通信中断 IRQ7 FFFFH _IRQ7 第5章 中断系统及应用 1.定时器中断定时器中断 定时器中断
9、由单片机内部定时器TimerA和TimerB产生。在定时脉冲作用下从预置数单元初值开始加1计数,当计数为0 xFFFFH时,再加1便产生溢出,向CPU提出中断请求,以表明定时器的定时时间到,定时时间可通过程序设定,通常用于需要进行定时控制的场合。第5章 中断系统及应用 2.外部中断外部中断 SPCE061A单片机有两个外部中断EXT1和EXT2。两个外部输入引脚分别与B口的IOB2和IOB3复用,即EXT1(IOB2)和EXT2(IOB3)。引入两个外部中断源的中断请求信号,外部中断以负跳沿触发方式输入中断请求信号,如图5.2所示。第5章 中断系统及应用 中断系统EXT1EXT2(负跳沿)IO
10、B2(IOB3)负跳沿触发图5.2 外部中断信号 第5章 中断系统及应用 EXT1、EXT2可以由外部单脉冲产生中断请求信号,也可以通过接入相应的阻容元件实现定时中断。在IOB2和IOB4之间以及IOB3和IOB5之间分别接入两个反馈电路,外接RC振荡器做外部定时中断使用,如图5.3所示,此时,外部中断的反馈电路使用四个管脚(B口的IOB2、IOB3、IOB4和IOB5引脚),其中IOB4和IOB5主要用来组成RC反馈电路,通过IOB2和IOB4之间(或者IOB3和IOB5之间)增加一个RC振荡电路,便可在EXT1(或EXT2)端得到振荡信号作为外中断触发信号。为使反馈电路正常工作,必须将IO
11、B2(或IOB3)设置为反相输出方式,IOB4(或IOB5)设置为输入方式。第5章 中断系统及应用 中断系统EXT1EXT2(下降沿)IOB2(IOB3)运算放大器1IOB4(IOB5)RC图5.3 IOB2、IOB4或IOB3、IOB5之间的反馈结构 第5章 中断系统及应用 3.串行通信口中断串行通信口中断 串行通信口中断由SPCE061A内部串行通信口中断源产生。串行通信口中断分为串行口发送中断和接收中断两种,共用一个中断向量。因此,在进入串行通信口中断服务程序后,需要判断是接收中断还是发送中断。第5章 中断系统及应用 当串行通信口发送/接收完一组串行数据时,自动使串行通信口控制寄存器P_
12、UART_Command2中的TxReady和RxReady中断标志置位,并向CPU发出中断请求,CPU响应串行通信口中断后,转入中断服务程序执行。因此,只要在串行通信口中断服务程序中,安排一段对P_UART_Command2寄存器的TxReady和RxReady中断标志位的状态判断程序,便可区分发生了接收中断还是发送中断请求。当然串行传输中既可以使用中断方式收发数据,也可通过查询TxReady和RxReady中断标志位的状态收发数据。串行通信口接收、发送端为B口的IOB7(RxD)和IOB10(TxD)两个复用脚。第5章 中断系统及应用 4.触键唤醒中断触键唤醒中断 当系统执行睡眠命令时,C
13、PU便关闭PLL倍频电路,停止CPU时钟,使系统进入睡眠状态。系统处于睡眠状态时,通过IOA口低八位接的键盘给出唤醒信号,使系统接通PLL倍频电路,启动CPU 时钟,将系统从睡眠状态转到工作状态,CPU从睡眠处继续执行程序。与此同时产生一个IRQ3_KEY中断请求,进入唤醒中断。一般来讲,中断系统提供的中断源FIQ(TMA)、IRQ1IRQ7均可作为系统的唤醒源,作为定时唤醒系统。第5章 中断系统及应用 5.时基信号中断时基信号中断 SPCE061A单片机提供了多组时基信号能作为中断源。时基信号来自实时时钟32 768 Hz,输出有通过选频逻辑的TMB1、TMB2信号和直接从时基计数器溢出的各
14、种实时时基信号,在开启时基信号中断的情况下,有时基信号时,便发出时基信号中断申请,CPU查询到有中断请求后,置位P_INT_Ctrl中相应的中断请求标志位,在中断服务程序中通过测试P_INT_Ctrl来确定是哪个频率的时基信号产生的中断请求。第5章 中断系统及应用 5.2.3 中断控制中断控制 1.中断控制寄存器中断控制寄存器 SPCE061A 单片机对中断源的开放和屏蔽以及每个中断源是否被允许中断,都受中断允许寄存器P_INT_Ctrl和一些中断控制指令的控制。下面分别作一介绍。1)中断控制寄存器 P_INT_Ctrl(读/写)(7010H)P_INT_Ctrl 控制单元具有读/写属性,其读
15、写时表达的意义不同。中断控制寄存器功能如表5.2所示。第5章 中断系统及应用 表表5.2 中断控制寄存器功能表中断控制寄存器功能表 中断控制位 中断向量 中断源 说明 B15 FIQ_Fosc/1024 B14 IRQ0_Fosc/1024 Fosc/1024:系统时钟 1024 分频 B13 FFF6H FIQ_ TMA B12 FFF8H IRQ1_TMA 定时器 A 溢出信号 B11 FFF9H FIQ_TMB B10 FFFAH IRQ2_TMB 定时器 B 溢出信号 第5章 中断系统及应用 B9 IRQ3_EXT2 外部信号 2 中断 B8 IRQ3_EXT1 外部信号 2 中断 B
16、7 FFFBH IRQ3_KEY 键盘唤醒中断 B6 IRQ4_4 kHz 4096 Hz 时基信号中断 B5 IRQ4_2 kHz 2048 Hz 时基信号中断 B4 FFFCH IRQ4_1 kHz 1024 Hz 时基信号中断 B3 IRQ5_4 Hz 4 Hz 时基信号中断 B2 FFFDH IRQ5_2 Hz 2 Hz 时基信号中断 B1 IRQ6_TMB1 时基发生器 1 输出选频信号中断 B0 FFFEH IRQ6_TMB2 时基发生器 2 输出选频信号中断 FFF7H RESET 复位信号 FFFFH UART IRQ 串行通信口中断 FFF5H BREAK 软中断 第5章 中
17、断系统及应用 2)清中断标志寄存器 P_INT_Clear(写)(7011H)清中断标志寄存器用于清除中断控制标志位。当CPU响应中断后中断标志仍为1,硬件并不自动清除该标志,当进入中断服务程序后,必须将其控制标志清零,否则,CPU还会响应该中断。P_INT_Clear寄存器的每一位对应一个中断源(如表5.2所示,具体位置与中断控制寄存器相同),如果想清除某个中断标志,只要将该寄存器中对应位置1,即可清除该中断标志。该寄存器只有写的属性,读该寄存器是无任何意义的。第5章 中断系统及应用 2.中断控制端口配置中断控制端口配置 P_INT_Ctrl(写)P_INT_Ctrl(读)P_INT_Cle
18、ar(写)功能 1 允许中断 0 屏蔽中断,但不清除 P_INT_Ctrl(读)单元相应的中断标志位 1 有中断事件发生 0 没有中断事件发生 1 清除中断标志 0 不改变中断源的状态 第5章 中断系统及应用 3.中断控制指令中断控制指令 表表5.4 中断控制指令一览表中断控制指令一览表 指令格式 说明 FIQ ON FIQ OFF 允许 FIQ 中断 禁止 FIQ 中断 IRQ ON IRQ OFF 允许 IRQ 中断 禁止 IRQ 中断 INT FIQ 允许 FIQ 中断,禁止 IRQ 中断 INT IRQ 允许 IRQ 中断,禁止 FIQ 中断 INT FIQ,IRQ 允许 FIQ 和
19、IRQ 中断 INT OFF 禁止 FIQ 和 IRQ 中断 第5章 中断系统及应用 (1)FIQ ON指令。功能:开放FIQ中断,是FIQ中断的总中断允许命令,其控制指令不能代替P_INT_Ctrl。也就是说,即使在程序中写了该指令,但没有将P_INT_Ctrl 寄存器的FIQ 位置1,CPU也无法响应该中断。FIQ ON与FIQ OFF配对使用。第5章 中断系统及应用 例1 FIQ ON的使用。_main:FIQ OFF r1=0 x8000H P_INT_Ctrl=r1 /在P_INT_Ctrl 开放FIQ中断 FIQ ONloop:NOP GOTO loop 第5章 中断系统及应用(2
20、)FIQ OFF指令。功能:屏蔽FIQ 中断,该指令可以屏蔽P_INT_Ctrl 控制寄存器打开的FIQ 中断。例2 快速中断的屏蔽与开放。_main:FIQ ONr1=0 x8000HP_INT_Ctrl=r1 /开放FIQ中断FIQ OFF /关闭FIQ中断FIQ ON /开放FIQ中断loop:NOP GOTO loop 第5章 中断系统及应用 (3)IRQ ON IRQ总中断允许指令。功能:开放IRQ 中断。该控制指令不能代替P_INT_Ctrl,与FIQ ON 相似,必须通过P_INT_Ctrl允许中断,与IRQ OFF配对使用。(4)IRQ OFF IRQ总中断屏蔽指令。功能:屏蔽
21、IRQ中断,与FIQ OFF相似,可以屏蔽P_INT_Ctrl开放的中断,并通过IRQ ON开放。第5章 中断系统及应用 (5)INT指令。功能:设置允许/禁止FIQ 和IRQ 中断。该控制指令与前面的指令相同,只有先通过P_INT_Ctrl 寄存器打开中断,才能完全开放中断。INT 控制指令可以细分为:INT FIQ 功能:允许FIQ中断,关闭IRQ中断。INT IRQ 功能:允许IRQ中断,关闭FIQ中断。INT FIQ IRQ功能:允许FIQ中断,允许IRQ中断。INT OFF 功能:关闭FIQ中断,关闭IRQ中断。第5章 中断系统及应用 例3 中断命令的使用。_main:r1=0 x8
22、004H/开中断IRQ5_2 Hz和FIQ_PWMP_INT_Ctrl=r1INT FIQ/允许FIQ_PWM中断,屏蔽IRQ5中断 INT IRQ/允许IRQ5中断,屏蔽FIQ_PWMNT FIQ,IRQ/允许IRQ和FIQ中断INT OFF/屏蔽IRQ和FIQ中断loop:NOP GOTO loop第5章 中断系统及应用 5.2.4 中断向量及优先级中断向量及优先级 SPCE061A单片机每一中断都对应一个向量单元,称为中断向量。在中断向量单元中存放中断服务程序的入口地址,而不是转移指令(与MCS-8051不同),如表5.5所示。在允许中断的情况下,当有中断请求时,将使程序转移至由中断向量
23、单元内容所决定的中断服务程序起始地址运行。SPCE061A单片机快速中断的优先级高于普通中断的优先级。在IRQ中断中,IRQ0的中断优先于IRQ1,IRQ1 的中断优先于IRQ2,IRQ的序号越大,中断优先级越低。串行通信口(UART)的中断优先级最低。第5章 中断系统及应用 表表5.5 SPCE061A中断的优先级中断的优先级 中断类型 中断向量 中断查询顺序 RESET FFF7 H 复位向量 0 FIQ FFF6 H 1 IRQ0 FFF8 H 2 IRQ1 FFF9 H 3 IRQ2 FFFA H 4 IRQ3 FFFB H 5 IRQ4 FFFC H 6 IRQ5 FFFD H 7
24、IRQ6 FFFE H 8 UART、IRQ FFFF H 9 第5章 中断系统及应用 在IRQ中断中,只是中断查询有先后,不能进行中断嵌套。同一中断向量内的中断源中断优先级相同。中断优先关系如下:FIQIRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6UART、IRQ同级 第5章 中断系统及应用 5.2.5 中断响应中断响应 1.中断响应过程中断响应过程 1)中断查询 把所有的中断请求都汇集到P_INT_Ctrl 和P_UART_Command2(该寄存器用于检测串行通信口中断标志位)寄存器中。外部中断时运用采样将中断请求信号锁存在P_INT_Ctrl 寄存器的相应标志位,而音频输出中
25、断、触键唤醒、定时中断、时基中断、串行通信口中断等中断请求,由于都发生在芯片的内部,可以直接去置位P_INT_Ctrl和P_UART_Command2中各自的中断请求标志位。所谓查询就是由CPU测试P_INT_Ctrl和P_UART_Command2中各标志位的状态,确定是否有中断请求发生以及是哪一个中断请求。第5章 中断系统及应用 中断查询发生在每条指令周期结束,按中断优先级顺序对中断请求进行查询,即先查询FIQ,再查询IRQ。同级中断按IRQ0、IRQ1、IRQ2、IRQ3、IRQ4、IRQ5、IRQ6、UART的顺序查询。如果查询到有标志位为1,则表明有中断请求发生。由于中断请求是随机发
26、生的,无法预先知道,因此,程序执行过程中,在每条指令结束都要进行中断查询。第5章 中断系统及应用 2)中断响应 当允许中断且查询到中断请求时,才能响应中断。此时,CPU首先将程序计数器PC的内容压入堆栈,再将SR压入堆栈以保护断点,然后将存放在中断向量单元的中断服务程序入口地址装入PC,执行中断服务程序。第5章 中断系统及应用 3)中断响应条件中断响应条件如下:(1)中断开放;(2)对应中断源允许中断;(3)无高优先级的中断请求;(4)一条指令执行结束。第5章 中断系统及应用 2.中断请求的撤销中断请求的撤销 中断响应后P_INT_Ctrl和P_UART_Command2中的中断请求标志应及时
27、清除,否则就意味着中断请求仍然存在,会造成中断的重复响应。因此,必须及时撤销中断请求。SPCE061A中断撤销只需向中断标志位写1即可。除UART中断外,所有的中断均需软件清除标志位,即将P_INT_Ctrl中相应的中断标志位清除,就撤销了中断请求。而UART中断则是硬件自动清除,不需要软件操作。如当接收到数据后P_UART_Command2中的接收标志位自动置1,进入UART中断。在UART中断服务程序中读出数据,P_UART_Command2相应的中断标志位自动清除。第5章 中断系统及应用 3.中断服务流程中断服务流程 1)中断入口 表表5.6 中断入口地址表中断入口地址表 中断类型 中断
28、向量 RESET FFF7H 复位向量 FIQ FFF6H IRQ0 FFF8H IRQ1 FFF9H IRQ2 FFFAH IRQ3 FFFBH IRQ4 FFFCH IRQ5 FFFDH IRQ6 FFFEH UART IRQ FFFFH BREAK FFF5H 第5章 中断系统及应用 中断入口关中断现场保护中断源判断中断处理清中断标志位现场恢复开中断中断返回图5.4 中断服务流程图 第5章 中断系统及应用 2)关中断和开中断 在一个中断执行过程中,有可能有新的中断请求发生,对于重要的中断必须执行完成,不允许被其它的中断所嵌套,对此可以采用关闭中断的方法来解决。如在IRQ中断中不允许FIQ
29、中断嵌套,可以在IRQ中断响应后关闭中断,当中断服务程序执行结束后,再开放中断,响应FIQ。也可在进入中断服务程序后,先关闭中断系统,彻底屏蔽其它中断请求,等中断处理完成后,再打开中断系统。还有一种情况是中断处理可以被打断,但现场的保护和恢复不允许打扰以免现场被破坏,为此应在保护现场和恢复现场的前后,进行关中断和开中断,这样除现场保护和现场恢复的片刻外,仍然保持着系统中断嵌套功能。SPCE061A单片机开中断和关中断通过中断控制指令来完成。如果只要对单个中断源进行控制,通过P_INT_Ctrl 控制寄存器相应位置1和清0来打开或关闭某个中断源。第5章 中断系统及应用 3)现场保护和现场恢复 所
30、谓现场是指中断时刻单片机存储单元的数据状态。为了使中断服务的执行不破坏这些数据或状态,以免在中断返回后影响主程序的运行,通常要把它们送入堆栈中保存起来,这就是现场保护。现场保护一定要位于中断服务程序的前面,中断服务结束后在返回主程序前把保存的现场内容从堆栈中弹出,以恢复那些存储单元的原有内容,这就是现场恢复。现场恢复一定要位于中断处理程序之后返回主程序前。第5章 中断系统及应用 4)中断源判断 由于SPCE061A中断源多于中断向量,多个中断源共用一个中断向量,所以当CPU响应中断进入中断服务程序后,要通过读P_INT_Ctrl判断产生中断请求的中断源。5)中断处理 中断处理是中断服务程序的核
31、心内容,是中断的具体目的,即中断后要完成的操作。第5章 中断系统及应用 6)清中断标志位 CPU是根据中断标志位来判断并进行响应中断的,除串行通信口中断外所有的中断标志位不是硬件清除,而是由软件清除的,所以在中断服务程序中必须将中断标志位清除。中断标志位的清除只要在中断服务程序中即可,位置不是固定的。一般在中断服务程序返回前清除中断标志。7)中断返回 中断服务程序最后一条指令必须是中断返回指令RETI,当CPU执行这条指令时,从堆栈中弹出断点PC及SR,即可恢复断点,重新执行被中断的程序。第5章 中断系统及应用 5.3 中断系统应用中断系统应用5.3.1 单中断源应用单中断源应用 1.定时中断
32、定时中断 定时器中断包括定时器A中断和定时器B中断,而且不仅FIQ中断方式中有定时器中断源,在IRQ1(TimerA)、IRQ2(TimerB)中也有定时器中断源,可根据具体程序需要选择。如果需要定时器中断优先级高,可以打开FIQ方式的定时器中断;如果不要求较高的中断优先级,可以将定时器中断放在IRQ中断方式中。第5章 中断系统及应用 例4 利用定时器A,在A口的IOA0脚输出周期为20 ms的方波(定时10 ms)。分析:(1)选择使用哪种中断方式,是FIQ中断方式还是IRQ中断方式。当然在这个例子中采用哪一种中断都可以,这里我们采用IRQ中断,开中断时需打开IRQ1_TMA中断即定时器A中
33、断,将P_INT_Ctrl 的IRQ1_TMA置位即可。(2)产生T=20 ms的方波,只要每10 ms使IOA0脚输出电平翻转一次,因此只需定时10 ms即可。第5章 中断系统及应用(3)选择时钟源,以方便准确为原则,我们选用8 kHz时钟源A,时钟源B为1。(4)确定定时器A的预置初数(P_imerA_Data)。计算方法:定时器溢出率1/10 ms=100 Hz定时器初值N=0 xFFFF-时钟源频率/定时器溢出频率 =0 xFFFF-8192/100=0 xFFAD 第5章 中断系统及应用 表表5.7 定时中断使用的寄存器定时中断使用的寄存器 配置单元 属性 地址 配置单元功能说明 P
34、_TimerA_Data 读/写 700A H TimerA 预置初值存储单元 P_TimerA_Ctrl 读/写 700B H TimerA 控制单元,时钟源 ClkA、ClkB 输入选择和脉宽调制占空比输出 APWMO 的控制 P_TimerB_Data 读/写 700C H TimerB 预置初值存储单元 P_TimerB_Ctrl 读/写 700D H TimerB 控制单元,时钟源 ClkA 输入选择和脉宽调制占空比输出 BPWMO 的控制 P_INT_Ctrl 读/写 7010 H 写:控制各中断源允许或禁止中断 读:判断产生中断请求的中断源 P_INT_Clear 写 7011
35、H 清除中断请求 第5章 中断系统及应用 开始初始化 IOA 为输出端时钟源频率设定设置 TimerA开 TimerA 中断等待中断图5.5 定时器中断主程序流程图 第5章 中断系统及应用 中断入口关中断保护现场IOA0取反清中断标志位恢复现场开中断中断返回图5.6 定时器中断服务程序流程图 第5章 中断系统及应用 程序名称:TimerA _10ms _Pulse.asm。.include hardware.inc.define TIMERA_CLKA_8 K 0 x0003 /时钟源A选择8192Hz.defineTIMERA_CLKB_1 0 x0030H /时钟源B选择1.define
36、TIMER_DATA_FOR_8 kHz 0 xFFAD /计算:0 xFFFFH-时钟源频率/定时器溢出率 0 xFFFF-8192/100 OxFFAD.RAM.CODE.PUBLIC_main 第5章 中断系统及应用 _main:r1=0 x0001/定义IOA0为输出P_IOA_Dir=r1P_IOA_Attrib=r1P_IOA_Data=r1r1=TIMER_DATA_FOR_8 kHz/定时器A置初值0 xFFADP_TimerA_Data=r1/定义时钟源A为8192 Hz,时钟源B为1r1=TIMERA_CLKA_8K+TIMERA_CLKB_1P_TimerA_Ctrl=r
37、1r1=Ox1000/开放定时A的中断P_INT_Ctrl=r1INT IRQ /开IRQ中断loop:NOP/等待中断GOTO loop 第5章 中断系统及应用 定时器A中断服务程序:每10 ms中断一次,将IOA0端口状态取反。.TEXT.PUBLIC _IRQ1_IRQ1:INT OFF /关中断PUSH r1,r5 TO sp /保护现场r1=P_IOA_DATAr1=0 xFFFFH/方波标识位取反,输出波形P_IOA_Data=r1r1=0 x1000/清除中断标志位P_INT_Clear=r1POP r1,r5 FROMsp/恢复现场INT IRQ FIQ /开中断 RETI /
38、中断返回 第5章 中断系统及应用 2.时基中断时基中断 SPCE061A单片机时基信号频率资源丰富,有2 Hz、4 Hz、8 Hz、16 Hz、32 Hz、64 Hz、128 Hz、256 Hz、512 Hz、1024 H、2048 Hz、4096 Hz等多种频率供实时处理时钟选择。提供了七个时基中断源,占用了三个中断向量,可根据实际需要选择适当的时基信号源。时基中断使用的控制寄存器如表5.8所示。第5章 中断系统及应用 表表5.8 时基中断使用的控制寄存器时基中断使用的控制寄存器 配置单元 属性 地址 配置单元功能说明 P_TimeBase_Setup 写 700EH 时基信号发生器输出的
39、TMB1、TMB2 频率设定 P_TimeBase_Clear 写 700FH 时基信号发生器复位并进行时间的精确校准 P_SystemClock 写 7013H 系统时钟的选择控制单元 P_INT_Ctrl 读/写 7010H 写:控制各中断源允许或禁止 读:判断产生中断请求的中断源 P_INT_Clear 写 7011H 用来清除中断请求标志位 第5章 中断系统及应用 例5 在A口低8位接八个发光二极管,利用时基信号设计一定时器,定时0.5 s闪烁一次。分析:首先考虑定时0.5 s采用哪个时基信号比较方便,我们可以很明显地看出2 Hz时基信号中断是最方便的。只要设定2 Hz的时基信号中断为
40、0.5 s的定时时间即可。硬件:IOA0IOA7接八个发光二极管。主程序:端口初始化,2 Hz中断开放。程序名称:TimeBase_2Hz.asm。时基中断主程序流程图如图5.7所示,中断服务程序流程图如图5.8所示。第5章 中断系统及应用 开始初始化 口 低8位为输出开2 Hz中断等待中断图5.7 时基中断主程序流程图 第5章 中断系统及应用 中断入口关中断保护现场IOA0IOA7值取反清中断标志位恢复现场开中断中断返回图5.8 时基中断中断服务程序流程图 第5章 中断系统及应用 主程序:.include hardware.inc.CODE.PUBLIC _main_main:r1=0 x0
41、0FF /初始化A口低8位为输出P_IOA_Attrib=r1P_IOA_Dir=r1r1=0 x0000P_IOA_Data=r1r1=0 x0004 /开放IRQ5_2 Hz中断P_INT_Ctrl=r1INT IRQ /开IRQ中断loop:NOPGOTO loop 第5章 中断系统及应用 中断服务程序:每中断一次,使IOA0IOA7状态取反,所接LED状态变化。.TEXT.PUBLIC _IRQ5_IRQ5:PUSH r1,r5 TO sp /保护现场r1=0 x0004TEST r1,P_INT_Ctrl /判2 Hz中断源JNZ IRQ5_2Hz /是,2 Hz中断,则转至对应程序
42、段IRQ5_4Hz:r1=0 x0008/否则是4 Hz中断GOTO Exit_INT 第5章 中断系统及应用 IRQ5_2Hz:r1=P_IOA_DATA/2 Hz中断应用程序 r1=0 xFFFF/IOA口值取反P_IOA_Data=r1r1=0 x0004Exit_INT:P_INT_Clear=r1 /清中断标志POP r1,r5 FROM sp /恢复现场RETI/中断返回 第5章 中断系统及应用 3.触键唤醒中断触键唤醒中断 触键唤醒中断是系统进入睡眠状态后,通过A口低8位的按键来唤醒系统时钟,恢复睡眠时的PC指针的,同时进入触键唤醒中断。触键唤醒中断使用的控制寄存器如表5.9所示
43、。例6 使CPU进入睡眠状态,通过触键唤醒系统。IOA0IOA7接八个发光二极管并利用唤醒中断点亮LED。分析:首先考虑如何使系统进入睡眠状态,前面已经介绍了,通过设置时钟系统控制寄存器P_SystemClock 的b4位使系统进入睡眠状态。其次设置唤醒按键,因为只有A口的低8位具有唤醒功能,所以按键必须在A口低8位中选择。本例选用A口低8位接键盘。第5章 中断系统及应用 表表5.9 触键唤醒中断使用的控制寄存器触键唤醒中断使用的控制寄存器 配置单元 属性 地址 配置单元功能说明 P_IOA_Latch 读 7004H 从其读数可激活 A 口的唤醒功能并锁存 IOA0IOA7 上的键状态 P_
44、SystemClock 写 7013H 系统时钟的选择控制单元 P_INT_Ctrl 读/写 7010H 写:控制各中断源允许或禁止中断 读:判断产生中断请求的中断源 P_INT_Clear 写 7011H 用来清除中断源的中断请求 第5章 中断系统及应用 硬件:A口低8位接键盘;高8位接八个LED。主程序:IOA口、触键唤醒/中断初始化,系统进入睡眠状态。触键唤醒中断主程序流程图如图5.9所示,中断服务程序流程图如图5.10所示。第5章 中断系统及应用 开始初始化 IOA0IOA7为输出端开触键唤醒中断系统进入睡眠状态等待中断图5.9 触键唤醒主程序流程图 第5章 中断系统及应用 中断入口中
45、断返回关中断保护现场点亮LED清中断标志位恢复现场开中断图5.10 触键唤醒中断服务程序流程图 第5章 中断系统及应用 主程序:.include hardware.inc.PUBLIC _main.define P_IOA_latch 0 x7004.CODE_main:r1=0 xFF00 /初始化A口低8位为带下拉输入,高8位为输出P_IOA_Dir=r1P_IOA_Attrib=r1r1=0 x0000 第5章 中断系统及应用 P_IOA_Data=r1r1=0 x0080 /开放IRQ3_KEY触键唤醒中断P_INT_Ctrl=r1r1=P_IOA_latch/激活A口触键唤醒INT
46、IRQ/开IRQ中断r1=0 x0007P_SystemClock=r1/系统进入睡眠状态Loop:NOP/当有键唤醒时继续执行GOTO Loop 第5章 中断系统及应用 中断服务程序:判断中断源类型,是触键唤醒中断点亮八个发光二极管,否则返回。.TEXT.PUBLIC _IRQ3_IRQ3:INT OFFPUSH r1,r4 TO sp/保护现场r1=0 x0080test r1,P_INT_Ctrl/是否为触键唤醒中断第5章 中断系统及应用 jz L_notKeyArouse/否,外部中断L_KeyArouse:r1=P_IOA_Data/是,触键唤醒中断r1|=0 xFF00/点亮八个发
47、光二极管P_IOA_Data=r1r1=0 x0080GOTO Exit_INT L_notKeyArouse:/外部中断r1=0 x0100/判断是EXT1中断吗TEST r1,P_INT_Ctrl 第5章 中断系统及应用 JNZ L_EXT1 r1=0 x0200/外部中断2L_EXT1:NOPExit_INT:P_INT_Clear=r1/清中断标志POP r1,r4 FROM sp/恢复现场INT IRQRETI.END 第5章 中断系统及应用 4.外部中断外部中断 SPCE061A单片机有两个外部中断源EXT1和EXT2,这两个外部中断源可以使用反馈电路定时触发,也可以通过IOB2或
48、IOB3引脚的下降沿触发。外部中断使用的控制寄存器如表5.10所示。表表5.10 反馈电路外部中断使用的控制寄存器反馈电路外部中断使用的控制寄存器 配置单元 属性 地址 配置单元功能说明 P_INT_Ctrl 读/写 7010H 写:可控制各中断源允许或禁止中断 读:可判断产生中断请求的中断源 P_INT_Clear 写 7011H 清除中断源的中断请求 P_FeedBack 写 7009H B 口的应用方式控制向量 第5章 中断系统及应用 例7 利用外部中断点亮接在A口低8位的八个LED。分析:选择使用外部中断EXT1还是外部中断EXT2。两个外部中断都可以,只是初始化时略有不同。选择EXT
49、1初始化IOB2为带上拉电阻的输入端口,选择EXT2初始化IOB3为带上拉电阻的输入端口。此例我们选择EXT1中断源。硬件:A口低8位接八个LED。主程序:端口初始化,开放EXT1中断。程序名称:Ext1.asm。外部中断的主程序流程图如图5.11所示,中断服务程序流程图如图5.12所示。第5章 中断系统及应用 开始初始化 IOA0IOA7为输出端开放EXT1中断初始化IOB2为带上拉电阻输入等待中断图5.11 外部中断主程序流程图 第5章 中断系统及应用 中断入口关中断保护现场是IRQ_EXT1中断吗?点亮LED清中断标志位恢复现场开中断中断返回NY图5.12 外部中断中断服务程序流程图 第
50、5章 中断系统及应用 主程序:.include hardware.inc.CODE.PUBLIC _main_main:r1=0 x00FF /设置A口低8位为输出P_IOA_Attrib=r1P_IOA_Dir=r1r1=0 x0000P_IOA_Data=r1r1=0 x0000/设IOB2带上拉电阻输入 第5章 中断系统及应用 P_IOB_Dir=r1P_IOB_Attrib=r1r1=0 x0004P_IOB_Data=r1r1=0 x0100/开中断IRQ3_EXT1P_INT_Ctrl=r1INT IRQloop:NOPJMP loop 第5章 中断系统及应用 中断服务程序:判断中
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。