当前课程知识点:单片机原理及应用 > 6 中断与定时系统 > 6.8 定时器举例 > 定时器举例
同学
你好
前面我们详细的介绍了一下51单片机的
定时计数器的相关的计数
以及涉及的寄存器和编程的思想
今天我们来通过一个
定时计数器的实际应用的例题
使同学们能够领悟到定时计数器应用
和编程的具体的方法
我们来看这样一道例题
请用单片机的P1.2引脚
输出一个方波信号
这个方波信号的周期为两毫秒
我们假设单片机的晶振的频率是12兆赫兹
我们看一看
如何来实现这个功能
该题的思路就是每隔一毫秒改变一次
P1.2引脚的输出状态
相当于用定时计数器T0
非门控方式1定时1毫秒
此时定时器计数器的初值我们就应该
设为FC18H
每次定时器定时时间1毫秒一到
我们就改变P1.2引脚的状态
然后再重新启动定时器
如此反复就可以实现从P1.2引脚
输出一个加1毫秒的
也就是2毫秒的一个方波
我们前面说过
对于定时器
我们可以采用查询的方式
也可以采用中断的方式来进行设计
我们首先看第一种方式
用查询的方式如何来设计该段程序
我们来具体的看一看查询方式的
程序的指令
首先我们看程序
第一个START MOV TMOD , #01H
通过这条指令就设定定时器的工作方式
让你把它设为这个是一个定时器
然后再通过MOV TL0 , #18H
MOV TH0 , # 0FCH
就给定时计数器赋初值
然后SETB TR0就是启动定时器
它启动开始定时了
下面这个指令L0:JBC TF0 , L1
这是一个判位转移指令
它会判断TF0这是定时器零的中断标志位
前面通过四条指令
已经把定时器启动了
它会定时1毫秒
当1毫秒时间到之后
定时器会自动的把TF0位置1
这个时候我们通过JBC判位指令
就可以通过查询的方式不断的
去判断一下TF0 到1了没
如果没有到1,它会顺序执行SJMP L0
这是一个无条件转移到L0处
继续判断用查询的方式来进行等待
不停地查询
一旦TF0为1,这就表示我这个定的时间
一毫秒到了
这个时候那么就会跳到L1处
L1是CPL P1.2 ,P1.2输出引脚取反
相当于是以前是零
那就变成1,以前P12是1就变成0
每隔一毫秒就取一个反
取完反之后那么再用两条MOV
一个是MOV TL0 , # 18H
一个是MOV TH0 ,#0FCH
重新的给定时器赋一个初值
然后再一个SJMP L0再跳到L0处
因为一旦你重新向定时计数器赋了初值之后
定时计数器会重新的来进行定时
通过这种查询的方式如何来控制定时器
反复的来进行定时的操作
好
这是第一种定时的方式
下面我们再来看第二种方式
中断的方式
中断的方式分成了主程序
和中断服务程序
具体的指令我们来看一下
首先ORG 0000H,这是一个伪指令
表示下面的指令
AJMP MAIN放到ROM的0000H
这个单元来存放
我们知道51单片机一上电复位
默认的情况下是首先执行单元0000H的指令
所以上电复位就执行AJMP MAIN指令
这是一个转移,跳到MAIN处
所以一上电复位情况下
我们的单片机会自动的跳到主程序MAIN 处
在主程序MAIN处
通过四条MOV指令完成对
定时计数器0的初始化的操作
就是设定工作方式
向定时计数器赋一个计数的初值
然后就是三个SETB
开定时计数器中断的总开关
然后SETB ET0开定时计数器零的
中断允许的分开关
SETB TR0就是启动定时计数器零
一旦启动之后
我们的定时计数器就会马上开始进行计时
紧接着就是一个L0 :SJMP L0
这下面是个原地跳转指令
比如说主程序到L0处就原地跳转了
这个时候实际上我们的定时器已经启动
在定时
一旦定的一毫秒时间到了之后
定时器会自动在内部向我们的单片机
发出一个定时到的一个中断申请
同时把标志位IF0置1
这个时候由于我们在主程序中已经允许了
单片机去响应定时计数器零的中断
所以一旦定的时间一毫秒到
单片机会暂停正在执行的L0的原地跳的指令
转而去执行定时计数器零的中断服务程序
默认情况下CPU就会从ROM的000BH
这个单元开始去找定时计数器零的中断服务程序
而这个地方你看我们程序中在000BH处
我们放的是一个无条件转移指令AJMP L1
它会跳到真正的定时计数器零的
中断服务程序L1处去执行
中断服务程序
我们在L1处首先是一个CPL P1.2取反指令
就是一旦定时时间到
在中断服务程序中就把P1.2引脚取反
然后在两条MOV指令MOV TL0 , #18H
MOV TH0 , # 0FCH
就是向定时计数器0重新赋一个初值
使它重新的开始定时
这个时候再有一个RETI,就是中断服务程序结束
注意一下RETI会通过硬件的方式自动的
把定时计数器零的标志位清零
然后就返回到主程序的L0处
继续去执行主程序的原地跳的指令
当然在执行这个指令时
我们的定时计数器零由于已经重新赋初值
它会继续的进行一毫秒的定时的操作
以上就是第二种方式中断的方式
如何来设计该段程序
好的
以上就是我们今天课程的全部内容
今天我们主要通过一个例题使同学们能够
体会到如何利用定时器来进行相关的
程序的编写和操作
定时计数器是51单片机
一个非常重要的功能
请同学们下来之后仔细的领会
定时计数器的编程的思想
好的
今天的课就到这里
同学们再见
-1.1 单片机的名称
--单片机的名称
-1.2 单片机的相关概念
--单片机的相关概念
-1.3 单片机的设计语言及软件
-1.4 单片机的发展
--单片机的发展
-1.5单片机的应用
--单片机的应用
-1.6 第一单元作业
-2.1 单片机的结构框图
--单片机的结构框图
-2.2 80C51内部结构
-2.3 信号引脚
--信号引脚
-2.4 内部数据存储器RAM
-2.5 特殊功能寄存器
--特殊功能寄存器
-2.6 堆栈
--堆栈
-2.7 内部程序存储器ROM
-2.8 存储器的结构特点
--存储器的结构特点
-2.9 并行输入输出接口电路
-2.10 并口功能与时序
--并口功能与时序
-2.11 工作方式
--工作方式
-2.12 最小应用系统
-- 最小应用系统
-2.13 第二单元作业
-3.1 指令格式
--指令格式
-3.2 立即寻址与直接寻址
-3.3 寄存器寻址与寄存器间接寻址
-3.4 变址间接寻址与位寻址
-3.5 内部RAM传送指令
-3.6 外部RAM传送指令
-3.7 ROM传送指令
--ROM传送指令
-3.8 交换指令
--交换指令
-3.9 堆栈操作指令
--堆栈操作指令
-3.10 传送类指令习题讲解
-3.11 算术运算类指令特点
-3.12 加法指令
--加法指令
-3.13 加法习题、减法和乘除指令
-3.14 逻辑运算指令
--逻辑运算指令
-3.15 布尔变量操作指令
--布尔变量操作指令
-3.16 无条件转移指令
--无条件转移指令
-3.17 条件转移指令
--条件转移指令
-3.18 循环转移指令
--循环转移指令
-3.19 子程序相关指令
--子程序相关指令
-3.20 并口访问指令及指令小结
-3.21 第三单元作业
-4.1 汇编程序约定
--汇编程序约定
-4.2 宏指令
--宏指令
-4.3 汇编控制指令
--汇编控制指令
-4.4 汇编语言程序设计步骤
-4.5 顺序程序举例
-- 顺序程序举例
-4.6 单重分支结构
--单重分支结构
-4.7 多重分支结构
--多重分支结构
-4.8 单重循环结构
--单重循环结构
-4.9 计数控制循环程序
--计数控制循环程序
-4.10 特征控制循环程序
-- 特征控制循环程序
-4.11 多重循环程序
--多重循环程序
-4.12 子程序的概念
--子程序的概念
-4.13 子程序设计注意事项
-4.14 子程序举例
--子程序举例
-4.15 第四单元作业
-5.1 系统扩展
--系统扩展
-5.2 51单片机扩展方法
-5.3 存储器单元位数扩充方法
-5.4 存储器容量单元扩充方法
-5.5 译码线选法
--译码线选法
-5.6 程序存储器的类型
--程序存储器的类型
-5.7 程序存储器的扩展
--程序存储器的扩展
-5.8 数据存储器的扩展
--数据存储器的扩展
-5.9 存储器综合扩展
--存储器综合扩展
-5.10 单片机存储器系统的特点
-- 单片机存储器系统的特点
-5.11 第五单元作业
-6.1 中断技术
--中断技术
-6.2 中断优先级及中断系统内部结构
-6.3 中断控制寄存器及中断响应过程
-6.4 中断请求的撤消
--中断请求的撤消
-6.5 外部中断举例
--外部中断举例
-6.6 定时器/计数器
--定时器/计数器
-6.7 定时计数器工作方式及程序编写
-6.8 定时器举例
--定时器举例
-6.9 第六单元作业
-7.1 并行接口
-- 并行接口
-7.2 并口举例
--并口举例
-7.3 并口扩展芯片
--并口扩展芯片
-7.4 8155连接方式及编程
-7.5 键盘接口技术
--键盘接口技术
-7.6 按键处理程序及举例
-7.7 键盘扫描子程序
-- 键盘扫描子程序
-7.8 显示接口技术
--显示接口技术
-7.9 多位字符静态显示
--多位字符静态显示
-7.10 多位字符动态显示
--多位字符动态显示
-7.11 第七单元作业
-8.1 流水灯控制系统设计
--html
-8.2 数码管显示系统设计
--html
-8.3 按键控制系统设计
--html
-8.4 中断控制系统设计
--html
-8.5 定时计数器系统设计
--html
-8.6 串口通信系统设计
--html
-8.7 汉字显示系统设计
--html
-8.8 单片机烧录方法
--单片机烧录方法
-8.9 第八章作业-作业