频率计的ppt教程:
频率计的ppt 仿真 程序等所有资料下载:
6位数显频率计数器.rar
(248.34 KB)
(下载次数: 60, 2016-9-27 12:06 上传)
下载积分: 黑币 -5
一、MCS-51单片机定时器/计数器组成:
定时器/计数器0(T0):16位的加计数器
定时器/计数器1(T1):16位的加计数器
二、定时器/计数器的功能
对外部输入信号的计数功能。定时器/计数器0(T0)的外来脉冲输入端为P3.4;定时器/计数器1(T1)的外来脉冲输入端为P3.5。
定时功能。定时器/计数器的定时功能也是通过计数实现的,它的计数脉冲是由单片机的片内振荡器输出经12分频后产生的信号,即为对机器周期计数。
在计数工作方式下,计数器的计数值范围是:
1~8192(2的13方)
当为定时工作方式时,定时时间的计算公式为:
( 8192 -计数初值)×晶振周期×12
或 ( 8192 -计数初值)×机器周期
其时间单位与晶振周期或机器周期相同。
如果单片机的晶振选为6.000MHz,则最小定时时间为:
[8192—(8192—1)]×1/6×10-6×12=2×10-6(s)=2(us)
最长定时时间为:
(8192—0)×1/6×10-6×12=16384×10-6(s)=16384(us)。
在工作方式1下,计数器的计数值范围是:
1~65536(2的16方)
当为定时工作方式1时,定时时间的计算公式为:
(65536—计数初值)× 晶振周期×12
或 (65536—计数初值)× 机器周期
其时间单位与晶振周期或机器周期相同。
如果单片机的晶振选为6.000MHz,则最小定时时间为:
[65536—(65536—1)]×1/6×10-6×12=2×10-6(s)=2(us)
最长定时时间为:
(65536—0)×1/6×10-6×12=131072×10-6(s)=131072(us)
方式2与方式0、1的区别:
工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。
工作方式2就具有自动重装载功能,即自动加载计数初值,所以也有的文献称之为自动重加载工作方式。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。
方式2在串口通讯时,常用作波特率发生器。
2.怎样编制计数程序?
首先必须对定时计数器进行初始化,然后再开启定时或计数。简单的总结一下,定时计数器的初始化包括以下内容。
(1)确定工作方式——对TMOD赋值;
如:任务中的MOV TMOD,#06H指令,设定T0为计数器工作方式。
(2)预置定时计数器中计数的初值——直接写入TH和TL;
如:任务中的MOV TH0,#00H 两条指令,设定计数初值。
MOV TL0,#00H
(3)根据需要开放定时器/计数器的中断——对IE位赋值;
(4)启动定时器/计数器;
如:任务中的SETB TR0 指令
初值的计算方法
X=M-计数值
M是定时器的最大计数值。视工作方式不同而不同。
工作方式0: 13位定时/计数方式,因此,最多可以计到2的13次方,也就是8192次。
工作方式1: 16位定时/计数方式,因此,最多可以计到2的16次方,也就是65536次。
工作方式2和工作方式3:都是8位的定时/计数方式,因此,最多可以计到2的8次方,也说是256次。
预置值计算: 用最大计数量减去需要的计数次数即可。
通过上面的任务,我们掌握了计数程序的编制方法,下面我们再看看定时程序怎样编制。
首先我们看一下下面的程序段。
MOV TMOD,#01H
MOV TL0,#00H
MOV TH0,#4CH
SETB TR0
以上程序是任务一中的定时程序段,它的初始化过程和计数方式类似。
实例二:利用方式1定时
题目:用定时器T1,使用工作方式1,在单片机的P1.0输出一个周期为2分钟、占空比为1:1的方波信号。
解:周期为2分钟,占空比为1:1的方波信号,只需要利用T1产生定时,每隔1分将P1.0取反即可。
由于定时器定时时间有限,设定T1的定时为50ms,软件计数1200次,可以实现1分钟定时。
编程步骤:
1、计算TMOD的值
由于:GATE=0;M1、M0=0、1;C/T=0;
所以:(TMOD)=10H
2、计算初值(单片机的振荡频率为12MHZ)
所需要的机器周期数:
n=(50000us/1us)=50000
计数器的初始值:X=65536-50000=15536
所以:(TH0)=3CH;(TL0)=0B0H
频率计工作原理:
实现的方法:利用T0计数器对从T0输入的脉冲进行计数,利用T1工作于定时。每定时达到1秒钟,取出计数器的值进行显示。由于每秒钟按键的按下次数不超过255次,所以只需要显示TL0的内容即可。
步骤:
由于定时器的最大定时时间不能够达到1秒钟,我们设定T1定时100mS,每10次取一次计数值。
设定TMOD,TH1,TL1的内容,(fosc)=6MHz
所以:(TMOD)=51H
(TH1)=3CH
(TL1)=0B0H
本章要求:
了解中断源、中断的功能、中断系统的组成与功能、中断优先权管理、中断响应条件、中断响应过程、中断嵌套等基本概念;
掌握MCS-51单片机的5个中断源;掌握外部中断的触发方式,与的触发方式有边沿方式与电平方式两种;
掌握定时器/计数器的计数脉冲来源,计数脉冲来自内部振荡频率的12分频后的脉冲则称为定时器方式,计数脉冲来自外部引脚则称为计数器方式;
掌握中断请求标志的清除方式,边沿方式下的与、T0、T1的中断请求标志是自动被清除的,而串行口的中断是用户通过软件清除的,电平触发的与还需要硬件的支持才能被清除;
掌握T0与T1的工作方式,以及各种方式的应用;
掌握TCON、SCON、IE、IP、TMOD等特殊功能寄存器的功能与应用;
掌握MCS-51单片机对各中断源的响应条件与过程。
源程序:
代码:
- #include <AT89X52.H>
- unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
- unsigned char dispbuf[8]={0,0,0,0,0,0,10,10};
- unsigned char temp[8];
- unsigned char dispcount;
- unsigned char T0count;
- unsigned char timecount;
- bit flag;
- unsigned long x;
-
- void main(void)
- {
- unsigned char i;
-
- TMOD=0x15;
- TH0=0;
- TL0=0;
- TH1=(65536-5000)/256;
- TL1=(65536-5000)%256;
- TR1=1;
- TR0=1;
- ET0=1;
- ET1=1;
- EA=1;
-
- while(1)
- {
- if(flag==1)
- {
- flag=0;
- x=T0count*65536+TH0*256+TL0;
- for(i=0;i<8;i++)
- {
- temp[i]=0;
- }
- i=0;
- while(x/10)
- {
- temp[i]=x%10;
- x=x/10;
- i++;
- }
- temp[i]=x;
- for(i=0;i<6;i++)
- {
- dispbuf[i]=temp[i];
- }
- timecount=0;
- T0count=0;
- TH0=0;
- TL0=0;
- TR0=1;
- }
- }
- }
-
- void t0(void) interrupt 1 using 0
- {
- T0count++;
- }
-
- void t1(void) interrupt 3 using 0
- {
- TH1=(65536-5000)/256;
- TL1=(65536-5000)%256;
- timecount++;
- if(timecount==200)
- {
- TR0=0;
- timecount=0;
- flag=1;
- }
- P2=0xff;
- P0=dispcode[dispbuf[dispcount]];
- P2=dispbit[dispcount];
- dispcount++;
- if(dispcount==8)
- {
- dispcount=0;
- }
- }