单片机应用与项目开发--项目3.ppt

上传人:marr****208 文档编号:133878489 上传时间:2020-05-31 格式:PPT 页数:54 大小:546KB
返回 下载 相关 举报
单片机应用与项目开发--项目3.ppt_第1页
第1页 / 共54页
单片机应用与项目开发--项目3.ppt_第2页
第2页 / 共54页
单片机应用与项目开发--项目3.ppt_第3页
第3页 / 共54页
单片机应用与项目开发--项目3.ppt_第4页
第4页 / 共54页
单片机应用与项目开发--项目3.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《单片机应用与项目开发--项目3.ppt》由会员分享,可在线阅读,更多相关《单片机应用与项目开发--项目3.ppt(54页珍藏版)》请在金锄头文库上搜索。

1、任务一 认识单片机的定时器 计数器 一 定时器 计数器及其应用在单片机应用系统中 定时或计数是必不可少的 例如 测量一个脉冲信号的频率 周期 或者统计一段时间里电机转动了多少圈等 常用的定时方法有 1 软件定时软件定时是依靠执行一段程序来实现的 这段程序本身没有具体的意义 通过选择恰当的指令及循环次数实现所需的定时 由于执行每条指令都需一定的时间 执行这段程序所需总的时间就是定时时间 软件定时的特点是无需硬件电路 但定时期间CPU被占用 增加了CPU的开销 因此定时时间不宜过长 而且定时期间如果发生中断 定时时间就会出现误差 3 可编程定时器定时这种定时方法是通过对系统时钟脉冲的计数来实现的

2、通过程序来设置计数初值 改变计数初值也就改变了定时时间 使用起来非常灵活 由于定时器可以与CPU并行工作 因此不影响CPU的效率 且定时时间精确 2 硬件定时硬件定时通常由小规模集成电路555外加电阻 电容构成 电路简单 不占CPU资源 但定时时间的调节不够灵活方便 一 定时器 计数器概述在51系列单片机中有两个16位的加法计数器 分别叫做T0和T1 在计数脉冲的作用下 其计数值不断加1 在此过程中 计数器可能产生溢出 产生溢出后 可以向CPU发出中断请求 如果计数脉冲来自系统时钟 称之为 定时器 每个机器周期计数器加1 如果计数脉冲来自外部电路 称之为 计数器 一旦计数器产生溢出 TF0变为

3、1 向CPU发出中断请求 二 定时器 计数器的控制寄存器1 定时器控制寄存器TCON TF0 TF1 定时器 计数器T1和T0的溢出中断标志 为1 表示定时器 计数器的计数值已由全1变为全0 正向CPU发中断请求 TR0 TR1 定时器 计数器T0和T1的启停控制位 为0时 定时器 计数器停止工作 为1时 启动定时器 计数器工作 2 定时方式寄存器TMOD 选择定时 计数器的工作方式 M1M0 00 方式001 方式110 方式211 方式3 定时方式 计数方式的选择控制位 为0 选定时方式 计数脉冲来自系统时钟的12分频 为1 选计数方式 计数脉冲来自外部电路 当GATE 0时 只要TR0

4、1 与门的输出就为1 计数开始 如果GATE为1 只有TR0 1 并且 INT0 1时 才允许计数 C T 0 选择定时方式 C T 1 选择计数方式 GATE 0时 由TR0控制计数器启停GATE 1时 由TR0和INT0一同控制启停 TR0 1时 启动定时器 定时器溢出时 TF0置1 三 T0 T1的工作方式 1 方式0方式0的计数器由13位构成 其中高8位在TH中 低5位在TL中 当计数器产生溢出时 TF位被置1 向CPU发出中断请求 在方式0下 计数器产生溢出时 不能进行初始计数值的自动重装 有关自动重装的问题参见方式2 所以方式0不能用于精确定时 方式0的所有功能都可以用方式1代替

5、方式0的存在 是因为兼容早期的MCS 48单片机的原因 所以一般不使用方式0 2 方式1方式1与方式0工作形态基本相同 只是方式1的计数器由16位构成 其中高8位在TH中 低8位在TL中 当计数器产生溢出时 TF位被置1 向CPU发出中断请求 在方式1下 计数器产生溢出时 也不能进行初始计数值的自动重装 所以方式1也不能用于精确定时 3 方式2方式2是可以自动重装的工作方式 初始化时一般将8位计数初值同时放入TH TL中 其中 TH存放的是初值的备份 TL用来计数 当8位计数器TL产生溢出时 除了可以向CPU发中断请求外 单片机的硬件部分还立即把TH中的备份送入TL中 由于重新赋值是硬件自动进

