第六章 单片机的中断与 定时系统
第六章 单片机的中断与 定时系统
6.1中断的基本概念 单片机在某一时刻只能处理一个任务,当多个任务同时要 求单片机处理时,这一要求应该怎么实现呢?通过中断可以实 现多个任务的资源共享 所谓的中断就是,当CPU正在处理某项事务的时候,如果 外界或者内部发生了紧急事件,要求CPU暂停正在处理工作而 去处理这个紧急事件,待处理完后,再回到原来中断的地方, 继续执行原来被中断的程序,这个过程称作中断 从中断的定义我们可以看到中断应具备中断源、中断响应 中断返回这样三个要素。中断源发出中断请求,单片机对中断 请求进行响应,当中断响应完成后应进行中断返回,返回被中 断的地方继续执行原来被中断的程序
6.1 中断的基本概念 单片机在某一时刻只能处理一个任务,当多个任务同时要 求单片机处理时,这一要求应该怎么实现呢?通过中断可以实 现多个任务的资源共享。 所谓的中断就是,当CPU正在处理某项事务的时候,如果 外界或者内部发生了紧急事件,要求CPU暂停正在处理工作而 去处理这个紧急事件,待处理完后,再回到原来中断的地方, 继续执行原来被中断的程序,这个过程称作中断。 从中断的定义我们可以看到中断应具备中断源、中断响应、 中断返回这样三个要素。中断源发出中断请求,单片机对中断 请求进行响应,当中断响应完成后应进行中断返回,返回被中 断的地方继续执行原来被中断的程序
6.2.1MCS51单片机的中断源 1.外部中断源 外部中断0(INT):来自P32引脚,采集到低电平或者下降 沿时,产生中断请求 外部中断1(INT):来自P3引脚,采集到低电平或者下降 沿时,产生中断请求。 2.内部中断源 定时器计数器0(T):定时功能时,计数脉冲来自片内; 计数功能时,计数脉冲来自片外P34引脚。发生溢出时,产生中 断请求 定时器计数器1(T1):定时功能时,计数脉冲来自片内 计数功能时,计数脉冲来自片外P35引脚。发生溢出时,产生中 断请求 串行口:为完成串行数据传送而设置。单片机完成接受或发 送一组数据时,产生中断请求
6.2.1 MCS-51单片机的中断源 1. 外部中断源 外部中断0( P3.2 P3.3 ):来自 引脚,采集到低电平或者下降 沿时,产生中断请求。 外部中断1( 0 INT ):来自 引脚,采集到低电平或者下降 沿时,产生中断请求。 1 INT 2. 内部中断源 定时器∕计数器0( T0 ):定 时功能时,计数 脉冲来自片内; 计数功能时,计数脉冲来自片外 P3.4 引脚。发生溢出时,产生中 定时器∕计数器1( T1 ):定时功能 时,计数 脉 冲来自片内; 计数功能时,计数脉冲来自片外 P3.5 引脚。发生溢出时,产生中 串行口:为完成串行数据传送而设置。单片机完成接受或发 送 一组数据时,产生中断请求。 断请求。 断请求
6.2.2中断控制的专用寄存器 1.定时器控制寄存器(TCON) 该寄存器用于保存外部中断请求以及定时器的计数溢出。进行 字节操作时,寄存器地址为88H。按位操作时,各位的地址为88H 8FH。寄存器的内容及位地址表示如下 位地址8FH8EH8DH8CH8BH|8AH|89H88H 位符号TF1TR1 TFoTR0正E1T1 IEoITo IT和IT1——外部中断请求触发方式控制位 Io(IT1)=1脉冲触发方式,下降沿有效 (IT1)=0电平触发方式,低电平有效
6.2.2 中断控制的专用寄存器 1. 定时器控制寄存器(TCON) 该寄存器用于保存外部中断请求以及定时器的计数溢出。进行 字节操作时,寄存器地址为88H。按位操作时,各位的地址为88H ~8FH。寄存器的内容及位地址表示如下: 位地址 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 位符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 ⚫ IT0 和IT1——外部中断请求触发方式控制位 IT0 (IT1)=1 脉冲触发方式,下降沿有效 IT0 (IT1)=0 电平触发方式,低电平有效
IE和IE1外中断请求标志位 当CPU采样到ⅠNT(或INT)端出现有效中断请求时,IE0 (IE1)位由硬件置“1”。当中断响应完成转向中断服务程序 时,由硬件把IE0(或1)清零。 ●TR。和TR1定时器运行控制位 TR(TR1)=0定时器/计数器不工作 TR(TR1)=1定时器/计数器开始工作 TF0和TF1计数溢出标志位 当计数器产生计数溢出时,相应的溢出标志位由硬件置“1。 当转向中断服务时,再由硬件自动清“0°。计数溢出标志位 的使用有两种情况:采用中断方式时,作中断请求标志位 来使用;采用查询方式时,作查询状态位来使用
⚫ IE0和IE1——外中断请求标志位 当CPU采样到 0 INT (或 1 INT )端出现有效中断请求时,IE0 (IE1)位由硬件置“1”。当中断响应完成转向中断服务程序 时,由硬件把IE0(或IE1)清零。 ⚫ TR0 和TR1——定时器运行控制位 TR0 (TR1 )=0 定时器/计数器不工作 TR0 (TR1 )=1 定时器/计数器开始工作 ⚫ TF0和TF1——计数溢出标志位 当计数器产生计数溢出时,相应的溢出标志位由硬件置“1” 。 当转向中断服务时,再由硬件自动清“0”。计数溢出标志位 的使用有两种情况:采用中断方式时,作中断请求标志位 来使用;采用查询方式时,作查询状态位来使用
2.串行口控制寄存器(SC0N) 进行字节操作时,寄存器地址为98H。按位操作时,各位的地 址为98H~9FH。寄存器的内容及位地址表示如下: 位地址9FH9EH9DH9CH9BH9AH99H98H 位符号 SM SM, SM, REN TB,3RB3mRI 其中与中断有关的控制位共2位: TI串行口发送中断请求标志位 当发送完一帧串行数据后,由硬件置“1”;在转向中断服务 程序后,用软件清“0°。 RI串行口接收中断请求标志位 当接收完一帧串行数据后,由硬件置“1;在转向中断服务 程序后,用软件清“03。串行中断请求由T和RI的逻辑或得 到
2. 串行口控制寄存器(SCON) 进行字节操作时,寄存器地址为98H。按位操作时,各位的地 址为98H~9FH。寄存器的内容及位地址表示如下: 位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI 其中与中断有关的控制位共2位: ⚫ TI——串行口发送中断请求标志位 当发送完一帧串行数据后,由硬件置“1”;在转向中断服务 程序 后,用软件清“0”。 ⚫ RI——串行口接收中断请求标志位 当接收完一帧串行数据后,由硬件置“1”;在转向中断服务 程序后,用软件清“0”。串行中断请求由TI和RI的逻辑或得 到
3.中断允许控制寄存器(IE) 进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地 址为0A8H~0AFH。寄存器的内容及位地址表示如下: 位地 OAFHOAEH0ADH/0AC 址 H OABH OAAH 0A9H0A8H 位符EA 号 ES ET EⅩ ET 0 EX
3. 中断允许控制寄存器(IE) 进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地 址为0A8H~0AFH。寄存器的内容及位地址表示如下: 位地 址 0AFH 0AEH 0ADH 0AC H 0ABH 0AAH 0A9H 0A8H 位符 号 EA / / ES ET1 EX1 ET0 EX0
其中与中断有关的控制位共6位: EA中断允许总控制位 EA=0中断总禁止,禁止所有中断 EA=1中断总允许,总允许后中断的禁止或允许由各中断 源的中断允许控制位进行设置。 ●EX和EX1外部中断允许控制位 EX0(EX1)=0禁止外部中断 EX0(EX1)=1允许外部中断 ET和ET定时器/计数器中断允许控制位 ET(ET1)=0禁止定时器/计数器中断 ET(ET1)=0允许定时器计数器中断 ES——串行中断允许控制位 ES=0禁止串行中断 ES=1允许串行中断
其中与中断有关的控制位共6位: ⚫ EA——中断允许总控制位 EA=0 中断总禁止,禁止所有中断 EA=1 中断总允许,总允许后中断的禁止或允许由各中断 源的中断允许控制位进行设置。 ⚫ EX0和EX1——外部中断允许控制位 EX0(EX1)=0 禁止外部中断 EX0(EX1)=1 允许外部中断 ⚫ ET0和ET1——定时器/计数器中断允许控制位 ET0(ET1)=0 禁止定时器/计数器中断 ET0(ET1)=0 允许定时器/计数器中断 ⚫ ES——串行中断允许控制位 ES=0 禁止串行中断 ES=1 允许串行中断
4.中断优先级控制寄存器(IP) IP寄存器地址0B8H,位地址为OBFH~0B8H。寄存器的内容 及位地址表示如下: 位地 OBFH OBEH|oBDH| OBCH OBBH|oBAH| OB9H OBSH 址 位符 PS PT, PX PT 0 PX 号 0 其中 PP 外部中断0优先级设定位 定时中断0优先级设定位 PX1外部中断1优先级设定位 PT1定时中断1优先级设定位 PS串行中断优先级设定位。 以上各位设置为“03时,则相应的中断源为低优先级;设置为 1”时,则相应的中断源为高优先级
4. 中断优先级控制寄存器(IP) IP寄存器地址0B8H,位地址为0BFH~0B8H。寄存器的内容 及位地址表示如下: 位地 址 0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H 位符 号 / / / PS PT1 PX1 PT0 PX0 其中: PX0——外部中断0优先级设定位; PT0——定时中断0优先级设定位; PX1——外部中断1优先级设定位; PT1——定时中断1优先级设定位; PS——串行中断优先级设定位。 以上各位设置为“0”时,则相应的中断源为低优先级;设置为 “1”时,则相应的中断源为高优先级
优先级的控制原则是 低优先级中断请求不能打断高优先级的中断服务;但高优先级 中断请求可以打断低优先级的中断服务,从而实现中断嵌套。 如果一个中断请求已被响应,则同级的其它中断服务将被禁止。 即同级不能嵌套。 如果同级的多个中断同时出现,则按CPU查询次序确定哪个中 断请求被响应。其查询次序为:外部中断0→定时中断→外部中 断→定时中断→串行中断
优先级的控制原则是: ⚫ 低优先级中断请求不能打断高优先级的中断服务;但 高优先级 中断请求可以打断低优先级的中断服务,从而实现中断嵌套。 ⚫ 如果一个中断请求已被响应,则同级的其它中断服务将被禁止。 即同级不能嵌套。 ⚫ 如果同级的多个中断同时出现,则按CPU查询次序确定哪个中 断请求被响应。其查询次序为:外部中断0→定时中断→外部中 断→定时中断→串行中断