AT89S51单片机的定时器和计数器.ppt

上传人:max****ui 文档编号:8287243 上传时间:2020-03-28 格式:PPT 页数:32 大小:1.14MB
返回 下载 相关 举报
AT89S51单片机的定时器和计数器.ppt_第1页
第1页 / 共32页
AT89S51单片机的定时器和计数器.ppt_第2页
第2页 / 共32页
AT89S51单片机的定时器和计数器.ppt_第3页
第3页 / 共32页
点击查看更多>>
资源描述
第6章AT89S51单片机的定时器 计数器 单片机原理及应用 主讲人 贺伟 业精于勤荒于嬉 行成于思毁于随 内容概要工业检测与控制 许多场合都要用到计数或定时功能 例如 对外部脉冲进行计数 产生精确的定时时间等 AT89S51片内有两个可编程的定时器 计数器T1 T0 可满足需要 本章介绍定时器 计数器的结构与功能 2种工作模式和4种工作方式 以及相关的2个特殊功能寄存器TMOD和TCON各位的定义及其编程 最后介绍定时器 计数器的编程及应用实例 实现定时一般有三种方法 1 利用软件实现 延时程序 优点 简单 控制方便 缺点 CPU效率低 2 硬件实现 专门设计一个单稳态定时器 优点 CPU效率高 缺点 修改参数麻烦 3 利用计数器实现 单片机一般利用第三种方法实现 AT89S51内部设有两个16位的定时器 计数器 可用软件控制 定时器 对机器周期计数 每过一个机器周期 计数器内容加1 计数器 对外来脉冲进行计数 T0 T1引脚上从高电平到低电平跳变时 计数器内容加1 6 1定时器 计数器的结构定时器 计数器结构如图6 1所示 定时器 计数器T0由特殊功能寄存器TH0 TL0构成 定时器 计数器T1由特殊功能寄存器TH1 TL1构成 图6 1AT89S51单片机的定时器 计数器结构框图 具有定时器和计数器2种工作模式 4种工作方式 方式0 方式1 方式2和方式3 属于增计数器 TMOD用于选择定时器 计数器T0 T1的工作模式和工作方式 TCON用于控制T0 T1的启动和停止计数 同时包含了T0 T1的状态 T0 T1不论是工作在定时器模式还是计数器模式 都是对脉冲信号进行计数 只是计数信号的来源不同 计数器模式是对加在T0 P3 4 和T1 P3 5 两个引脚上的外部脉冲进行计数 见图6 1 定时器工作模式是对单片机的时钟振荡器信号经片内 12分频后的内部脉冲信号计数 由于时钟频率是定值 所以可根据计数值可计算出定时时间 计数器的起始计数都是从计数器初值开始的 单片机复位时计数器的初值为0 也可用指令给计数器装入一个新的初值 AT89S51的定时器 计数器属于增1计数器 二 定时器 计数器的工作原理 16位的定时器 计数器实质上是一个加1计数器 可实现定时和计数两种功能 其功能由软件控制和切换 定时器属硬件定时和计数 是单片机中效率高而且工作灵活的部件 在定时器 计数器开始工作之前 CPU必须将一些命令 称为控制字 写入定时器 计数器 将控制字写入定时器 计数器的过程叫定时器 计数器的初始化 在初始化程序中 要将工作方式控制字写入定时器方式寄存器 TMOD 工作状态控制字 或相关位 写入定时器控制寄存器 TCON 赋定时 计数初值给TH0 TH1 和TL0 TL1 1 定时器 计数器的定时功能 计数器的加1信号由振荡器的12分频信号产生 即每过一个机器周期 计数器加1 直至计满溢出 定时器的定时时间与系统的时钟频率有关 因一个机器周期等于12个时钟周期 所以计数频率应为系统时钟频率的十二分之一 如果晶振频率为12MHz 则机器周期为1 s 通过改变定时器的定时初值 并适当选择定时器的长度 8位 13位或16位 可以调整定时时间 2 定时器 计数器的计数功能 通过外部计数输入引脚T0 P3 4 和T1 P3 5 对外部信号计数 外部脉冲的下降沿将触发计数 计数器在每个机器周期的S5P2期间采样引脚输入电平 若一个机器周期S5P2期间采样值为1 下一个机器周期S5P2期间采样值为0 则计数器加1 再下一个机器周期S3P1期间 新的计数值装入计数器 因检测一个由1至0的跳变需要两个机器周期 故外部信号的最高计数频率为时钟频率的二十四分之一 如果晶振频率为12MHz 则最高计数频率为0 5MHz 虽然对外部输入信号的占空比无特殊要求 但为了确保给定电平在变化前至少被采样一次 外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上 如图6 10所示 图中Tcy为机器周期 各位的功能说明 TF1 TCON 7 8FH位 T1溢出标志位 TF0 TCON 5 8DH位 T0溢出标志位 TR1 TCON 6 8EH位 T1运行控制位 0 关闭T1 1 启动T1运行 TR0 TCON 4 8CH位 T0运行控制位 0 关闭T0 1 启动T0运行 1 定时器控制寄存器定时器控制寄存器TCON的作用是控制定时器的启动与停止 并保存T0 T1的溢出和中断标志 TCON的格式 可按位寻址 6 1 1工作方式寄存器和控制寄存器 AT89S51单片机的定时器为可编程定时器 在定时器工作之前必须先进行初始化 即将控制命令写入定时器控制寄存器 定时器方式寄存器TMOD的作用是设置T0 T1的工作方式 TMOD的格式 2 定时器工作方式寄存器TMOD 各位的功能说明 1 GATE 门控位 GATE 0 软件启动定时器 即用指令使TCON中的TR1 TR0 置1即可启动定时器1 定时器0 GATE 1 软件和硬件共同启动定时器 即用指令使TCON中的TR1 TR0 置1时 只有外部中断INT0 INT1 引脚输入高电平时才能启动定时器1 定时器0 2 C T 功能选择位 C T 0时 以定时器方式工作 C T 1时 以计数器方式工作 定时器工作方式选择位定义 3 M1 M0 方式选择位 定时 计数器有四种工作方式 由M1M0进行设置 二 定时器工作方式 由方式选择位M1 M0设定 1 方式0 M1M0 00 13位定时 计数器 THx8位和TLx低5位组成加1计数器 计数外部脉冲个数 1 8192 213 定时时间 若T 1 s 1 s 8 19ms fosc T 12 fosc 16位定时 计数器 THx8位和TLx8位组成16位加1计数器 计数外部脉冲个数 1 65536 216 定时时间 若T 1 s 1 s 65536 T 65 54ms 2 方式1 M1M0 01 T 12 fosc 3 方式2 M1M0 10 自动恢复初值8位定时 计数器 TLx为8位加1计数器 THx为8位初值暂存器 用于需要重复定时和计数的场合 最大计数值 256 28 最大定时时间 若T 1 s 256 s T 12 fosc 计数满后自动装入计数初值 省去用户软件中重装初值的程序 精确的定时 4 方式3 M1M0 11 T0分成2个8位定时器 TL0定时 计数器和TH0定时器 TL0占用T0控制位 C T TR0 GATE TH0占用T1控制位 TR1 TF1 T1不能使用方式3工作 常作串口的波特率发生器使用 T1工作在方式1 T1工作在方式2 T1工作在方式0 T0处于方式3时 T1可定为方式0 方式1和方式2 用来作为串行口的波特率发生器 或不需要中断的场合 4种工作方式中 方式0与方式1基本相同 由于方式0是为兼容MCS 48而设 初值计算复杂 在实际应用中 一般不用方式0 而采用方式1 方式2省去程序中重装初值的指令 并可产生相当精确的定时时间 当T1作串行口波特率发生器时 T0才设置为方式3 6 4定时器 计数器的编程和应用AT89S51的定时 计数器是可编程的 因此 在进行定时或计数之前也要用对其进行初始化 初始化一般应包括以下几个步骤 1 对TMOD寄存器赋值 以确定定时器的工作方式 2 置定时 计数器初值 直接将初值写入寄存器的TH0 TL0或TH1 TL1 3 根据需要 对寄存器IE置初值 开放定时器中断 4 对TCON寄存器中的TR1或TR0置位 启动定时 计数器 启动以后 计数器即按规定的工作方式和初值进行计数或开始定时 定时 计数器初值的计算 2 计数器初值的计算在计数器模式下 此时计数器就计数引脚上到来的脉冲个数 每检测到一个脉冲下降沿 就加1一次 其计数脉冲个数S为 S M X式中 M为计数器模值 该值和计数器工作方式有关 在方式0时M为213 在方式1时M为216 在方式2和方式3时M为28 X是计数器的计数初值 1 定时器初值的计算在定时器模式下 计数器由单片机主脉冲经12分频后计数 即就是对机器周期进行计数 则定时器定时时间t的公式 t M X T定时初值 X M t T式中 M为模值 和定时器的工作方式有关 在方式0时M为213 在方式1时M为216 在方式2和方式3时M为28 T是机器周期 X是定时器的定时初值 例2 例 T0运行于定时器状态 时钟振荡周期为12MHZ 要求定时100 s 求不同工作方式时的定时初值X并计算在不同工作方式下最大的定时时间tmax 解 fosc 12MHzT 1 s由公式X M t T得 方式0 13位方式 X 213 100 s 1 s 1F9C当T0的初值 0时为最大定时时间 tmax 213 0 1 s 8 192ms方式1 16位方式 X 216 100 s 1 s FF9CHtmax 216 0 1 s 65 536ms方式2 3 8位方式 X 28 100 s 1 s 9CHtmax 213 0 1 s 256 s 注意 工作方式0的初值装入方法 1F9CH 0001111110011100B可见 TH0 FCH TL0 1CH TL0的低5位 TH0的8位 MOVTH0 0FCHMOVTL0 1CH T 12 fosc 定时器初始化编程 使用定时器工作之前 先写入控制寄存器 确定好定时器工作方式 初始化编程格式 MOVTMOD 方式字 选择方式MOVTHx XH 装入Tx时间常数MOVTLx XL SETBEA 开Tx中断 SETBETx SETBTRx 启动Tx定时器需考虑 1 按实际需要选择定时 计数功能 2 按时间或计数长度选择工作方式 3 计算时间常数 计算时间常数X 计算初值 计数功能 X 2n 计数值 n 8 13 16 定时功能 X 2n t T t 定时时间 T 机器周期 方法1 用延时程序实现1mS的延时 UP SETBP1 0LCALLD2MSCLRP1 0LCALLD2MSSJMPUP方法2 用T0定时1mS 查询TF0 确定工作方式方式0 计算初值E018H 编程MOVTMOD 00HSETBTR0LOOP MOVTH0 0E0HMOVTL0 18HJNBTF0 CPLP1 0CLRTF0SJMPLOOP 例1使P1 0输出一个周期为2mS的方波 方法3 用T0定时1mS 中断 ORG0000HLJMPMAINORG000BHLJMPAT0MAIN MOVTMOD 00HMOVTH0 0E0HMOVTL0 18HSETBEASETBET0SETBTR0SJMP AT0 MOVTMOD 00HMOVTH0 0E0HCPLP1 0RETI fosc 12MHz 1 T0工作方式的确定定时时间较长 采用哪一种工作方式 由各种工作方式的特性 可计算出 方式0最长可定时16 384ms 方式1最长可定时131 072ms 方式2最长可定时512 s 欲定时1秒 这个值已经超过了定时器的最大定时时间 为此 我们只有采用定时器定时和软件计数相结合的方法才能解决问题 选方式1 每隔100ms中断一次 中断10次为1s 2 计算计数初值因为 216 X 2 10 6 10 1所以 X 15536 3CB0H因此 TH0 3CH TL0 B0H 3 10次计数的实现采用循环程序法 4 程序设计参考程序 例2假设系统时钟为6MHz 编写定时器T0产生1秒定时的程序 ORG0000HRESET LJMPMAIN 上电 转主程序入口MAINORG000BH T0的中断入口LJMPIT0P 转T0中断处理程序IT0PORG1000HMAIN MOVSP 60H 设堆栈指针MOVB 0AH 设循环次数10次MOVTMOD 01H 设T0工作在方式1MOVTL0 0B0H 给T0设初值MOVTH0 3CHSETBTR0 启动T0SETBET0 允许T0中断SETBEA CPU开放中断HERE SJMPHERE 等待中断ITOP MOVTL0 0B0H T0中断子程序 重装初值MOVTH0 3CH DJNZB LOOPCLRTR0 1s定时时间到 停止T0工作LOOP RETI 6 4 4门控制位GATE的应用 测量脉冲宽度GATE1可使定时器 计数器T1的启动计数受INT1 的控制 可测量引脚INT1 P3 3 上正脉冲的宽度 机器周期数 参考程序 ORG0000HRESET AJMPMAIN 复位入口转主程序ORG0100HMAIN MOVSP 60HMOVTMOD 90H T1为方式1定时控制字MOVTL1 00HMOVTH1 00HLOOP0 JBP3 3 LOOP0 INT1 高 则循环SETBTR1 如INT1 为低 启动T1LOOP1 JNBP3 3 LOOP1 INT1 低 则循环LOOP2 JBP3 3 LOOP2 INT1 高 则循环CLRTR1 停止T1计数MOVA TL1 T1计数值送A将A中的T1计数值送显示缓冲区转换成显示的代码LOOP3 LCALLDIR 调用显示子程序DIR 显示T1计数值AJMPLOOP3 执行程序 使INT1 引脚上出现的正脉冲宽度以机器周期数的形式显示在显示器上 6 4 5实时时钟的设计1 实时时钟实现的基本思想如何获得1秒的定时 可把定时时间定为100ms 采用中断方式进行溢出次数的累计 计满10次 即得到秒计时 片内RAM中规定3个单元作为秒 分 时单元 具体安排如下 42H 秒 单元 41H 分 单元 40H 时 单元从秒到分 从分到时是通过软件累加并进行比较的方法来实现的 2 程序设计 1 主程序的设计流程如图所示 2 中断服务程序的设计中断服务程序的主要功能是实现秒 分 时的计时处理 参考程序略 6 4 6运行中读定时器 计数器在读取运行中的定时器 计数器时 需注意 若恰好出现TLX溢出向THX进位的情况 则读得的 TLX 值就完全不对 同样 先读 THX 再读 TLX 也可能出错 方法 先读 THX 后读 TLX 再读 THX 若两次读得 THX 相同 则读的内容正确 若前后两次读的 THX 有变化 则再重复上述过程 若重复读得的内容相同 就应是正确的 下面是有关的程序 读得的 TH0 和 TL0 放置在R1和R0内 RDTIME MOVA TH0 读 TH0 MOVR0 TL0 读 TL0 CJNEA TH0 RDTIME 比较2次读得的 TH0 不相等则重复读MOVR1 A TH0 送入R1中RET
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!