6、行的 所以避免了重新赋值的时间不一 所以方式2可以用于精确定时 4 方式3T1经常用于串行口的波特率发生器 为了让系统中保持两个计数器 可以让T0工作在方式3 这时T0被分成两个8位计数器 分别位于TH0和TL0中 其中TL0使用T0的中断 启动控制资源 而TH0则借用T1的中断 启动控制资源 而且TH0只能工作在定时方式下 不能工作在计数方式下 四 时间常数的计算如果单片机需要进行周期性的工作 就应该让定时器 计数器T0或T1工作在定时方式 并且给T0或T1赋以一个初始计数值 在T0或T1被启动后 每个机器周期使计数器中的计数值加1 计数器产生溢出后 将再次给计数器赋值 该值被称为时间常数

7、显然计数器溢出时间 又称定时时间 与时间常数直接相关 时间常数越大 定时时间就越短 时间常数越小 定时时间就越长 同时系统时钟的频率也直接影响定时时间的长短 时钟的频率越高 定时时间越短 时钟的频率越低 定时时间越长 设系统时钟的频率为fosc 计数器的初始值为N 定时器工作于方式1 则定时时间 T 216 N 12 fosc 1 如果定时器工作于方式2或方式3 定时时间为 T 28 N 12 fosc 2 当初始值N 0时 如果fosc 12MHZ 最大定时时间为 方式1为 Tmax 216 12 fosc 65536us 65 536ms方式2 方式3为 Tmax 28 12 fosc 2

8、56us 根据定时时间T 及公式 1 2 分别可以求出初值N为 方式1 N 216 T fosc 12 3 方式2 方式3 N 28 T fosc 12 4 如果fosc 12MHZ 以上公式可简化为方式1 N 216 T方式2 方式3 N 28 T 例如 系统的时钟频率是12MHz 在方式1下 如果希望定时器 计数器T0的定时时间T为10ms 则初值N 216 T 65536 10000 55536 如何将55536给两个8位寄存器TH0 TL0赋值呢 可将十进制数55536转换成四位十六进制数 将高2位送TH0 低2位送TL0 更简单的方法是 对于16位计数器来讲 216等效为0 对于8位

9、计数器 28等效为0 这样公式 3 4 可简化为N T 直接用下面两条语句就可以完成计数器初值的设置 TH0 10000 256 取 N的高8位TL0 10000 256 取 N的低8位 例如 设系统的时钟频率是12MHz 定时器工作于方式2 定时时间200us 根据前面分析 N T 200 可直接用以下语句实现 TH0 200 TL0 200 任务二 定时器应用 案例1 设时钟频率fosc 12MHz 用定时器T0在P1 0脚产生频率为20Hz的方波 设计思想 在使用定时器 计数器时 首先应根据要求对工作方式进行初始化 然后计算出初始值 初始化的步骤通常是 1 向TMOD寄存器写入工作方式控

10、制字 2 将计数器的初值写入TH0 TL0 TH1 TL1 3 启动定时器 计数器 将TR0 TR1置1 4 如果采用中断方式 还应将ET0 ET1 EA置1 本题中 方波的频率为20HZ 对应的周期为50ms 如果将定时时间设置为25ms 每隔25ms将P1 0脚取反即可产生如图3 3所示的方波 因为定时时间为25ms 如果采用方式2或方式3 其定时的最大时间不超过256us 因此选方式1比较恰当 根据前面的分析 计数器初值N 25000 本例题是定时而非计数 且无需 INT0脚参与启停控制 故C T 0 GATE为0 这样TMOD取0 x01 voidmain void TMOD 0 x0

