




已阅读5页,还剩130页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MCS 51单片机的功能部件 第五章 单片机的中断系统单片机的可编程定时 计数器单片机的可编程串行通信接口 掌握单片机中断系统结构 中断响应过程 能编写中断初始化程序和中断服务程序掌握单片机定时 计数器工作原理及结构 能编写定时 计数器初始化程序掌握单片机串行口结构 工作方式 能编写串行口初始化程序及串行通信程序 5 1 1中断的概念 计算机在执行程序的过程中 由于CPU以外的原因 CPU中止当前程序的执行 转去执行相应的处理程序 待处理结束后 再回来继续执行被中止的原程序 这种情况称为中断 5 1中断系统 引进中断技术的优点可实现分时操作CPU可以分时为不同的外设服务 不同的外设都可同时工作 大大提高CPU的利用率 可实现实时处理实时控制中 外界的多种被控物理量是不断变化的 它们可随时向CPU发出中断请求 CPU可以及时对其进行处理 故障处理故障一旦发生 可以向CPU发中断请求 CPU可以对这些无法预料的故障自行进行处理 中断系统的功能 计算机系统中 用于实现中断功能的硬件和软件的集合 称为中断系统 中断系统应解决如下问题 中断请求信号的产生 CPU如何响应 中断优先权问题 中断的具体服务 中断服务完毕 如何返回原程序 5 1 2MCS 51单片机的中断系统 8031 8051 8751有5个中断源 2个中断优先级 与中断有关的特殊功能寄存器 中断允许控制寄存器IE 中断优先级控制寄存器IP 定时器 计数器控制寄存器TCON 图5 1MCS 51单片机中断系统结构 1 IE0 1 0 1 1 IE1 1 0 1 1 RI TI 高级中断请求 低级中断请求 中断入口 中断入口 中断源允许 全局中断允许 中断优先级寄存器 中断允许寄存器 TI RI 外部中断0 INT0 由 INT0 P3 2 端口线引入 有两种触发方式 由TCON的IT0位确定 IT0 0 为电平触发 INT0脚出现低电平时向CPU申请中断 IT0 1 为跳变触发 INT0脚出现负跳变使IE0置1 向CPU申请中断 CPU响应中断后硬件自动将IE0清零 5 1 3中断源 外部中断1 INT1 由 INT1 P3 3 端口线引入 有两种触发方式 由TCON的IT1位确定 IT1 0 为电平触发 INT1脚出现低电平时向CPU申请中断 IT1 1 为跳变触发 INT1脚出现负跳变使IE1置1 向CPU申请中断 CPU响应中断后硬件自动将IE1清零 定时 计数器0中断 定时 计数器1中断 定时 计数器0计数溢出 回零 时 硬件置TF0 1 申请中断 CPU响应中断后 硬件自动将TF0清零 定时 计数器1计数溢出 回零 时 硬件置TF1 1 申请中断 CPU响应中断后 硬件自动将TF1清零 串行口发送完1帧信息后 硬件置TI 1 向CPU申请中断 串行口接收到1帧信息后 硬件置RI 1 向CPU申请中断 中断结构图 注意 CPU响应中断后 不会自动清除TI或RI 串行口中断 讨论 MCS 51单片机各中断源什么情况下向CPU申请中断 中断优先寄存器IP B8H 51单片机有两个中断优先级 每个中断源可以通过编程确定为高优先级或低优先级 IP用来锁存各中断源优先级的控制位 IP在特殊功能寄存器中 字节地址为B8H 位地址分别是B8H BFH To 中断结构图 5 1 4中断优先级 中断优先寄存器IP 各中断源的优先权级别由IP确定 同一个优先级中的中断源 如同时申请中断 其自然优先级由硬件形成 各中断源的级别由高到低的顺序是 外中断0 T0 外中断1 T1 串行口 问题 各中断源优先级顺序是怎样确定的 解答 8051复位后 IP低5位全部清0 将所有中断源设置为低优先级中断 中断优先权三原则 1 正在进行的中断不能被新的同级或低优先级的中断请求中断 正在进行的低优先级中断服务程序能被高优先级的中断请求中断 中断嵌套 CPU同时收到几个中断请求时 首先响应优先权最高的请求中断 5 1 5中断屏蔽和中断响应的条件 过程 1 中断允许寄存器IE A8H CPU通过IE控制中断源总的开放或禁止 以及每个中断源是否允许中断 IE在特殊功能寄存器中 字节地址A8H 位地址分别是A8H AFH To 中断结构图 To 中断结构图 2 中断响应的条件 1 中断源有请求2 单片机开放中断 EA 1 3 中断源对应的中断屏蔽寄存器IE相应位置1 即没有被屏蔽 注意 8051复位后 IE中各中断源允许位均清0 即禁止所有中断 下列任何一种情况存在 中断申请将被封锁 1 CPU正在执行一个同级或高一级的中断服务程序 2 当前正在执行的那条指令还未执行完 3 当前正在执行的指令是RETI或对IE IP寄存器进行读 写指令 执行这些指令后至少再执行一条指令才会响应中断 3 中断响应过程 单片机在每个机器周期的S5P2期间 顺序采样每个中断源 如查询到某个或某几个中断标志为1 将在下一个机器周期S1期间按优先级进行中断处理 CPU响应中断后 由硬件执行以下功能 自动清除相应中断标志 IE0 IE1 TF0 TF1 保留断点 将PC内容压入堆栈 根据中断源优先级的高低 使相应优先级状态触发器置1 将对应的中断矢量装入PC 使程序转向中断矢量地址单元中去执行相应的中断服务程序 执行RETI指令 1 清相应中断优先级状态触发器 2 返回断点 弹出栈顶的两个字节到PC 中断服务程序的最后一条指令为什么不能是RET指令 中断服务程序的最后一条指令必须为RETI 思考 To 中断结构图 51单片机中与中断有关的SFR有哪些 其作用是什么 问题 解答 1 锁存各中断源的标志位 2 控制外中断触发方式 3 中断允许控制 4 优先权控制 作用 5 1 6中断请求的撤除 CPU响应中断后 在中断返回 执行RETI 前 必须清除中断标志 否则会错误地再次引起中断 5 1 7中断系统应用 中断系统应用要解决的问题包括电路连接和应用程序设计两部分 程序设计1 主程序部分给堆栈指针SP赋值如为外部中断 定义触发方式定义中断优先级 给IP赋值 给IE赋值 开放中断安排好等待中断过程中主程序应做的操作 2 中断服务程序在中断入口地址单元设置跳转指令 使程序转移到中断服务程序的实际入口保护现场 若为电平触发的外部中断 应有中断信号撤除操作中断服务操作恢复现场中断返回 若规定外部中断0为电平触发方式 高优先级 试写出有关的初始化程序 解 SETBEA 开中断SETBEX0 允许外中断0中断SETBPX0 外中断0定为高优先级SETBIT0 电平触发 例5 1 若规定外部中断1为边沿触发方式 低优先级 在中断服务程序中将寄存器B的内容左环移一位 B的初值设为01H 试编写主程序与中断服务程序 例5 2 ORG0000H 主程序LJMPMAIN 主程序转至MAIN处ORG0013H 中断服务程序LJMPINT 中断服务程序转至INT处MAIN SETBEA 开中断SETBEX1 允许外中断1中断CLRPX1 设为低优先级SETBIT1 边沿触发MOVB 01H 设B的初值HALT SJMPHALT 暂停等待中断INT MOVA B A BRLA 左环移一位MOVB A 回送RETI 中断返回 参考程序 设在某8031单片机应用系统中 允许外部中断源和产生中断 并要求为高优先级中断 为低优先级中断 请写出该应用程序的基本结构 分析 需将设置为高优先级中断 而将设置为低优先级中断 即IP寄存器中的PX1 1 PX0 0为了实现中断嵌套 中断服务程序中应注意保护有关寄存器 例5 3 ORG0000HAJMPMAIN 转主程序ORG0003HLJMPEXINT0 转INT0中断服务程序ORG0013HLJMPEXINT1 转INT1中断服务程序MAIN MOVSP 60H 设置堆栈指针MOVTCON 05H 置INT0 INT1为边沿触发方式SETBPX1 设置INT1为高优先级 INT0上电复位时被置为低优先级SETBEX0 允许INT0中断SETBEX1 允许INT1中断SETBEA CPU开放中断 主程序 参考程序 结构 EXINT0 PUSHPSW 保护现场PUSHAccPUSHDPLPUSHDPH INT0中断处理POPDPH 恢复现场POPDPLPOPAccPOPPSWRETI INT0中断服务程序 EXINT1 PUSHPSW 保护现场PUSHAccPUSHDPLPUSHDPH INT1中断处理POPDPH 恢复现场POPDPLPOPAccPOPPSWRETI INT1中断服务程序 例 某工业监控系统 具有温度 压力 Ph值 等多路监控功能 对于Ph值 在Ph 7时将向CPU申请中断 CPU响应中断后令P3 0引脚输出高电平 经驱动 加碱管道电磁阀接通1S 以调整Ph值 温度1越限 温度2越限 pH越限 P3 0 电磁阀 ORG0000HAJMPMAINORG0003HAJMPINT0ORG0030H INT0中断服务程序入口INT0 JBP1 0 INT00 地址表JBP1 1 INT01JBP1 2 INT02 若是ph 7中断 转INT02JBP1 3 INT03 相应程序 ORG0080HINT02 PUSHPSWPUSHASETBPSW 3 以上3条为保护现场SETBP3 0 接通加碱管道电磁阀ACALLDELAY 延时1sCLRP3 0 关加碱管道电磁阀ANLP1 BFH 将P1 6清零ORLP1 40H 将P1 6置1 以上2条使P1 6输出负 脉冲 撤除Ph 7的中断请求POPAPOPPSW 以上2条为恢复现场RETI 5 2定时 计数器 概述单片机内有两个可编程定时 计数器T C0和T C1T C0和T C1均可编程为定时器或计数器使用T C0有4种工作方式 T C1有3种工作方式 定时 计数器的作用 用作实时时钟实现定时检测定时控制用于外部事件的计数 定时 计数器的应用 检测 控制及智能仪器等 5 2 1定时 计数器的结构及工作原理 结构如下图所示 它由加法计数器 TMOD寄存器 TCON寄存器组成 加法计数器 加法计数器为16位 用TH表示高8位 TL表示低8位 作计数器用 加法计数器对芯片T0 T1脚上输入脉冲计数 每输入一个脉冲 加法计数器加1 作定时器用 加法计数器通过机器周期Tcy计数 间接实现定时 每经过一个Tcy 加法计数器自动加1 加法计数器初值可由程序设定 初值不同 计数或定时值不同 加法计数器工作过程中 内容可用程序读回CPU 方式选择寄存器TMOD 功能 选择定时 计数器0 1的工作方式 5 2 2定时 计数器的方式和控制寄存器 格式 定时 计数器1 定时 计数器0 C T功能选择位 C T 1计数 C T 0定时 M1 M0工作方式选择位 见下表 GATE门控制位 GATE0 1 1定时 计数器0 1的工作分别受引脚 INT0 INT1的控制 GATE0 1 0定时 计数器的工作与 INT0 INT1无关 一般情况下让GATE 0 控制寄存器TCON 功能 高4位控制定时 计数器0 1的运行低4位控制外部中断 格式 TR1运行控制位 TR1 1 启动定时 计数器1工作TR1 0 停止定时 计数器1工作 TF1溢出中断标志位 定时 计数器1溢出时 TF1 1 在中断允许条件下 向CPU发出中断请求 CPU响应后 TF1 0 在中断屏蔽条件下 TF1可作查询方式 TF1可由程序置位或清零 TR0与TR1功能相似 TF0与TF1功能相似 5 2 3定时 计数器的工作方式 1 方式0 定时 计数器1工作方式0结构图如下图所示 定时 计数器0工作方式0结构图一样 1 构成13位定时 计数器 2 计数值N 8192 X X为初值 计数范围为1 8192 3 计数器方式时 外部计数脉冲频率应小于fosc 24 4 定时时间T 8192 X Tcy 5 定时 计数器1的启动或停止由TR1控制 GATE 0 GATE 1 软件置TR1 1 S2闭合 启动计数 软件置TR1 0 S2打开 停止计数 软件置TR1 1 外部INT1为高电平 启动计数 外部INT1为低电平 停止计数 2 方式1 工作方式1与工作方式0区别如下 其他一样 构成16位定时 计数器计数值为N 65536 X 范围为1 65536定时值为T 65536 X Tcy 范围为 1 65536 Tcy 3 方式2 定时 计数器1工作方式2结构图如下图所示 定时 计数器0工作方式2结构图一样 1 构成一个8位具有自动重装初值功能的定时 计数器 2 计数值N 256 X 范围为 1 256 3 定时值为T 256 X Tcy 范围为 1 256 Tcy 4 TL1为8位加法计数器 TH1为初值寄存器 TL1溢出时 TF1 1且发出重装载信号 三态门打开 将TH1中初值自动送入TL1中 TL1重新计数 5 其他与工作方式0相同 6 适应于定时控制 波特率发生器 3 方式3 工作方式3结构图如下图所示 仅对定时 计数器0有效 1 构成两个独立的8位定时 计数器 2 计数值为N 256 X 范围为 1 256 3 定时值为T 256 X Tcy 范围为 1 256 Tcy 4 TH0 TL0为两个独立加法计数器 TL0使用定时 计数器0的C T GATE TR0及INT0 工作情况与方式0相似 TH0只能工作于非控方式 借用了定时 计数器1的TR1 TF1 5 若将定时 计数器1设为工作方式3 相当于TR1 0 将停止工作 6 定时 计数器0工作方式3时 51子系列有3个定时 计数器 两个为8位 一个为16位 定时 计数器1可工作于方式0 1 2 但TR1 TF1被TH0借用 不能产生中断请求 只用作波特率发生器 5 2 4定时 计数器应用 1 定时器 计数器的初始化编程 初始化编程步骤 计数方式设计数器的最大值为M 若要求计数X个外部脉冲后计数器溢出 计数初值为C 则 X C MC M X M X X 求补 T0运行于计数器状态并工作于方式1 要求T0引脚出现10个脉冲后 产生计数器溢出中断 求C 方法一 C M X 65536 10 65526 FFF6H方法二 C X 求补 000AH 求补 000AH 求反 1 FFF5H 1 FFF6H 例 定时方式设定时t 则计数脉冲数为X t Tcy初值C M X M t T t T 求补 T0运行于定时器状态 时钟频率为12MHz 要求定时100 s 机器周期T 12 时钟频率 12 12 1 s初值C为 方式0 C M t T 8192 100 1 8092 1F9CH方式1 C M t T 65536100 1 65436 FF9CH方式2 3 C M t T 256 100 1 156 9CH 例 工作方式0时的初值装入方法方式0的计数寄存器是13位 对于T0而言 高8位初值装入TH0 低5位初值装入TL0的低5位 TL0的高3位无效 注意 将初值1F9CH装入到TH0 TL0 1F9CH TH0TL0TH0 11111100B FCHTL0 11100B 1CH 例 2 应用举例 假设单片机的时钟频率为6MHz 要求在P1 0引脚上输出一个周期为2ms的方波 方波的周期用定时器T0来确定 分析 要在P1 0输出周期为2ms的方波 只要对P1 0每隔1ms取反一次即可 例5 4 确定TMOD内容 根据题意 定时功能 C T 0 选用工作方式0 定时 计数器1无关 TMOD高4位为随意值 X 若取 X 0 则TMOD 00H 机器周期Tcy 12 6MHz 2 s定时初值CC M t Tcy 213 1000 2 8192 500 7692 1E0CH 0001111000001100BTH0 11110000B 0F0HTL0 01100B 0CH 确定TH0 TL0 初始化编程 用查询TF0的状态来控制P1 0输出 MOVTMOD 00H 置T0为方式0 定时MOVTL0 0CH 送定时初值MOVTH0 0F0HSETBTR0 启动T0LOOP JBCTF0 NEXT 查询定时时间到 SJMPLOOPNEXT MOVTL0 0CH 重装计数初值MOVTH0 0F0HCPLP1 0 输出取反SJMPLOOP 例5 5用定时溢出中断方式产生上例所要求的方波 参考程序ORG0000HAJMPMAIN 转主程序ORG000BHLJMPCTC0 转中断处理程序ORG0100HMAIN MOVSP 60HMOVTMOD 00H 置T0为方式0 定时工作MOVTL0 0CH 送定时初值MOVTH0 0F0HSETBEA CPU开中断SETBET0 T0中断允许SETBTR0 启动定时器T0HERE SIMPHERE 等待中断 虚拟主程序 中断处理程序CTC0 MOVTL0 0CH 重装计数初值MOVTH0 0F0HCPLP1 0 输出取反RET1 中断返回 注意 中断服务程序中要对定时器重置定时初值 CPU响应中断后硬件自动将TF0清0 中断服务程序中不必用指令将TF0清0 仍要求用定时器控制方波输出 但要求方波的周期2s 设单片机时钟频率为12MHz 分析 周期为2s的方波要求定时值为1s 超过定时器可能提供的最大定时65 536ms 时钟频率为12MHz 采用方式1 例5 6 可采用将定时器定时和软件计数结合起来的方法来延长定时时间 设定时器的定时值为20ms 另设一个软件计数器 计数50 定时器T0初始化 定时 方式1 TMOD 01HTcy 1 s t 20ms 20000 s 计数初值C 216 20000 1 0B1E0HTH0 0B1H TL0 0E0H 参考程序ORG0000HAJMPMAIN 转主程序ORG000BHAJMPCTC0 转中断处理程序ORG0100HMAIN MOVR0 50 软件计算器R0置初值MOVTMOD 01H 置T0为方式1定时器MOVTL0 0E0H 送T0定时初值MOVTH0 0B1HMOVIE 82H T0开中断SETBTR0 启动定时器T0HERE SIMPHERE 等待中断 中断服务程序 CTC0 DJNZR0 NEXT R0不为0 返回CPLP1 0 R0 0 定时1s到 P1 0取反输出方波MOVR0 50 重装软件计数器初值NEXT MOVTL0 0E0H 送定时初值MOVTH0 0B1HRETI 5 3串行接口 5 3 1串行通信的基本知识 串行通信方式 异步传送方式 同步传送方式 数据传送的方向 1个全双工串行口 可同时发送和接收数据有4种工作方式波特率由软件设置 通过片内定时 计数器产生接收 发送均可工作在查询方式或中断方式 5 3 2MCS 51单片机的串行接口 图5 15MCS 51串行口结构 串行口数据缓冲器SBUF 1 串行接口的特殊功能寄存器 当串行口接收到1帧信息后 将数据存入接受数据缓冲器中 这时 CPU通过执行读SBUF指令 如MOVA SBUF 就可获得串行口接收到的数据 串行口数据缓冲器SBUF 串行口控制寄存器SCON 电源控制寄存器PCON 2 串行接口的工作方式 有4种工作方式 由SCON中的SM0 SM1确定 方式0 串行寄存器方式 数据从RXD引脚发送或接收 同步移位脉冲从TXD引脚输出 一帧数据由8位数据组成 低位在前 高位在后 无起始位和停止位 波特率固定 为fosc 12 主要用于扩展并行I O口 CPU响应TI或RI中断请求时 不会清除TI或RI标志 必须由用户用软件清0 发送 方式0发送时序 TI 接收 方式0接收时序 方式1 8位异步通信接口方式 发送 方式1发送时序 接收 方式1接收时序 方式2及方式3 9位异步通信接口 发送 方式2 3发送时序 接收 方式2 3的接收时序 方式0 固定为方式2 SMOD 0时为SMOD 1时为方式1和方式3 3 波特率的设置 定时器T1的溢出率 fosc 12 2n C C为定时器T1的计数初值n为定时器T1的位数 串行通信时 常采用定时器方式2 8位重装载方式 这时 对于给定波特率 计数初值为 常用的波特率及计算器初值 5 3 3串行通信应用实例 串行口按全双工方式收发ASCII码字符 最高1位用来作奇偶校验位 采用奇校验方式 要求传送的波特率为1200波特 假设发送缓冲区首址为20H 接收缓冲区首址为40H 时钟频率fosc 6MHZ 试编写有关的通信程序 例5 7 分析 7位ASCII码加1位奇校验共8位数据 采用串行口工作方式1 奇偶校验位P值取反后放入ASCII码的最高位 即是要求的奇校验 CPU只需把数据从接收缓冲器读出和把数据写入发送缓冲器 数据传送用中断方式进行 响应中断以后 通过检测是TI置位还是RI置位来决定CPU是进行发送操作还是接收操作 定时器T1采用工作方式2 避免重装定时初值 取SMOD 0 T1的初值C TH1 TL1 F3HTMOD 00100000B 20H 定时器初始化 SM0 SM1 01 方式1 SM2 0 REN 1 允许接收数据 其余各位均取0则SCON 01010000B 50HSMOD 0 则PCON 00H 串行口初始化 主程序MOVTMOD 20H 定时器T1设为方式2MOVTL1 0F3H 装入定时器初值MOVTH1 0F3H 8位重装值SETBTR1 启动定时器T1MOVSCON 50H 串行口设为方式1MOVR0 20H 发送缓冲区首址MOVR1 40H 接收缓冲区首址SETBEA 开中断SETBES 允许串行口中断LCALLSOUT 先输出1个字符HALT SJMPHALT 等待中断 中断服务程序ORG0023H 串行中断入口LJMPSBR1 转至中断服务程序SBR1 JNBRI SEND 不是接收则转LCALLSIN 是接收 则调用接收子程序SJMPNEXT 转至统一出口SEND LCALLSOUT 是发送 调用发送子程序NEXT RETI 中断返回 发送子程序SOUT MOVA R0 取发送数据到AMOVC P 奇偶校验位赋于CCPLC 奇校验MOVA 7 C 送入ASCII码最高位中INCR0 修改发送数据指针MOVSBUF A 发送数据CLRTI 清发送中断标志RET 返主程序 接收子程序SIN MOVA SUBF 读入接收缓冲区内容MOVC P 取出奇偶校验位JNCERROR 奇校验错 转出错处理ANLA 7FH 删去奇偶校验位MOV R1 A 存入接收缓冲区INCR1 修改接收缓冲区指针CLRRI 清接收中断标志RET 返主程序 图5 16全双工串行通信连接图 设有如图甲 乙两台单片机 以工作方式2 全双工串行通信 每帧为11位 可程控的第9位数据位用于奇偶校验的补偶位 编出能实现如下功能的程序 例5 8 甲机 每发送1帧信息 乙机对接收的数据进行奇偶校验 若正确 则向甲机发出 数据发送正确 的信息 00H 甲机接收到该回答信号后再发送下1字节 若奇偶校验错 则乙机发出 数据发送不正确 的信息 AAH 给甲机 要求甲机再次发送原数据 直至发送正确 甲机发送128个字节后就停止发送 乙机 接收甲机发送来的数据并进行奇偶校验 与此同时发出相应的回答信息 即00H或AAH 直到接收完128个字节为止 甲机主程序ORG0000HLJMPMAINT 转至主程序入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论