第5章中断与定时.ppt_第1页
第5章中断与定时.ppt_第2页
第5章中断与定时.ppt_第3页
第5章中断与定时.ppt_第4页
第5章中断与定时.ppt_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章单片机的中断 定时系统 主要介绍 5 180C51的中断系统 5 280C51的中断处理过程 5 380C51的定时 计数器 与上对比 单片机中也有同样的问题 CPU正在执行原程序 突然 被意外事情打断 转去执行新程序 CPU执行新程序结束后 又回到原程序中继续执行 这样的过程就叫 什么叫中断 举例 某同学正在教室写作业 忽然被人叫出去 回来后 继续写作业 这就是生活中中断的例子 5 180C51的中断系统 5 1 180C51的中断系统结构 一 中断的概念CPU在处理某一事件A时 发生了另一事件B请求CPU迅速去处理 中断发生 CPU暂时中断当前的工作 转去处理事件B 中断响应和中断服务 待CPU将事件B处理完毕后 再回到原来事件A被中断的地方继续处理事件A 中断返回 这一过程称为中断 引起CPU中断的根源 称为中断源 中断源向CPU提出的中断请求 CPU暂时中断原来的事务A 转去处理事件B 对事件B处理完毕后 再回到原来被中断的地方 即断点 称为中断返回 实现上述中断功能的部件称为中断系统 中断机构 随着计算机技术的应用 人们发现中断技术不仅解决了快速主机与慢速I O设备的数据传送问题 而且还具有如下优点 分时操作 CPU可以分时为多个I O设备服务 提高了计算机的利用率 实时响应 CPU能够及时处理应用系统的随机事件 系统的实时性大大增强 可靠性高 CPU具有处理设备故障及掉电等突发性事件能力 从而使系统可靠性提高 二 80C51中断系统的结构80C51单片机的中断源共有5个 其中2个为外部中断源 2个定时中断源和1个串行中断源 1 2个外部中断源外部中断是由外部事件引起的中断 分别由引脚P3 2和P3 3引入外部中断请求 有两种信号方式 可通过设置控制位ITX X 0 1 进行定义 2 2个定时中断源定时中断是为单片机的计数 定时器设置的中断 当定时器Tx对单片机内部定时脉冲或对外部计数脉冲进行计数发生溢出时 置位TFx 并向CPU申请中断 3 1个串行中断串行中断是为串行数据传送的需要而设置的中断 当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI 向CPU申请中断 二 80C51中断系统的结构80C51的中断系统有5个中断源 2个优先级 可实现二级中断嵌套 二 中断请求标志1 TCON的中断标志 IT0 TCON 0 外部中断0触发方式控制位 当IT0 0时 为电平触发方式 当IT0 1时 为边沿触发方式 下降沿有效 IE0 TCON 1 外部中断0中断请求标志位 IT1 TCON 2 外部中断1触发方式控制位 IE1 TCON 3 外部中断1中断请求标志位 TF0 TCON 5 定时 计数器T0溢出中断请求标志位 TF1 TCON 7 定时 计数器T1溢出中断请求标志位 利用中断请求标志位来通知CPU中断请求 2 SCON的中断标志 RI SCON 0 串行口接收中断标志位 当允许串行口接收数据时 每接收完一个串行帧 由硬件置位RI 但是 RI必须由软件清除 TI SCON 1 串行口发送中断标志位 当CPU将一个发送数据写入串行口发送缓冲器时 就启动了发送过程 每发送完一个串行帧 由硬件置位TI CPU响应中断时 不能自动清除TI TI必须由软件清除 一 中断允许控制CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的 5 1 380C51中断的控制 EX0 IE 0 外部中断0允许位 ET0 IE 1 定时 计数器T0中断允许位 EX1 IE 2 外部中断1允许位 ET1 IE 3 定时 计数器T1中断允许位 ES IE 4 串行口中断允许位 EA IE 7 CPU中断允许 总允许 位 若为 1 开关接通 允许例如SETBEA若为 0 开关断开 不允许例如CLRIE 7 为什么要有中断优先级 二 中断优先级控制80C51单片机有两个中断优先级 即可实现二级中断服务嵌套 每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 PX0 IP 0 外部中断0优先级设定位 PT0 IP 1 定时 计数器T0优先级设定位 PX1 IP 2 外部中断1优先级设定位 PT1 IP 3 定时 计数器T1优先级设定位 PS IP 4 串行口优先级设定位 该位是 1 时 为高级优先级该位是 0 时 为低级优先级 同一优先级中的中断申请不止一个时 则有中断优先权排队问题 同一优先级的中断优先权排队 由中断系统硬件确定的自然优先级形成 其排列如所示 80C51单片机的中断优先级有三条原则 CPU同时接收到几个中断时 首先响应优先级别最高的中断请求 正在进行的中断过程不能被新的同级或低优先级的中断请求所中断 正在进行的低优先级中断服务 能被高优先级中断请求所中断 为了实现上述后两条原则 中断系统内部设有两个用户不能寻址的优先级状态触发器 其中一个置1 表示正在响应高优先级的中断 它将阻断后来所有的中断请求 另一个置1 表示正在响应低优先级中断 它将阻断后来所有的低优先级中断请求 同一级中的5个中断源的优先顺序是 中断优先原则 概括为四句话 1 低级不打断高级2 高级不睬低级3 同级不能打断4 同级 同时中断 事先约定 事件1 事件2 子程序2 子程序1 中断嵌套的概念 主程序 中断 中断 5 280C51单片机中断处理过程 一 中断响应条件中断源有中断请求 此中断源的中断允许位为1 CPU开中断 即EA 1 同时满足时 CPU才有可能响应中断 5 2 1中断响应条件和时间 中断服务的进入 CPU执行程序过程中 在每个机器周期的S5P2期间 中断系统对各个中断源进行采样 这些采样值在下一个机器周期内按优先级和内部顺序被依次查询 如果某个中断标志在上一个机器周期的S5P2时被置成了1 那么它将于现在的查询周期中及时被发现 接着CPU便执行一条由中断系统提供的硬件LCALL指令 转向被称作中断向量的特定地址单元 入口地址 进入相应的中断服务程序 遇以下任一条件 硬件将受阻 不产生LCALL指令 CPU正在处理同级或高优先级中断 当前查询的机器周期不是所执行指令的最后一个机器周期 即在完成所执行指令前 不会响应中断 从而保证指令在执行过程中不被打断 正在执行的指令为RET RETI或任何访问IE或IP寄存器的指令 即只有在这些指令后面至少再执行一条指令时才能接受中断请求 若由于上述条件的阻碍中断未能得到响应 当条件消失时该中断标志却已不再有效 那么该中断将不被响应 就是说 中断标志曾经有效 但未获响应 查询过程在下个机器周期将重新进行 二 中断响应时间某中断的响应时序如图 若M1周期的S5P2前某中断生效 在S5P2期间其中断请求被锁存到相应的标志位中去 M2恰逢指令的最后一个机器周期 且该指令不是RETI或访问IE IP的指令 于是 M3和M4便可以执行硬件LCALL指令 M5周期将进入了中断服务程序 80C51的中断响应时间 从标志置1到进入相应的中断服务 至少要3个完整的机器周期 将相应的优先级状态触发器置1 以阻断后来的同级或低级的中断请求 执行一条硬件LCALL指令 即把程序计数器PC的内容压入堆栈保存 再将相应的中断服务程序的入口地址送入PC 执行中断服务程序 5 2 2中断响应过程 中断响应过程的前两步是由中断系统内部自动完成的 而中断服务程序则要由用户编写程序来完成 5 2 3中断返回 RETI指令的具体功能是 将中断响应时压入堆栈保存的断点地址从栈顶弹出送回PC CPU从原来中断的地方继续执行程序 将相应中断优先级状态触发器清0 通知中断系统 中断服务程序已执行完毕 注意 不能用RET指令代替RETI指令 在中断服务程序中PUSH指令与POP指令必须成对使用 否则不能正确返回断点 若外部中断定义为电平触发方式 中断标志位的状态随CPU在每个机器周期采样到的外部中断输入引脚的电平变化而变化 这样能提高CPU对外部中断请求的响应速度 但外部中断源若有请求 必须把有效的低电平保持到请求获得响应时为止 不然就会漏掉 而在中断服务程序结束之前 中断源又必须撤消其有效的低电平 否则中断返回之后将再次产生中断 电平触发方式适合于外部中断输入以低电平输入且中断服务程序能清除外部中断请求源的情况 例如 并行接口芯片8255的中断请求线在接受读或写操作后即被复位 因此 以其去请求电平触发方式的中断比较方便 若外部中断定义为边沿触发方式 在相继连续的两次采样中 一个周期采样到外部中断输入为高电平 下一个周期采样到为低电平 则在IE0或IE1中将锁存一个逻辑1 即便是CPU暂时不能响应 中断申请标志也不会丢失 直到CPU响应此中断时才清零 这样 为保证下降沿能被可靠地采样到 外中断引脚上的高低电平 负脉冲的宽度 均至少要保持一个机器周期 若晶振为12MHz时 为1微秒 边沿触发方式适合于以负脉冲形式输入的外部中断请求 如ADC0809的转换结束标志信号EOC为正脉冲 经反相后就可以作为80C51的中断输入 响应过程 假设已使某中断请求标志置1 1 先使相应优先级状态触发器置1 2 执行一个硬件子程序的调用 1 硬件清零相应中断请求标志 TI RI除外 2 将当前PC内容压入堆栈 保护断点 3 将中断服务子程序入口地址送PC 转移 返回过程 RETI执行后 1 使相应优先级状态触发器清0 2 从堆栈中弹出栈顶的两个字节内容送PC 恢复断点 3 CPU接着中断处继续执行原程序 1 中断初始化设置堆栈指针SP定义中断优先级定义外中断触发方式开放中断安排好等待中断或中断发生前主程序应完成的操作内容 5 2 4中断系统的应用 2 现场保护和现场恢复3 中断服务主程序在中断服务入口地址设置一条跳转指令转移到中断服务程序的实际入口处 根据需要保护现场中断源请求中断服务要求的操作 恢复现场 与保护现场相对应 注意先进后出 后进先出操作原则 中断返回 最后一条指令必须是RETI 中断系统示意图 例5 1出租车计价器计程方法是车轮每运转一圈产生2个负脉冲 从外中断 P3 2 引脚输入 行驶里程为轮胎周长 运转圈数 设轮胎周长为2m 试实时计算出租车行驶里程 单位米 数据由高字节到低字节依次存放于32H 31H 30H 分析 由32H 31H 30H三个字节存放计数结果 最大数值为224 1 16777215次 足以满足出租车计程的使用 程序在初始化时 应先将这些存放数据的内存单元清零 另外 由于题目并未明确说明负脉冲的宽度 并且硬件上也没有设计中断请求撤除电路 所以应该将外部中断的触发方式设置为下降沿脉冲触发方式 里程数决定了乘客的付费 必须准确 所以应将中断优先级设为最高 中断服务程序主要任务是完成对32H 31H 30H三字节的加1计数任务 主程序应完成中断初始化任务 如设置堆栈 设定中断优先级 开中断 对内存单元清零等 经过以上分析 读者可以划出程序设计的流程图 汇编语言程序如下 ORG0000H 复位地址LJMPSTART 转初始化ORG0003H 中断入口地址LJMPEINT0 转中断服务程序ORG0030H 定义主程序首地址START MOVSP 60H 置堆栈指针SETBIT0 置边沿触发方式MOVIP 01H 置高优先级MOV30H 0 里程计数器清0MOV31H 0 MOV32H 0 MOVIE 81H 开中断LJMP 等待中断 ORG0200H 中断服务子程序首地址EINT0 PUSHAcc 保护现场PUSHPSW MOVA 30H 读低8位计数器ADDA 1 低8位计数器加1mMOV30H A 低8位保存在30H单元CLRA ADDCA 31H 中8位计数器加进位MOV31H A 中8位计数保存在31H单元CLRA ADDCA 32H 高8位计数器加进位MOV32H A 高8位计数保存在32H单元POPPSW 恢复现场POPAcc RETI 中断返回END 例5 2如图5 7所示按键电路对应于教学实验板上的脉冲产生电路 每按一次按键会在单片机引脚产生一个脉冲 使用C51编写程序对按键次数进行计数 脉冲产生电路 5 380C51的定时 计数器 实现定时功能 比较方便的办法是利用单片机内部的定时 计数器 也可以采用下面三种方法 软件定时 软件定时不占用硬件资源 但占用了CPU时间 降低了CPU的利用率 采用时基电路定时 例如采用555电路 外接必要的元器件 电阻和电容 即可构成硬件定时电路 但在硬件连接好以后 定时值与定时范围不能由软件进行控制和修改 即不可编程 采用扩展的可编程芯片定时 这种定时芯片的定时值及定时范围很容易用软件来确定和修改 此种芯片定时功能强 使用灵活 在单片机的定时 计数器不够用时 可以考虑进行扩展 5 3 1定时 计数器的结构和工作原理 一 定时 计数器的结构定时 计数器的实质是加1计数器 16位 由高8位和低8位两个寄存器组成 TMOD是定时 计数器的工作方式寄存器 确定工作方式和功能 TCON是控制寄存器 控制T0 T1的启动和停止及设置溢出标志 51子系列单片机内有两个十六位增一定时 计数器 TH0 计数值高八位 TL0 计数值低八位 TH1 计数值高八位 TL1 计数值低八位 TMOD TCON 工作方式 定时 计数控制 二 定时 计数器的工作原理 加1计数器输入的计数脉冲有两个来源 一个是由系统的时钟振荡器输出脉冲经12分频后送来 一个是T0或T1引脚输入的外部脉冲源 每来一个脉冲计数器加1 当加到计数器为全1时 再输入一个脉冲就使计数器回零 且计数器的溢出使TCON中TF0或TF1置1 向CPU发出中断请求 定时 计数器中断允许时 如果定时 计数器工作于定时模式 则表示定时时间已到 如果工作于计数模式 则表示计数值已满 可见 由溢出时计数器的值减去计数初值才是加1计数器的计数值 设置为定时器模式时 加1计数器是对内部机器周期计数 1个机器周期等于12个振荡周期 即计数频率为晶振频率的1 12 计数值N乘以机器周期Tcy就是定时时间t 设置为计数器模式时 外部事件计数脉冲由T0或T1引脚输入到计数器 在每个机器周期的S5P2期间采样T0 T1引脚电平 当某周期采样到一高电平输入 而下一周期又采样到一低电平时 则计数器加1 更新的计数值在下一个机器周期的S3P1期间装入计数器 由于检测一个从1到0的下降沿需要2个机器周期 因此要求被采样的电平至少要维持一个机器周期 当晶振频率为12MHz时 最高计数频率不超过1 2MHz 即计数脉冲的周期要大于2 s 5 3 2定时 计数器的控制 80C51单片机定时 计数器的工作由两个特殊功能寄存器控制 TMOD用于设置其工作方式 TCON用于控制其启动和中断申请 一 工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时 计数器的工作方式 低四位用于T0 高四位用于T1 其格式如下 定时 计数器的四种工作模式 M1M0模式说明00013位定时 计数器高八位TH 7 0 低五位TL 4 0 01116位定时 计数器TH 7 0 TL 7 0 1028位计数初值自动重装的定时 计数器TL 7 0 TH 7 0 113T0运行为两个独立的8位定时 计数 而T1停止工作 2 定时 计数器控制寄存器TCON TCON 能否启动定时 计数器工作与GATE有关 分两种情况 GATE 0时 若TRi 1 开启Ti计数工作 i 0或1 若TRi 0 停止Ti计数 GATE 1时 若TRi 1且 INTi 1时开启Ti计数 若TRi 1且 INTi 0时不能开启Ti计数 若TRi 0 停止Ti计数 C T 0 定时 C T 1 对外计数 定时 机器周期Tcy 12 fosc 波形等间隔 次数已定 时间确定即对机器周期进行计数 左图定时时间为N Tcy N个机器周期 Tcy 计数 脉冲不等间隔 每个下降沿计数一次确认一次负跳变需两个机器周期 所以 计数频率最高为fosc 24 5 3 3定时 计数器的工作方式一 方式0方式0为13位计数 由TL0的低5位 高3位未用 和TH0的8位组成 TL0的低5位溢出时向TH0进位 TH0溢出时 置位TCON中的TF0标志 向CPU发出中断请求 计数寄存器TLi低5位 THi8位 T1 T0的等效逻辑结构 TLi 5位 THi 8位 TFi 中断 0 40 7 门控位GATE具有特殊的作用 当GATE 0时 经反相后使或门输出为1 此时仅由TR0控制与门的开启 与门输出1时 控制开关接通 计数开始 当GATE 1时 由外中断引脚信号控制或门的输出 此时控制与门的开启由外中断引脚信号和TR0共同控制 当TR0 1时 外中断引脚信号引脚的高电平启动计数 外中断引脚信号引脚的低电平停止计数 这种方式常用来测量外中断引脚上正脉冲的宽度 计数初值计算的公式为 定时器模式时有 N t Tcy定时器的初值还可以采用计数个数直接取补法获得 计数模式时 计数脉冲是T0引脚上的外部脉冲 二 方式1方式1的计数位数是16位 由TL0作为低8位 TH0作为高8位 组成了16位加1计数器 计数个数与计数初值的关系为 与模式0相似 与模式0的区别 计数位数不同 计数寄存器 THi 高8位 TLi 低8位 三 方式2方式2为自动重装初值的8位计数方式 工作方式2特别适合于用作较精确的脉冲信号发生器 计数个数与计数初值的关系为 与模式0 1的区别 1 计数位数不同 2 初值自动重装 四 方式3方式3只适用于定时 计数器T0 定时器T1处于方式3时相当于TR1 0 停止计数 工作方式3将T0分成为两个独立的8位计数器TL0和TH0 方式3适用于要求增加一个额外的8位定时器的应用场合 T0定时 计数 而T1停止计数 但可作波特率发生器 T0分成两独立定时 计数器TL0和TH0 TL0使用C T GATE TR0 INT0 TF0可作定时 计数 TH0使用TR1 TF1控制 因此 只能用于定时 a TL0可作8位定时 计数器 b TH0只能作8位定时器 TR1 方式3时 T1可设为模式0 1 2的定时 计数 用在任何不需要中断控制的场合 典型应用是用作串行通信的波特率发生器 a T0模式3时T1模式0 b T0模式3时T1模式1 c T0模式3时T1模式2 编程前确定参数 1 定时 计数器 T0 T1选择其一 2 工作方式 C T及GATA 3 计数初值 加1计数 16位 计数用 初值X M N M 213 8192 模式0 M 216 65536 模式1 M 28 256 模式2 模式3 定时用 初值X M N M t Tcy t为所要求的定时时间 Tcy为机器周期 4 工作模式 M1 M0 定时 计数器的初始化编程及应用 初始化程序应完成如下工作 对TMOD赋值 以确定T0和T1的工作方式 计算初值 并将其写入TH0 TL0或TH1 TL1 中断方式时 则对IE赋值 开放中断 如用查询处理 则编写查询程序判断溢出标志 溢出标志等于1 则进行相应处理 使TR0或TR1置位 启动定时 计数器定时或计数 计算计数初值欲产生500 s的等宽正方波脉冲 只需在P1 0端以250us为周期交替输出高低电平即可实现 为此定时时间应为250 s 使用12MHz晶振 则一个机器周期为1 s 方式0为13位计数结构 设待求的计数初值为X 则N 213一X 250 s 1 s 250求解得 X 7942 二进制数表示为1111100000110B 十六进制表示 高8位为0F8H 低5位为06H 其中高8位放入TH1 即TH1 OF8H 低5位放入TL1 即TL1 06H 例设单片机晶振频率为12MHz 使用定时器1以方式0产生周期为500 s的等宽正方波连续脉冲 并由P1 0输出 以查询方式完成 一 方式0的应用 5 3 4定时 计数器应用举例 TMOD寄存器初始化为把定时器 计数器1设定为方式0 则M1M0 00 为实现定时功能 应使C 0 定时器 计数器0不用 有关位设定为0 因此TMOD寄存器应初始化为00H 由定时器控制寄存器TCON中的TR1位控制定时的启动和停止 TR1 1启动 TR1 0停止 程序设计MOVTMOD 00H 设置T1为工作方式0MOVTH1 0F8H 设置计数初值MOVTL1 06HMOVIE 00H 禁止中断SETBTR1 启动定时期LOOP JBCTF1 LOOP1 查询计数溢出AJMPLOOPLOOP1 MOVTH1 0F8H 重置计数初值MOVTL1 06HCLRTF1 计数溢出标志位清0CPLP1 0 输出取反AJMPLOOP 重复循环 二 方式1应用 方式1与方式0基本相同 只是方式1改用了16位计数器 要求定时周期较长时 13位计数器不够用 可改用16位计数器 例利用定时 计数器T0的方式1 产生10ms的定时 并使P1 0引脚上输出周期为20ms的方波 采用中断方式 设系统时钟频率为12MHz 解 1 计算计数初值X 由于晶振为12MHz 所以机器周期Tcy为1 s 所以 N t Tcy 10 10 3 1 10 6 10000X 65536 10000 55536 D8F0H即应将D8H送入TH0中 F0H送入TL0中2 求T0的方式控制字TMOD M1M0 01 GATE 0 C T 0 可取方式控制字为01H ORG0000HLJMPMAIN 跳转到主程序ORG000BH T0的中断入口地址LJMPDVT0 转向中断服务程序ORG0100HMAIN MOVTMOD 01H 置T0工作于方式1MOVTH0 0D8H 装入计数初值MOVTL0 0F0HSETBET0 T0开中断SETBEA CPU开中断SETBTR0 启动T0SJMP 等待中断DVT0 CPLP1 0 P1 0取反输出MOVTH0 0D8H 重新装入计数值MOVTL0 0F0HRETI 中断返回END 三 方式2应用 方式2是定时器自动重装载的操作方式 在这种方式下 定时器0和1的工作是相同的 它的工作过程与方式0 方式1基本相同 只不过在溢出的同时 将8位二进制初值自动重装载 即在中断服务子程序中 不需要编程送初值 这里不再举例 定时器T1工作在方式2时 可直接用作串行口波特率发生器 四 方式3的应用 定时器T0工作在方式3时是2个8位定时器 计数器 且TH0借用了定时器T1的溢出中断标志TF1和运行控制位TR1 可用作一个8位定时器 例假设有一个用户系统中已使用了两个外部中断源 并置定时器T1于方式2 作串行口波特率发生器用 现要求再增加一个外部中断源 并由P1 0口输出一个5kHz的方波 假设晶振频率为6MHz 在不增加其它硬件开销时 可把定时器 计数器T0置于工作方式3 利用外部引脚T0端作附加的外部中断输入端 把TL0预置为0FFH 这样在T0端出现由1至0的负跳变时 TL0立即溢出 申请中断 相当于边沿激活的外部中断源 在方式3下 TH0总是作8位定时器用 可以靠它来控制由P1 0输出的5kHz方波 由P1 0输出5kHz的方波 即每隔100 s 周期为200 s 使P1 0的电平发生一次变化 则TH0中的初始值X M N 256 100 2 206 机器周期为2 s 下面是有关的程序 MOVTL0 0FFH MOVTH0 206 MOVTL1 BAUD BAUD根据波特率要求设置常数 MOVTH1 BAUD MOVTMOD 27H 置T0工作方式3 TL0工作于计数器方式 MOVTCON 55H 启动定时器T0 T1 置外部中断0和1 为边沿激活方式 MOVIE 9FH 开放全部中断 TL0溢出中断服务程序 由000BH单元转来 TL0INT MOVTL0 0FFH 外部引脚T0引起中断处理程序RETI TH0溢出中断服务程序 由001BH转来 TH0INT MOVTH0 206 CPLP1 0 RETI 此处串行口中断服务程序 外中断0和外中断1的中断服务程序没有列出 5 3 5定时 计数器用于外部中断扩展扩展方法是 将定时 计数器设置为计数器方式 计数初值设定为满程 将待扩展的外部中断源接到定时 计数器的外部计数引脚 从该引脚输入一个下降沿信号 计数器加1后便产生定时 计数器溢出中断 例如 利用T0扩展一个外部中断源 将T0设置为计数器方式 按方式2工作 TH0 TL0的初值均为0FFH T0允许中断 CPU开放中断 其初始化程序如下 MOVTMOD 06H 置T0为计数器方式2MOVTL0 0FFH 置计数初值MOVTH0 0FFHSETBTR0 启动T0工作SETBEA CPU开中断SETBET0 允许T0中断 中断及定时系统综合应用举例 例5 10用图3 12的显示电路 使用C51编程语言编写程序实现对按键的计数 并将计数的结果实时显示在数码管上 要求只显示有效的位 无效位不显示 分析 在本例中 要求所显示的内容不再是固定的 而是动态变化的 由于按键脉冲的宽度是随机的 为了确保准确捕获按键的次数 需要将外部中断设置成下降沿触发的方式 编写程序时 需要定一个数组作为显示缓冲区 题目要求 只显示有效的位 无效位不显示 因此还没有有效数据的高位应该不予显示 但是在显示缓冲区中会存在高位无效位和低位有效位都为 0 的情况 如 10 100 1000等 因此在显示程序读取显示缓冲区时 应先从高位向低位读取 高位的0都对应取熄灭代码 一旦读到非0的数字即意味着后面的所有0都应该取0对应的显示代码而显示 0 5 3中断及定时系统综合应用 根据分析 可以画出程序的流程图如下 C5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论