11、1 TH0 25000 256 TL0 25000 256 TR0 1 ET0 1 EA 1 while 1 voidtimer0 void interrupt1 TH0 25000 256 TL0 25000 256 P10 P10 T0工作于定时方式1 定时时间为25ms 启动定时器T0 允许定时器T0中断 单片机开中断 定时器T0中断服务程序 重新装入时间常数 P1 0求反 案例2 如图所示 P0口接8只发光二极管 编程使发光管轮流点亮 点亮时间为500ms 要求使用定时器T0来控制 设晶振为12MHz 设计思想我们可将P0口的初值设置为0 xFE 对应于发光管D1亮 每隔500ms将P

12、0的值循环左移一位 这一周期性的定时作业用T0来完成 当时钟频率为12MHZ时 在定时器的4种工作方式中 方式1的最大溢出时间最长 但即使在方式1 最大的溢出时间也只有65 536ms 所以我们不能在每次中断时都执行上述移位操作 可以这样处理 将定时器T0的溢出时间设定为50ms 累计满10次中断正好500ms 才允许程序执行1次移位动作 主函数ucharcount 0 50ms定时中断次数计数器voidmain void led 0 xfe TMOD 0 x01 T0工作于方式1TH0 50000 256 定时时间为50msTL0 50000 256 ET0 1 允许T0中断TR0 1 启动

13、T0定时EA 1 CPU开中断while 1 voidtime0 void interrupt1 TH0 50000 256 TL0 50000 256 count if count 10 count 0 led crol led 1 P0 led 定时器T0中断服务程序 重新装入时间常数 每中断一次 计数器加1 10次中断为0 5秒 满10次变量led左移1位送P0口 案例3 用定时器的计数方式实现外部中断 如图所示 P0口控制8只发光管轮流点亮 发光管点亮时间为500ms 单脉冲电路控制发光管的移动方向 按下单脉冲按钮 发光管左移 再按下发光管右移 设计思想 当定时器 计数器工作于计数方式

14、2时 如果将计数器的初值设置为全1 只要在计数输入端 T0或T1 送入一个计数脉冲 就可使计数器产生溢出中断 如果将外部中断请求作为计数脉冲输入 就可利用计数中断的名义去完成外部中断服务 当应用中外部中断请求较多时 而单片机内部的定时器 计数器还有富余时 可采用这种方法来扩展外部中断 因此本例的实质是将定时器的计数输入端T1扩展为外部中断请求输入 来控制发光管的移动方向 具体方法 1 初始化定时器 计数器T1计数工作方式2 即每次溢出中断后能自动装入计数初值 2 计数器TH1 TL1的初值预置为0FFH 3 程序中设置一个位变量 每当计数器T1产生溢出中断时求反 发光管左移还是右移取决于该变量

15、是0还是1 voidmain void DIR 0 led 0 xfe TMOD 0 x61 TH0 50000 256 TL0 50000 256 TH1 0 xff TL1 0 xff ET0 1 ET1 1 TR0 1 TR1 1 EA 1 while 1 T0为定时方式0 T1为计数方式2 定时时间为50ms T1的初值为0 xff 允许T0 T1中断 启动T0定时 启动T1计数 CPU开中断 voidtime0 void interrupt1 TH0 50000 256 TL0 50000 256 count if count 10 count 0 if DIR 1 led crol

16、 led 1 elseled cror led 1 P0 led 重新装入时间常数 满10次为0 5秒 计数器清0 DIR为1左移 DIR为0右移 每中断一次 计数器加1 定时器T0中断服务程序 voidtime1 void interrupt3 DIR DIR 每次按下按钮产生T1的溢出中断 将DIR求反 定时器T1中断服务程序 案例4 用定时器来控制数码管的动态显示 设计思想 前面我们介绍LED动态显示程序时 每一位点亮后都需延时1ms左右 由于使用的是软件延时 大大降低了CPU的效率 而且当CPU因处理某件事务在一段时间内无法调用显示程序时 LED显示器将会出现黑屏或产生闪烁现象 用定时器控制数码管动态显示的方法 设定时器的定时时间为1ms 每次产生溢出中断 就根据位选变量bsel 主程序中将其初值设置为0 xfe 送位选口 点亮一位数码管 并将bsel左移一位 为下一位的显示做好准备 4次定时中断分别完成4位数码管的显示 之后将bsel的值再次初始化为0 xfe 准备下一轮显示 因此这种显示方式由定时中断自动完成 无需在主程序中调用 主程序ucharbsel n voidmai

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号