第五模块 单片机中断系统项目实训
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
任务5-10-1 简易数码秒表设计 一、MCS-51单片机的中断系统
1.MCS-51单片机的中断结构 MCS-51单片机提供了5个中断 源,两个中断优先级控制,可实现两 个中断服务嵌套。当CPU支持中断屏 蔽指令后,可将一部分或所有的中断 关断,只有打开相应的中断控制位后, 方可接收相应的中断请求。程序设置 中断的允许或屏蔽,也可设置中断的 优先级。 MCS-51单片机有5个中断源: 外部中断0 、定时/计数器T0、外部中 断1 、定时/计数器T1、串口中断TI或 RI。有两个中断控制寄存器,其中中 断允许寄存器IE控制中断源的使用与 屏蔽。中断优先级寄存器IP实现中断 源的两个优先级控制。 MCS-51单片 机的中断结构 如图所示:
文件包含是指一个程序将另一个指定的文件的全部内容包含进来。文件包 含命令的一般格式如下:
#include<文件名> 一条#include命令只能指定一个被包含文件。如果程序中要包含多个文件, 则需要使用多个包含命令。当程序中需要调用C51编译器提供的各种库函数时, 必须在程序的开头使用#include命令将相应的函数说明文件包含进来。 3.条件编译 一般情况下,对C语言程序进行编译时,所有的程序都参加编译。但有时希 望对其中某一部分内容只在满足一定条件下才进行编译,这就是所谓的条件编译。 条件编译可以选择不同的编译范围,从而产生不同的代码。C51编译器的预处理提 供的条件编译命令可以分为3种形式。
任务5-10-2 使用定时器T0的中断控制数码管倒计数显示
一、MCS-51单片机寄存器组的切换
8051有4个寄存器组,每组8字节位于内部RAM的起始位置。分配 R0~R7对应这8字节,具体位置取决于PSW(程序状态字)的两位 (RS0、RS1)设置。这两位决定给定时间内R0~R7对应的HEX地址0~ 7、8~F、10~17或18~1F。寄存器组使得程序流程有非常快的上下文 切换。当中断发生时,典型变化包括由一动作移到另一动作。不是推进和 弹出堆栈,两位(RS0、RS1)的改变可保存所有8个寄存器。当运行一 个中断任务时,采用不同的寄存器组。一个任务的8字节保留,另一个不 同的8字节用在新任务中。 高优先级中断可以中断正在处理的低优先级中断,因而必须注意寄 存器组的分配。最好给每种优先级程序分配不同的寄存器组。当前工作 寄存器可由PSW中的两位设置,也可使用using指定,using后的变量为 一个0~3的常整数。
任务5-10-2 使用定时器T0的中断控制数码管倒计数显示
一、MCS-51单片机寄存器组的切换
Using不允许用于外部函数。它对函数的目标代码影响如下: ①函数入口处将当前寄存器组保留; ②使用指定的寄存器组; ③函数退出前,寄存器组恢复。 中断服务函数的完整语法如下: 返回值 函数名([参数])[模式][重入]interrupt n [using n] 中断不允许用于外部函数。它对函数的目标代码影响如下: ①当调用函数时,SFR中的ACC、B、DPH、DPL和PSW(当需要 时)入栈; ②如果不使用寄存器组切换,则甚至中断函数所需的所有工作寄存器 都入栈; ③函数退出前,所有的寄存器内容出栈; ④函数由8051的指令RETI终止。
第五模块
单片机中断系统项目实训
项目10 定时/计数器中断控制 项目11 音乐播放控制 项目12 外部中断源中断控制
项目10
定时/计数器中断控制
任务5-10-1 简易数码秒表设计
任务5-10-2 使用定时器T0的中断控制数码管倒计数显示
任务5-10-3 使用计数器T1的中断控制数码管显示按键计数
D7 TCON TF1 位地址 8FH TR1 8EH TF0 8DH TR0 8CH IE1 8BH IT1 8AH IE0 89H IT0 88H D6 D5 D4 D3 D2 D1 D0
TCON寄存器各位控制功能简要说明如下: (1)TF1:定时/计数器T1的溢出标志位 (2)TR1:定时/计数器T1的运行控制位 (3)TF0:定时/计数器T0的溢出标志位 (4)TR0:定时/计数器T0的运行控制位 (5)IE1:外部中断 INT1的中断请求标志位 (6)IT1:外部中断 INT1 的触发方式控制位 (7)IE0:外部中断 INT0 的中断请求标志位 (8)IT0:外部中断 INT0 的触发方式控制位
(2)#if 常量表达式 程序段1 #else 程序段2 #end if 如果常量表达式为“真”,则;否则编译“程序段2”。
任务5-10-3 使用计数器T1的中断控制数码管显示按键计数
一、C语言的编译预处理
(3)#ifndef 标志符 程序段1 #else
程序段2
#end if 该形式编译命令的格式与第一种命令格式只有第一行不同,它的作用 与第一种编译命令的作用正好相反。即指定的标志符末被定义,则“程序 段1”参加编译,并产生有效代码,而忽略掉“程序段2”。否则,“程序段2” 参加编译并产生有效代码,而忽略掉“程序段1”。
任务5-10-1 简易数码秒表设计
一、MCS-51单片机的中断系统
2.MCS-51的中断源 MCS-51单片机有5个中断源,它们是两个外中断INT0(P3.2)和INT1(P3.3)、 两个片内定时/计数器溢出中断TF0和TF1,一个片内串行口中断TI或RI,这几个中断源 由TCON和SCON两个特殊功能寄存器进行控制。TCON寄存器的结构如下表所示:
任务5-10-1 简易数码秒表设计
二、硬件电路设计
三、软件程序设计
任务5-10-2 使用定时器T0的中断控制数码管倒计数显示
一、MCS-51单片机寄存器组的切换
当单片机正在执行一个特定的任务时,可能有更紧急的事情需要 CPU来处理。在一个具有优先级的系统中,CPU不是等待第一个任务完 成,而是假定前一个任务已完成,立即处理新任务。但是若程序流程立 即转向新任务,则新任务使用的各寄存器破坏了第一个任务使用的中间 信息。当新任务完成后返回来重新执行第一个任务时,寄存器的值可引 起错误发生。解决的办法是,在每次发生任务变化时,执行一些必要的 现场保护指令,这就叫做上下文切换。 8051是一种基于累加器的单片机,具有8个通用寄存器(R0~R7)。 每个寄存器都是一个单字节的寄存器。这8个通用寄存器可以认为是一组 寄存器或者一个寄存器组。8051提供了4个可用的寄存器组。当使用中断 时,多组寄存器将带来许多方便。典型的8051C程序不需要选择或切换 寄存器组,默认使用寄存器组0。寄存器组1、2或3最好在中断服务程序 中使用,以避免用堆栈保存和恢复寄存器。
#define PI 3.1415926
任务5-10-3 使用计数器语言的编译预处理
(2)带参数的宏定义
带参数的宏定义不是进行简单的字符口串替换,还要进行参数替换,其一般形式:
#define 宏名(参数表)字符串 字符串中包含在括弧中所指定的参数。 2.文件包含
(2)中断优先级控制寄存器IP MCS-51单片机对中断优先级的控制是由中断优先级控制寄存器IP来实现的,IP的 结构格式如下表所示:
D7 IP 位地址 PS BCH PT1 BBH Px1 BAH PT0 B9H PX0 B8H D6 D5 D4 D3 D2 D1 D0
IP寄存器的各控制位功能说明如下: ①PX0:外中断 INT0优先级控制位 ②PT0:定时/计数器T0优先级控制位 ③PX1:外中断 INT1 优先级控制位 ④PT1:定时/计数器T1优先级控制位 ⑤PS:串行口中断口优先级控制位
4
串行口中断RI或TI
0023H
任务5-10-1 简易数码秒表设计
一、MCS-51单片机的中断系统
4.中断的响应 MCS-51CPU在每一个机器周期顺序检查每一个中断源,在机器周期的S6 按优先级处理所有被激活的中断请求,此时,如果CPU没有正在处理更高或相 同优先级的中断,或者现在的机器周期不是所执行指令的最后一个机器周期, 或者CPU不是正在执行RETI指令或访问IE和IP的指令(因为按MCS-51中断系 统的特性规定,在执行完这些指令之后,还要在继续执行一条指令,才会响应 中断),CPU在下一个机器周期响应激活了的最高级中断请求。 中断响应的主要内容就是由硬件自动生成一条长调用LCALL addr16指令, 这里的addr16就是程序存储器中相应的中断区入口地址。 生成LCALL指令后,CPU紧跟着便执行之。首先将PC(程序计数器)的内 容压入堆栈保护断点,然后把中断入口地址赋予PC,CPU便按新的PC地址 (即中断服务程序入口地址)执行程序。 各中断区只有8个单元,一般情况下(除非中断程序非常简单),都不可 能安装下一个完整的中断服务程序。因此,通常是在这些入口地址区放置一条 无条件转移指令,使程序按转移的实际地址去执行真正的中断服务程序。
任务5-10-3 使用计数器T1的中断控制数码管显示按键计数
一、C语言的编译预处理
(1)#ifdef 标志符 程序段1 #else 程序段2 #end if
如果指定的标志符已被定义,则“程序段1”参加编译,并产生有效代 码,而忽略掉“程序段2”。否则,“程序段2”参加编译并产生有效代码, 而忽略掉“程序段1”。
任务5-10-1 简易数码秒表设计
一、MCS-51单片机的中断系统
MCS-51单片机的5个中断源由其硬件结构决定的自然优先级 别排列顺序与服务程序入口地址:
中断编号 0
1 2 3
中断源 外中断 INT0
定时/计数器T0 外中断INT1 定时/计数器T1
自然优先顺序
入口地址 0003H
高 低
000BH 0013H 001BH
IE寄存器的各控制位功能说明如下: ①EA:中断总控制位 ②EX0:外中断INT0的中断控制位 ③ET0:定时/计数器T0的中断控制位 ④EX1:外中断INT1的中断控制位 ⑤ET1:定时/计数器T1的中断控制位 ⑥ES:串行口中断控制位
任务5-10-1 简易数码秒表设计
一、MCS-51单片机的中断系统
任务5-10-2 使用定时器T0的中断控制数码管倒计数显示
二、硬件电路设计
三、软件程序设计
任务5-10-3 使用计数器T1的中断控制数码管显示按键计数
一、C语言的编译预处理
编译预处理是C语言编译器的一个组成部分。在C语言中,通过一些预处理 命令,可以在很大程度上为C语言本身提供许多功能和符号上的扩充,增强C语言 的灵活性和方便性。预处理命令可以在编写程序时加在需要的地方,但它只在程序 编译时起作用,并且通常是按行进行处理的,因此又称为编译控制行。编译器在对 整个程序进行编译之前,先对程序中的编译控制进行预处理,然后再将预处理的结 果与整个C语言源程序一起进行编译,以产生目标代码。常用的预处理命令有宏定 义、文件包含和条件命令。为了与一般的C语言语句区别,预处理命令由“#”开头。 1.宏定义 C语言允许用一个标志符来表示一个字符,称为宏。被定义为宏的标志符为 宏名。在编译预处理时,程序中的所有宏名都用宏定义中的字符串代替,这个过 程称为宏代换。宏定义分为不带参数的宏定义和带参数的宏定义。 (1)不带参数的宏定义的一般形式如下: #define 标志符字符串 示例如下:
任务5-10-1 简易数码秒表设计
一、MCS-51单片机的中断系统
3.中断的控制 有四个特殊功能寄存器可以用来进行中断的控制,它们是TCON、SCON、IE和IP。 (1)中断允许控制寄存器IE:MCS-51单片机对中断的开放和屏蔽是由中断允许寄存 器IE控制来实现的,IE的结构格式如下表所示:
D7 IE EA 位地址 AFH ES ACH ET1 ABH EX1 AAH ET0 A9H EX0 A8H D6 D5 D4 D3 D2 D1 D0
任务5-10-3 使用计数器T1的中断控制数码管显示按键计数
二、硬件电路设计
三、软件程序设计
项目11
音乐播放控制
任务5-11 使用定时器T0的中断实现歌曲的播放
任务5-11 使用定时器T0的中断实现歌曲的播放
一、单片机的音乐播放控制
1.音调与频率的对应关系