课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)

2024-07-11
| 39页
| 22人阅读
| 2人下载
普通

内容正文:

课题六 简易频率计 定时器/计数器介绍 输出1kHz方波 定时1s 简易频率计 软件延时是通过不断执行指令,利用每条指令需要一定的机器周期消耗时间。 如循环:for(i=250;i>0;i--); 软件定时的特点: 1.编程较为简单,时间计算较为麻烦; 2.更重要的问题是,软件定时执行的过程中,CPU在干嘛?—— 占用了宝贵的CPU资源。 软件延时 A:外加硬件电路实现,例如555时基电路。 缺点:增加成本、电路板尺寸等。 B:利用51单片机自带的定时计数器功能。 51单片机集成了2个16位的定时/计数器,可做定时用,可做计数用,可各自独立也可串联使用。 硬件定时的特点: 定时或计数由单独的电路完成,时间到或计数满,向CPU申请中断。 申请之前,CPU可以做其他事,节省了宝贵的资源。 硬件定时 51单片机的定时计数器 定时器/计数器的实质是一个能够自动加1的电路。 定时功能:是对机器周期计数,机器周期固定,时间就确定。 每一个机器周期结束时定时器自动加1,所以定时器相当于在对机器周期计数,如果机器周期是1us,那么定时器就是每1us加1。 定时器记满(16位/8位/13位几种方式),向CPU申请中断。 51单片机的定时计数器 计数功能:是对外部脉冲计数,脉冲不确定,如流水线上的零件。 只要单片机外部引脚T0或T1有从1到0的负跳变,相应的计数器就自动加1。即计数器实际上是对对应引脚的负跳变在计数,由于受振荡频率的限制,计数的最高频率只能达到振荡周期的1/24。 计数记满(和定时一样,有16/13/8位几种方式),向CPU申请中断。 定时器/计数器简介 T0和T1的工作方式和功能选择由特殊功能寄存器TMOD 的设置确定;定时时间由定时器的计数寄存器(TH0、TL0或TH1、TL1)的值确定;启动标志和定时中断标志在TCON高四位;定时中断允许由中断允许寄存器IE中的相应位确定。 计数器值置于16位的计数寄存器中。向计数寄存器赋值就是给定时器置初始计数数值,直接在表达式中引用计数寄存器就是读取定时器的值。 模式控制寄存器TMOD,是对定时器0和定时器1的计数方式和计数器控制方式进行设置的寄存器,低4位用于T0,高4位用于T1 。 GATE:门控位。为1由外部中断控制定时器工作。 :定时/计数模式选择位。 =0为定时模式; 当 =1为计数模式。 定时模式是对单片机内部的机器周期计数;计数模块是对外单片机引脚上的脉冲计数。 定时器/计数器的控制寄存器TMOD 定时器/计数器的控制寄存器TMOD M1M0 工作方式 功能描述 0 0 方式0 13位计数器(213=8192) 0 1 方式1 16位计数器(216=65536) 1 0 方式2 8位自动重装计数初值计数器 1 1 方式3 仅适用于T0,分为2个独立的8位计数器 方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。最大计数值为:M=213=8192。 定时/计数器的工作方式 0 定时/计数器的工作方式 0 在方式0中,T0计数器的初始值设置命令为: TH0=(8192-t×f/12)/32; TL0=(8192-t×f/12)%32; 表达式中,如果为定时方式,则t为需要定时的时间,单位为μs,f为单片机的工作频率,单位为MHz;如果为计数方式,则t为需要计数的次数,f=12。 在程序编译时,编译程序自动将表达式进行计算,换算成对应的数值并赋值给TH和TL,与手动计算出对应的数值给TH、TL赋值一样。 定时/计数器的工作方式 1 在方式1中,由THx的高8位和TLx的低8位构成全16位定时器/计数器,其最大计数值为: M=216=65536 定时/计数器的工作方式 1 在方式1中,T0计数器的初始值设置命令为: TH0=(65536-t×f/12)/256; TL0=(65536-t×f/12)%256; T1与T0的初始化命令类似。 式中t和f的说明与方式0相同。在实际中这种方式应用较多。 方式2为自动重装初值的8位计数方式。 工作方式2特别适合于用作较精确的脉冲信号发生器。 计数个数与计数初值的关系为: 定时/计数器的工作方式 2 定时/计数器的工作方式2 在方式2中,T0计数器的初始值设置命令为: TH0=TL0=256-t×f/12 T1与T0的初始化命令类似。 式中t和f的说明与方式0相同。在实际中这种方式应用较多。 方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。 工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。 定时/计数器的工作方式3 TMOD=工作模式; //设置定时器的工作模式 THx=初始值; // 按工作方式写定时器计数的初值 TLx =初始值; ETx=1; //允许定时器x产生中断 EA =1; //开中断 TRx=1; //开始计数 定时器的初始化 方式0:13位定时/计数方式,≤8192机器周期 THx=(8192-t*f/12)/32; TLx=(8192-t*f/12)%32; 方式1:16位定时/计数方式,≤65536机器周期 THx=(65536-t*f/12)/256; TLx=(65536-t*f/12)%256; 方式2:自动重装初值的8位定时/计数方式,≤256机 器周期 THx= TLx =256-t*f/12; 方式3:两个8位定时/计数方式, ≤256机器周期 定时器的工作模式及定时器初值 定时中断服务程序格式 void 中断服务函数名( ) interrupt 中断号 { THx=高八位; //重装初值,方式2由硬件自 TLx=低八位; //动重装,不需要这两条命令 中断服务程序;//每中断一次就执行一次 } 输出1000Hz的方波 从P1.0输出1000Hz的方波,实际上就是要求从P1.0输出周期为1ms的方波。为了简化程序,将输出的方波的占空比设定为50%,则高电平和低电平的时间各为1ms的一半,即各为500μs。 单片机中实现500μs的定时,每次定时时间到了的时候,将P1.0的电平改变就可以了。一个引脚的电平的改变,使用取反指令就可以完成,具体的指令如“P10=~P10;” 输出1000Hz的方波 延时500μs P1.0电平取反 P1.0电平取反 重装定时器初值 定时时间到了 中断结束 采用指令延迟程序框图 中断服务程序的流程图 输出1000Hz的方波 TMOD=0x01; //定时器0定时模式方式1 TH0=(65536-500*110592/120000)/256; //高8位初值 TL0=(65536-500*110592/120000)%256; //低8位初值 ET0=1; //允许定时器0产生中断 EA=1; //开中断 TR0=1; //开始计数 void 中断服务函数名( ) interrupt 1 { TH0=(65536-500*110592/120000)/256; //高8位初值 TL0=(65536-500*110592/120000)%256; //低8位初值 CLK=~CLK; // 每次取反,产生方波 } 输出频率为 f 的方波 定时时间:t=1e6/f/2 TMOD=0x01; //定时器0定时模式方式1 TH0=(65536-11059200/f/2/12)/256; //高8位初值 TL0=(65536-11059200/f/2/12)%256; //低8位初值 ET0=1; //允许定时器0产生中断 EA=1; //开中断 TR0=1; //开始计数 void 中断服务函数名( ) interrupt 中断号 { TH0=(65536-11059200/f/2/12)/256; //高8位初值 TL0=(65536-11059200/f/2/12)%256; //低8位初值 CLK=~CLK; // 每次取反,产生方波 } 拓展示例: 钢琴频率输出 音符 频率(HZ) 简谱码(T值)   低1 DO 262 63628 #1 DO# 277 63731 低2 RE 294 63835 #2 RE# 311 63928 低 3 M 330 64021 低 4 FA 349 64103 # 4 FA# 370 64185 低 5 SO 392 64260 # 5 SO# 415 64331 低 6 LA 440 64400   # 6 466 64463 低 7 SI 494 64524 每秒闪烁一次的LED 分析: 为了实现控制LED每秒闪烁一次地显示,由于定时时间是由单片机内部的机器周期来得到,不需要外部的具体的硬件电路,而只需要有驱动LED的电路即可,所以,对应的硬件电路如右图所示。 AT89S51 P2.0 +Vcc 1、在前面的课题中,是怎么样实现每秒闪烁一次的LED控制?请参照右图,写出具体的控制程序。 2、能否用定时中断的方式实现LED闪烁的时间?如能,该怎么样实现? 思 考 AT89S51 P2.0 +Vcc 回 顾 延时指定时间 P2.0电平取反 采用指令延迟程序框图 P2.0电平取反 重装定时器初值 定时时间到了 中断结束 中断服务程序的流程图 定时中断服务程序格式 void 中断服务函数名( ) interrupt 中断号 { THx=高八位; //重装初值,模式2由硬件自动重 TLx=低八位; //装,不需要这两条命令 中断服务程序;//每中断一次就执行一次 } 回 顾 程序的设计思路: #include <AT89X51.h> sbit CLK=P2^0; //声明引脚 void main(viod) { 设置定时器的初始化命令; while( 1) { ; } //什么也不做,也可以是其他程序 } void 中断服务函数名( ) interrupt 中断号 { 重装定时器的初始值; CLK=~ CLK; // P2.0取反 } 回 顾 例中的要求是从单片机的P2.0脚上输出方波,控制LED每秒闪烁一次。按LED的点亮时间和熄灭时间相同进行处理,需要进行0.5s的定时。具体处理是,每过0.5s,将LED的状态取反就可以实现目标了。或者说,与本课题中的任务一类似,只不过是频率变得很低了。 在单片机中,由于定时器最多只能计数65536次,所以在晶振频率较高时,不能够一次产生1s的中断。如晶振为12MHz时,机器周期为1μs,则大定时时间为65536μs,远小于1s。而本例中所采用的晶振为11.0592MHz,当然也不够定时0.5s。 分析 为了完成0.5s的定时,一般来说,采用方案有两种。 第一种是采用硬件定时的基础上,增加一个存储单元,用软件的方式进行计数,延长了定时的时间长度。 第二种方案是也是采用一个定时器进行硬件定时,然后采用硬件计数的方式进行延长定时时间。 分析 #include<Reg51.h> 声明引脚; 声明变量; void main(viod) { 设置定时器的初始化; while( 1) {;} //什么也不做,也可以是其他程序 } void 中断服务函数名( ) interrupt 中断号 { 重装定时器的初始值; 计数变量加一; if (次数到了) { 取反,输出方波; 计数变量=0; } } 1.采用硬件定时+软件计数的示例程序 #include<Reg51.h> 声明引脚; 声明变量; void main(viod) { 设置定时器的初始化; while( 1) {;} //什么也不做,也可以是其他程序 } void 中断服务函数名( ) interrupt 3 { 重装定时器的初始值; 在P3.4上输出一个方波; } void 中断服务函数名( ) interrupt 1 { 重装定时器的初始值; 将P2.0取反;; } 2.采用硬件定时+硬件计数的示例程序 思考与练习 1、用定时器定时的改写彩灯控制程序。 2、用定时中断实现数字钟。 任务目标 具体目标是:利用AT89S51单片机的T0、T1的定时/计数功能,完成对输入的信号的频率进行测量,测量的结果通过8位动态数码管显示出来。这里要求实现对0~200KHz的信号频率进行准确测量,测量误差不超过±1Hz。 简易频率计 频率计电路原理图 程序设计分析 因实验电路晶振fOSC=11.0592MHz,所以T1的初值的装入语句如下: TH1=(65536-5*110592/12)/256; TL1=(65536-5*110592/12)%256; 每定时1s钟时间到了,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理,送到数码管显示出来。 由本课题中的任务二中可知,T1工作在定时状态下,最大定时时间约为65ms,达不到1s的定时,所以采用定时50ms,共定时20次,即可完成1s的定时功能。 一、 定时1s 二、输入的脉冲计数 作为定时器T0,为了得到1s内的频率值,需要在定时1s之前将其初始值赋为0。同时,由于T0的最大计数值为65536,小于要求计数的频率的最大值,所以,在1s内,完全有可能产生溢出,对此,采用与定时1s的类似的方法,使用软件来记录计数器有几次溢出。 程序设计分析 频率计算 频率为原有数据的1/10 取出个位送显示数组 处理完毕? 没有 处理结束 频率计算及数据转换程序框图 思考与练习 1、设置单片机的定时器,使单片机输出指定的频率,完成一首乐曲的播放。 2、针对本课题进行适当修改,分别实现下列要求: ⑴延长闸门时间,实现较低频率的测量。 ⑵在硬件电路上外加分频器,测量更高频率。 ⑶使用测量周期的方法,测量较低频率的信号。 ⑷综合使用测量周期和频率的方法,实现高精度的频率测量。 文本 TF1 TR1 TF0 TR0 GATE C/T M1 M0 GATE C/T M1 M0 TH0 TL0 8位 5位 溢出 TCON TMOD D0 D7 1 & ≥1 1 0 T0引脚 INT0引脚 0 0 机器周期 D7 D0 申请 中断 1 文本 TF1 TR1 TF0 TR0 GATE C/T M1 M0 GATE C/T M1 M0 1 & ≥1 1 0 T0引脚 INT0引脚 1 0 机器周期 TH0 TL0 8位 8位 溢出 TCON TMOD D0 D7 D7 D0 申请 中断 文本 TF1 TR1 TF0 TR0 GATE C/T M1 M0 GATE C/T M1 M0 1 & ≥1 1 0 T0引脚 INT0引脚 1 0 机器周期 TH0 TL0 8位 溢出 TCON TMOD D0 D7 D7 D0 申请 中断 � ����� � � � TF1� TR1� TF0� TR0� � GATE� C/T� M1� M0� GATE� C/T� M1� M0� ��������� � � � � � � � � 1� &� ��1� � 1� 0� T0����� INT0����� 1� 1� ��������� TH0� TL0� � 8��� ����� TCON� TMOD� D0� � D7� D0� ���� ����� � 8��� � � � ���� ����� ����� $$

资源预览图

课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)
1
课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)
2
课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)
3
课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)
4
课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)
5
课题六 简易频率计(课件)-《单片机技术与应用》同步教学(电子工业版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。