单片机C语言编程(定时器计数器).ppt

上传人:jun****875 文档编号:8195208 上传时间:2020-03-27 格式:PPT 页数:101 大小:1.07MB
返回 下载 相关 举报
单片机C语言编程(定时器计数器).ppt_第1页
第1页 / 共101页
单片机C语言编程(定时器计数器).ppt_第2页
第2页 / 共101页
单片机C语言编程(定时器计数器).ppt_第3页
第3页 / 共101页
点击查看更多>>
资源描述
第6章MCS 51单片机定时器 计数器 本章制作 刘晓霞 第6章MCS 51单片机定时器 计数器 目录6 1MCS 51定时器 计数器的结构及原理6 2定时器T0 T16 3定时器T26 4定时器应用举例 本章主要讨论MCS 51单片机定时器 计数器的逻辑结构和工作原理 内容主要有MCS 51单片机定时器T0 T1 T2的逻辑结构 工作方式的选择和应用 本章为单片机的主要内容 也是第七章串行口的学习的基础 第6章MCS 51单片机的定时器 计数器 6 1MCS 51单片机定时器 计数器的结构及原理 主要内容6 1 1MCS 51单片机定时器的结构6 1 2MCS 51单片机定时器的工作原理6 1 3定时器 计数器的控制寄存器 6 1 1MCS 51单片机定时器的结构 MCS 51单片机定时器 计数器逻辑结构图 6 1 1MCS 51单片机定时器的结构 MCS 51主要由如下构成 三个16位的可编程定时器 计数器 定时器 计数器0 1和2 每个定时器有两部分构成 THx和TLx特殊功能寄存器T2MOD和T2CON 主要对T2进行控制 特殊功能寄存器TMOD和TCON 主要对T0和T1进行控制 6 1 1MCS 51单片机定时器的结构 引脚P3 5 P3 4 P1 0 输入计数脉冲 定时器T0 T1和T2是3个中断源 可以向CPU发出中断请求 定时器 计数器T2增加了两个8位的寄存器 RCAP2H和RCAP2L 特殊功能寄存器之间通过内部总线和控制逻辑电路连接起来 6 1 2MCS 51单片机定时器的工作原理 定时器 计数器T0 T1 T2的内部结构简图如下图所示 6 1 2MCS 51单片机定时器 计数器的工作原理 从上图可以看出 定时器的实质是一个加1计数器 C T 0 为定时器方式 计数信号由片内振荡电路提供 振荡脉冲12分频送给计数器 每个机器周期计数器值增1 例如 如果晶振频率为12MHz 则最高计数频率为0 5MHz 6 1 2MCS 51单片机定时器 计数器的工作原理 C T 1 为计数方式 计数信号由Tx引脚 P3 4 P3 5和P1 0 输入 每输入一有效信号 相应的计数器中的内容进行加1 控制信号TRx 1时 定时器启动 当定时器由全1加到全0时计满溢出 从0开始继续计数 TFx 1 向CPU申请中断 6 1 3定时器 计数器的方式和控制寄存器 1 T0 T1工作模式寄存器TMOD功能 确定定时器的工作模式 其格式如图6 3所示 GATE 外部门控制位 GATE 1 使用外部控制门 TRx 1 P3 2 P3 3 1时 启动定时器 6 1 3定时器 计数器的方式和控制寄存器 GATE 0 不使用外部门控制计数器C T 定时或计数方式选择位 C T 0时 为定时器C T 1时 为计数器采样过程 CPU在每机器周期S5P2期间 输入信号进行采样 若前一机器周期采样值为1 下一机器周期采样值为0 则计数器增1 随后的机器周期S3P1期间 新的计数值装入计数器 6 1 3定时器 计数器的方式和控制寄存器 M1 M0 工作模式选择位 如下表所示 6 1 3定时器 计数器的方式和控制寄存器 2 T0 T1的控制寄存器TCON TF1 TF0 T1 T0的溢出标志位计数溢出 TFx 1 中断方式 自动清零 查询方式 软件清零 6 1 3定时器 计数器的方式和控制寄存器 TR1 TR0 T1 T0启停控制位 置1 启动定时器 清0 关闭定时器 IE1 IE0 外部中断1 0请求标志位IT1 IT0 外部中断1 0触发方式选择位注意 GATE 1 TRx与P3 2 P3 3 的配合 6 2定时器T0 T1的工作模式及应用 主要内容6 2 1模式0的逻辑结构及应用6 2 2模式1的逻辑结构及应用6 2 3模式2的逻辑结构及应用6 2 4模式3的逻辑结构及应用 6 2 1模式0的逻辑结构及应用 M1M0 00 选择模式0 逻辑结构如图6 5所示 以T0为例 T0的结构 13位定时器 计数器 由TH0的8位 TL0的低5位构成 高3位未用 工作过程 TL0溢出后向TH0进位 TH0溢出后将TF0置位 并向CPU申请中断 定时时间 213 定时初值 机器周期最大定时时间 213 机器周期 6 2 1模式0的逻辑结构及应用 C T 1 计数方式 计数脉冲由P3 4引脚输入 C T 0时 定时方式 图6 5模式0的逻辑结构图 6 2 2模式1的逻辑结构及应用 M1M0 01时 选择模式1 逻辑结构如下页图所示 T0的结构 16位定时器 计数器 TL0 存放计数初值的低8位 TH0存放计数初值的高8位 定时时间 216 定时初值 机器周期最大定时时间 216 机器周期 6 2 2模式1的逻辑结构及应用 工作过程 当TL0计满时 向TH0进1 当TH0计满时 溢出使TF0 1 向CPU申请中断 MCS 51单片机之所以设置几乎完全一样的方式0和方式1 是出于与MCS 48单片机兼容的 6 2 3模式2的逻辑结构及应用 M1M0 10时 选择模式2 逻辑结构如图6 7所示 T0的结构 TL0 8位的定时器 计数器 TH0 8位预置寄存器 用于保存初值 工作过程 当TL0计满溢出时 TF0置1 向CPU发出中断请求 同时引起重装操作 TH0的计数初值送到TL0 进行新一轮计数 6 2 3模式2的逻辑结构及应用 图6 7模式2的逻辑结构图 6 2 3模式2的逻辑结构及应用 定时时间 28 初值 机器周期最大定时时间 28 机器周期优点 模式2能够进行自动重装载 模式0和1计数溢出后 计数器为全0 循环定时或计数时 需要重新设置初值 说明 在模式2能够满足计数或定时要求时 尽可能使用模式2 6 2 4模式3的逻辑结构及应用 1 T0模式3的结构特点M1M0 11 选择模式3 逻辑结构如图6 8和6 9所示 结构 TL0 TH0分为两个独立的8位计数器TL0 8位定时器 计数器使用T0所有的资源和控制位TH0 8位定时器使用T1所有的资源 中断向量 中断控制ET1 PT1 和控制位 TR1 TF1 6 2 4模式3的逻辑结构及应用 图6 8模式3下T0的逻辑结构图 6 2 4模式3的逻辑结构及应用 2 T0模式3时T1的工作模式T1可以模式0 模式2工作 T1的结构如图6 9所示由于TF1及中断矢量被TH0占用 所以T1仅用作波特率发生器或其它不用中断的地方 T1作波特率发生器 其计数溢出直接送至串行口 设置好工作方式 串行口波特率发生器开始自动运行 TMOD中T1的M1M0 11 T1停止工作 6 2 4模式3的逻辑结构及应用 图6 9模式3下 T1的逻辑结构图 思考 T0工作在模式3 T1怎么进行方式设置 串行口 6 2 4模式3的逻辑结构及应用 1 定时器 计数器工作模式的选择方法 1 首先计算计数值N 2 确定工作模式原则是尽可能地选择模式2若N 256选择模式2 否则选择模式1 3 如果需要增加一个定时器 计数器选择模式3 6 2 4模式3的逻辑结构及应用 2 定时器 计数器初值X的计算方法因为X N 28或216所以X 28或216 N 1 对定时器设定时时间为tN t 机器周期所以X 28或216 t 机器周期 2 对计数器X 28或216 N 6 2 4模式3的逻辑结构及应用 例6 1设单片机的振荡频率为12MHz 用定时器 计数器0的模式1编程 在P1 0引脚产生一个周期为1000 s的方波 定时器T0采用中断的处理方式 定时器的分析过程 工作方式选择需要产生周期信号时 选择定时方式 定时时间到了对输出端进行周期性的输出即可 工作模式选择根据定时时间长短选择工作模式 首选模式2 可以省略重装初值操作 6 2 4模式3的逻辑结构及应用 定时时间计算 周期为1000 s的方波要求定时器的定时时间为500 s 每次溢出时 将P1 0引脚的输出取反 就可以在P1 0上产生所需要的方波 定时初值计算 振荡频率为12MHz 则机器周期为1 s 设定时初值为X 65536 X 1 s 500 sX 65036 0FE0CH定时器的初值为 TH0 0FEH TL0 0CH 6 2 4模式3的逻辑结构及应用 C语言程序 include 包含特殊功能寄存器库sbitP1 0 P1 0 进行位定义voidmain TMOD 0 x01 T0做定时器 模式1TL0 0 x0c TH0 0 xfe 设置定时器的初值ET0 1 允许T0中断EA 1 允许CPU中断TR0 1 启动定时器while 1 等待中断 6 2 4模式3的逻辑结构及应用 voidtime0 int void interrupt1 中断服务程序TL0 0 x0c TH0 0 xfe 定时器重赋初值P1 0 P1 0 P1 0取反 输出方波 汇编语言程序 ORG0000HSJMPMAINORG000BHLJMPTIME0 6 2 4模式3的逻辑结构及应用 MAIN MOVTMOD 01H T0定时 模式1MOVTL0 0CH 置定时初值MOVTH0 0FEHSETBET0 定时器T0开中断SETBEA CPU开中断SETBTR0 启动定时器T0SJMP 等待定时器溢出TIME0 中断服务程序MOVTL0 0CHMOVTH0 0FEH 重装定时初值CPLP1 0 P1 0取反RETI 中断返回END 6 2 4模式3的逻辑结构及应用 例6 2设单片机的振荡频率为12MHz 用定时器 计数器0编程实现从P1 0输出周期为500 s的方波 分析 方法同例6 1定时时间 方波周期为500 s 定时250 s 模式选择 定时器0可以选择模式0 1和2 模式2最大的定时时间为256 s 满足250 s的定时要求 选择模式2 6 2 4模式3的逻辑结构及应用 1 初值计算 256 X 1 s 250 sX 6 则TH0 TL0 6 2 程序 采用中断处理方式的程序 C语言程序 include 包含特殊功能寄存器库sbitP1 0 P1 0 6 2 4模式3的逻辑结构及应用 voidmain TMOD 0 x02 选择工作模式TL0 0 x06 TH0 0 x06 为定时器赋初值ET0 1 允许定时0中断EA 1 TR0 1 启动定时器0while 1 等待中断 voidtime0 int void interrupt1 P1 0 P1 0 6 2 4模式3的逻辑结构及应用 汇编语言程序 ORG0000HLJMPMAINORG000BH 中断处理程序CPLP1 0RETIORG0030H 主程序MAIN MOVTMOD 02HMOVTL0 06HMOVTH0 06HSETBET0 允许定时器0中断SETBEA 允许CPU中断SETBTR0 启动定时器0SJMP 等待中断END 6 2 4模式3的逻辑结构及应用 采用查询方式处理的程序 C语言程序 includesbitP1 0 P1 0 voidmain TMOD 0 x02 TL0 0 x06 TH0 0 x06 TR0 1 while 1 while TF0 查询计数溢出TF0 0 P1 0 P1 0 6 2 4模式3的逻辑结构及应用 汇编语言程序 MAIN MOVTMOD 02H 主程序MOVTL0 06HMOVTH0 06HSETBTR0LOOP JNBTF0 查询计数溢出CLRTF0CPLP1 0SJMPLOOPEND 6 3定时器 计数器T2 主要内容6 3 1定时器T2的特殊寄存器6 3 2定时器T2的工作方式及结构 6 3 1定时器 计数器T2的特殊寄存器 89C52中的T2是一个16位的 具有自动重装载和捕获能力的定时器 计数器 T2的结构 除TL2 TH2和控制寄存器T2CON及T2MOD之外 还增加了捕获寄存器RCAP2L 低字节 和RCAP2H 高字节 T2的计数脉冲源有两个 一个是内部机器周期 另一个是由T2 P1 0 端输入的外部计数脉冲 6 3 1定时器 计数器T2的特殊功能寄存器 T2有4种工作方式 自动重装 捕获和波特率发生器 可编程时钟输出 增加了两个引脚 T2 P1 0 T2EX P1 1 1 定时器 计数器2的控制寄存器T2CON可位寻址和字节寻址 功能 选择T2的工作方式和工作模式 允许位寻址和字节寻址 其格式如下 6 3 1定时器 计数器T2的特殊功能寄存器 TF2 定时器 计数器2的溢出中断标志位T2溢出时置位 申请中断 软件清零 波特率发生器方式下 RCLK 1或TCLK 1时 定时器溢出不对TF2进行置位 EXF2 T2CON 6 定时器 计数器2外部触发标志位 6 3 1定时器 计数器T2的特殊功能寄存器 EXEN2 1 且T2EX引脚上有负跳变将触发捕获或重装操作 EXF2 1 向CPU发出中断请求 软件复位 RCLK 串行口接收时钟允许标志位RCLK 1时 T2溢出信号分频后做串行口工作在模式1和3的接收波特率 RCLK 0时 T1溢出信号分频信后做串行口接收波特率 6 3 1定时器 计数器T2的特殊功能寄存器 TCLK 串行口发送时钟允许标志位TCLK 1时 T2溢出信号分频后做串行口工做在模式1和3的发送波特率 TCLK 0时 T1溢出信号分频后做串行口的发送波特率 6 3 1定时器 计数器T2的特殊功能寄存器 EXEN2 T2CON 3 定时器 计数器2外部允许标志位EXEN2 1 定时器 计数器2没有工作在波特率发生器方式 如T2EX P1 1 引脚上产生负跳变时 将激活 捕获 或 重装 操作 EXEN2 0 T2EX引脚上的电平变化对定时器 计数器2不起作用 6 3 1定时器 计数器T2的特殊功能寄存器 TR2 定时器 计数器2启动控制位TR2 1 启动定时器 计数器2 TR2 0 停止定时器 计数器2 C T2 T2的定时器或计数器方式选择位 C T2 1 T2为计数器 对T2 P1 0 引脚输入脉冲进行计数 下降沿触发 当T2 P1 0 产生负跳变时 计数器增1 6 3 1定时器 计数器T2的特殊功能寄存器 C T2 0 T2做定时器 每个机器周期T2加1 CP RL2 捕获和重装载方式选择控制位捕获方式 CP RL2 1 EXEN2 1 T2EX P1 1 引脚负跳变将触发捕获操作 重装载方式 CP RL2 0 EXEN2 1 T2EX引脚有负跳变或T2计满溢出时 触发自动重装操作 6 3 1定时器 计数器T2的特殊功能寄存器 RCLK 1或TCLK 1时 定时器 计数器2做波特率发生器 CP RL2标志位不起作用 当T2溢出时强制自动装载 2 数据寄存器TH2 TL28位的数据寄存器 组成16位定时器 计数器 字节寻址 地址分别为CDH和CCH 复位后 TH2 00H TL2 00H 3 捕获寄存器RCAP2H和RCAP2L 6 3 1定时器 计数器T2的特殊功能寄存器 RCAP2H 高8位捕获寄存器 字节地址为CBH RCAP2L 低8位捕获寄存器 字节地址为CAH 捕获方式 保存当前捕获的计数值 重装方式 保存重装初值 复位后均为00H 6 3 1定时器 计数器T2的特殊功能寄存器 功能 对定时器的加1减1计数方式进行设置 选择是否工作在可编程时钟输出方式 复位后为 00B 4 定时器 计数器2的模式控制寄存器T2MOD 6 3 1定时器 计数器T2的特殊功能寄存器 T2MOD中标志 保留位 未定义 为未来功能扩展用 T2OE 定时器 计数器2输出启动位 T2OE 1 工作在可编程时钟输出方式 输出方波信号至T2 P1 0 引脚 DCEN 定时器 计数器2向上 向下计数控制位 当DCEN l T2自动向下 递减 计数当DCEN 0 T2自动向上 递增 计数 6 3 2定时器 计数器T2的工作方式 定时器 计数器2是一个16位的加1计数器 具有四种工作方式 如表6 2所示 方式选择寄存器 T2CON和T2MOD 注意 无论T2做定时器还是计数器 都具有捕获和自动重装的功能 6 3 2定时器 计数器T2的工作方式 6 3 2定时器 计数器T2的工作方式 一 16位自动重装方式CP RL2 0 DCEN 0时 选择自动重装方式 结构如下图所示 T2计满溢出时 TF2置1 申请中断 打开重装载三态缓冲器 将RCAP2H和RCAP2L的内容自动装载到TH2和TL2中 EXEN2 1且T2EX P1 1 端的信号有负跳变时 EXF2置1 申请中断 引起重装载操作 6 3 2定时器 计数器T2的工作方式 6 3 2定时器 计数器T2的工作方式 CP RL2 0 DCEN 1时 定时器 计数器2既可以增量 加1 和减量 减1 计数 T2EX电平控制计数方向 当T2EX P1 1 引脚输入为高电平1时 T2执行增量 加1 计数 增量计数过程 计满溢出时 一方面置位TF2 向主机请求中断处理 另一方面将存放在寄存器RCAP2L和RCAP2H中的16位计数初值自动重装TL2和TH2中 进行新一轮加1计数 6 3 2定时器 计数器T2的工作方式 6 3 2定时器 计数器T2的工作方式 T2EX P1 1 引脚为低电平0时 定时器 计数器2执行减量 减1 计数 减量计数过程 是用FFH分别初始化 预置 TL2和TH2 用0FFFFH减去计数次数所求得的下限初始化RCAP2L和RCAP2H 计数器不断减1 直至计数器中的值等于寄存器RCAP2L和RCAP2H中预置的值时 计满溢出 0FFH重装TL2和TH2 进行新一轮的计数操作 6 3 2定时器 计数器T2的工作方式 增量 加1 计数是以65536为模 对计数次数求补得到计数初值 此初值初始化TL2 TH2和RCAP2L RCAP2H陷阱寄存器 在电平控制重装方式下 无论减量增量计数 溢出时TF2置1 EXF2状态翻转 相当于17位计数器的最高位 6 3 2定时器 计数器T2的工作方式 二 捕获方式当CP RL2 l 选择捕获方式 存在以下两种情况 T2结构如下图所示 有两种情况 EXEN 0定时器2的计数溢出 置位TF2 申请中断 EXEN2 1T2EX P1 1 端的信号有负跳变时 触发捕获操作 将TH2和TL2的内容自动捕获到寄存器RCAP2H和RCAP2L中同时EXF2置1 申请中断 6 3 2定时器 计数器T2的工作方式 图6 14捕获方式的逻辑结构图 6 3 2定时器 计数器T2的工作方式 三 波特率发生器方式RCLK 1或TCLK 1时 选择波特率发生器方式 结构如下图所示 从图可以看出 RCLK 1 T2为接收波特率发生器 TCLK 1 T2为发送波特率发生器 C T2 0 选用内部脉冲 C T2 1 选用外部脉冲 T2 P1 0 输入负跳变时 计数值增l 6 3 2定时器 计数器T2的工作方式 6 3 2定时器 计数器T2的工作方式 计数溢出时 触发自动装载操作 RCAP2H和RCAP2L的内容自动装载到TH2和TL2中 T2用做波特率发生器时 TH2的溢出不会将TF2置位 不产生中断请求 T2EX还可以作为一个附加的外部中断源 T2用做波特率发生器时 若EXEN2 1 当T2EX有负跳变时 EXF2置1 由于不发生重装载或捕获操作 此时T2EX引脚可外接一中断源 6 3 2定时器 计数器T2的工作方式 定时器 计数器T2作为波特率发生器使用时的编程方法如下 RCAP2H 0 x30 设置波特率RCAP2L 0 x38 TCLK 1 选择定时器2的溢出脉冲作为波特率发生器注意 在波特率发生器工作方式下 在T2计数过程中不能再读 写TH2和TL2的内容 6 3 2定时器 计数器T2的工作方式 四 可编程时钟输出方式T2OE 1时 C T2 0时 T2工作于时钟输出方式 结构如下图所示 工作过程 当T2计满溢出时 T2 P1 0 引脚状态翻转 从而输出频率可调 精度很高的方波信号 同时使RCAP2H和RCAP2L寄存器内容装入TH2和TL2寄存器中 重新计数 在时钟输出方式下 T2溢出时不置位TF2 6 3 2定时器 计数器T2的工作方式 当EXEN2 1 T2EX P1 1 引脚有负跳变时 EXF2将置1 同波特率发生器方式 从P1 0引脚输出的时钟信号频率为 Fosc 4 65536 RCAP2H RCAP2L 6 3 2定时器 计数器T2的工作方式 图6 16T2时钟输出方式下的逻辑结构图 6 4定时器应用举例 主要内容6 4 1定时器的初始化6 4 2定时器应用举例 6 4 1定时器的初始化 在使用定时器 计数器前 应首先对其进行初始化编程 一 定时器的初始化步骤1 选择工作模式和工作方式 设置TMOD T2MOD 2 设置定时器的计数初值 设置THx和TLx RCAP2H和RCAP2L 3 中断设置 设置IE 4 启动定时器 设置TCON或T2CON 可以使用位操作指令 例如 SETBTRx 6 4 1定时器的初始化 二 定时器 计数器初值计算根据定时器 计数器的模式和方式 计算计数初值 注意T2 计数器的长度为n 则计数的最大值为2n 1 工作于定时方式计数脉冲由内部的时钟提供 每个机器周期进行加1 设晶振频率为fosc 则计数脉冲的频率为fosc 12 计数脉冲周期T 1 fosc 12 6 4 1定时器的初始化 如果进行定时时间为t 计数初值为X 则 t 2n X 12 fosc2 工作于计数方式当工作在计数方式时 对外部脉冲计数 利用计数器计数结束产生溢出的特性 来计算初值X 则有 X 2n 计数次数 6 4 2定时器的应用举例 例6 3利用定时器T1的模式2对外部信号进行计数 要求每计满100次 将P1 0端取反 分析 T1工作在计数方式 脉冲数100 模式2 模式字TMOD 0110 b 1 初值计数 在模式2下 X 28 100 156D 9CH2 C语言程序 includesbitp1 0 p1 0 进行位定义 6 4 2定时器的应用举例 voidmain TMOD 0 x60 T1工作在模式2 计数TL1 0 x9c 装入计数 重装 初值TH1 0 x9c ET1 1 允许定时器1中断EA 1 开中断TR1 1 启动定时器1while 1 6 4 2定时器的应用举例 voidtime0 int void interrupt3 中断服务程序 P1 0 P1 0 取反 产生方波 3 汇编语言程序 MAIN MOVTMOD 60H T1工作在模式2 计数MOVTL1 9CH 装入计数初值MOVTH1 9CH 装入计数 重装 初值 6 4 2定时器的应用举例 MOVIE 88H 允许定时器中断SETBTR1 启动定时器HERE SJMPHERE 等待中断中断服务程序 ORG001BH 中断服务程序入口地址CPLP1 0 对P1 0引脚信号取反RETI 中断返回 6 4 2定时器的应用举例 例6 4某一应用系统需要对INT0引脚的正脉冲测试其脉冲宽度 分析 可以设置定时器 计数器0为定时方式 工作在模式1 且置位GATE位为1 将外部需测试的脉冲从INT0引脚输入 设机器周期为1 s 6 4 2定时器的应用举例 C语言程序 计算脉宽和处理程序略 includesbitP3 2 P3 2 unsignedint test TMOD 0 x09 TL0 0 x00 TH0 0 x00 while P3 2 TR0 1 6 4 2定时器的应用举例 while P3 2 while P3 2 TR0 0 return TH0 256 TL0 汇编语言程序 INT00 MOVTMOD 09HMOVTL0 00H 设置计数初值MOVTH0 00HLOP1 JBP3 2 LOP1 等待P3 2变低电平 6 4 2定时器的应用举例 SETBTR0 启动T0计数LOP2 JNBP3 2 LOP2 等待P3 2变成高电平LOP3 JBP3 2 LOP3 等待P3 2变成低电平CLRTR0 停止T0计数MOVA TL0 计数器TL0中的内容送AMOVB TH0 计数器TH0中的内容送B本题也可以使用定时器 计数器2工作在捕获方式下进行脉宽测试 注意 T2脉宽测试必须在定时器未溢出的情况下才有效 6 4 2定时器的应用举例 例6 5某应用系统要求通过P1 0和P1 1口分别输出脉冲周期为200 s和400 s的方波 fosc 6MHz 分析 需要两个定时器 可以选择使用定时器 计数器0 设置为定时模式 工作模式3 分成两个8位的定时器 1 计算定时初值 t 256 X 12 fosc初值分别为0CEH和9CH 6 4 2定时器的应用举例 2 C语言程序 includesbitP1 0 P1 0 进行位定义sbitP1 1 P1 1 voidmain TMOD 0 x03 设置T0定时 工作在模式3TL0 0 xce 设置TL0计数初值 产生200 s方波TH0 0 x9c 设置TH0计数初值 产生400 s方波ET0 1 设置定时器0中断允许位 6 4 2定时器的应用举例 ET1 1 设置定时器 计数 器1中断允许位EA 1 设置总中断允许位TR0 1 启动定时器T0TR1 1 启动定时器T1while 1 等待溢出 voidtime0L int void interrupt1 T0中断服务程序TL0 0 xce 定时器重赋初值P1 0 P1 0 产生方波 6 4 2定时器的应用举例 voidtime0H int void interrupt3 T1中断服务程序TH0 0 x9c 定时器重赋初值P1 1 P1 1 产生方波 3 汇编语言程序 主程序 ORG0000HLJMPMAIN 6 4 2定时器的应用举例 ORG000BHLJMPT0SORG001BHLJMPT1SMAIN MOVTMOD 03H 设置T0定时 模式3MOVTL0 0CEH 设置TL0计数初值 产生200 s方波MOVTH0 9CH 设置TH0计数初值 产生400 s方波 6 4 2定时器的应用举例 SETBEA 设置总中断允许位SETBET0 允许定时器0中断SETBET1 允许定时器1中断SETBTR0 启动定时器T0SETBTR1 启动定时器T1T0中断服务程序 T0S MOVTL0 0CEH 重新设置定时初值CPLP1 0 P1 0口的输出取反RETI 6 4 2定时器的应用举例 T1中断服务程序 T1S MOVTH0 9CH 重新设置定时初值CPLP1 1 对P1 0口输出信号取反RETI 中断返回例6 6利用定时器精确定时1s控制LED以秒为单位闪烁 已知fosc 12MHz 分析 定时器 计数器在定时方式下 各个模式最大定时时间分别为 6 4 2定时器应用举例 定时器0 8192 0 12 fosc 8 192ms定时器1 65536 0 12 fosc 65 536ms定时器2 256 0 12 fosc 0 256ms选择模式1 定时时间为10ms 当10ms的定时时间到 TF1 1 连续定时100次 调用亮灯函数 再连续定时100次 调用灭灯函数 循环工作 即达到1s闪烁1次的效果 1 初值计算 256 X 12 fosc 10ms初值X 55536 0D8F0H 6 4 2定时器应用举例 2 程序设计 C语言程序 includesbitLED P1 0 unsignedchari voidmain LED 0 定义灯的初始状态为灭TMOD 0 x10 设置定时器1工作在模式1TL1 0 xf0 TH1 0 xd8 设置定时初值TR1 1 启动定时器1 6 4 2定时器应用举例 ET1 1 允许定时器1中断EA 1 while 1 voidtimer1 int interrupt3 TL1 0 xf0 定时器重装初值TH1 0 xd8 if i 100 LED LED i 0 6 4 2定时器应用举例 汇编语言程序 选择硬件定时10ms 设置一计数单元 存放计数值100 循环定时100次 ORG0000HLJMPMAINORG001BHLJMPTIMERMAIN MOVR0 100 存放计数值100MOVTMOD 10H 6 4 2定时器应用举例 MOVTL1 0F0HMOVTH1 0D8HSETBET1SETBEASETBTR1CLRP1 0SJMP TIMER MOVTL1 0F0HMOVTH1 0D8HDJNZR0 NEXTMOVR0 100CPLP1 0NEXT RETIEND 6 4 2定时器应用举例 例6 7用定时器 计数器2从P1 0产生一个5000Hz的方波 假设晶振频率fosc为12MHz 分析 当T2MOD的T2OE 1 T2CON的C T2 0时 T2工作于时钟输出方式 T2溢出信号自动触发T2 P1 0 引脚状态翻转从P1 0引脚输出频率可调 精度高的方波信号 6 4 2定时器应用举例 溢出后 RCAP2H和RCAP2L寄存器内容装入TH2和TL2寄存器中 重新计数 以便获得准确的溢出信号 输出信号频率为 fosc 4 65536 RCAP2H RCAP2L 方波频率为5000Hz 计数初值为65536 600 64936 C语言程序 includesfr16RCAP2 0 xca 特殊寄存器定义 6 4 2定时器应用举例 sfr16T2 0 xcc sfrT2MOD 0 xc9 voidmain RCAP2 64936 T2 64936 T2MOD 2 TR2 1 while 1 汇编语言程序 ORG0000HLJMPMAIN 6 4 2定时器应用举例 MAIN MOVT2MOD 02H T2工作在可编程时钟输出方式SETBTR2 T2定时且启动T2工作MOVRCAP2L 0A8H 送计数初值的低8位MOVRCAP2H 0FDH 送计数初值的高8位MOVTL2 0A8HMOVTH2 0FDHHERE SJMPHERE 等待溢出END 本章小结本章首先总体简单介绍了MCS 51单片机定时器 计数器的结构 工作原理和相关的寄存器 然后重点研究了MCS 51增强型单片机定时器 计数器T0 T1 T2的不同工作方式的结构和工作原理 最后应用实例 讨论了各个定时器 计数器不同工作方式的应用 本章小结 续 MCS 51单片机定时器 计数器是单片机中非常重要 应用非常多的部件 一个从事单片机应用开发的人员 单片机是否用得灵活 是否能够充分发挥单片机的功能与作用 与定时器 计数器是否掌握应用得好关系密切
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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