课题6 简易频率计 下载本文

内容发布更新时间 : 2024/5/3 22:15:23星期一 下面是文章的全部内容请认真阅读。

课题六 简易频率计

知识点:

1.熟悉定时器/计数器的工作原理;

2.掌握定时器/计数器中断有关寄存器的设置;

3.掌握定T0、T1在不同方式下定时和计数的初始值计算; 4.理解中断服务程序的执行过程;

5.掌握单片机实现简易频率计的原理和方法。 6. 技能点:

1.会正确按照格式编写中断服务程序; 2.会编写时器/计数器中断的初始化程序。 3.会编写时器/计数器中断的服务程序。

一、任务目标

本课题的任务是用单片机实现简易频率计,电路连接如图6-1所示。通过简易频率计的实现,学会编写单片机中断服务程序的编写,以及学会定时中断的应用。需要说明一点,在图6-1中,演示用单片作频率计,为了减少信号源,电路作了两个处理,一是电路CPU采用AT89S52,二是编程时利用AT89S52的定时/计数器2。这样,编程既能实现从P1.0产生1000Hz的方波,双将其连接到P3.4(T0)作为被测信号的输入。电路中左边的一根连接线的作用就是将P1.0连接到P3.4。具体编程和实现作为练习留给读者思考。

图6-1 简易频率计

二、任务分析

数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器。根据电信号的频率的定义,就是在1秒钟内信号变化的周期数。在一个单片机系统中,为了实现频率的测量,就是要对外部信号进行计数,每到1秒时,将计数所得的数值送到显示器上。也就是说,单片机要做两件事,一是要进行1秒钟的定时,二是要测量外部信号的周期数。而单片机的定时器/计数器恰好能做到这一点。为了容易理解定时器/计数器作这两个方面的应

用,本任务将分为以下三个小任务来讲解。

任务一 输出1000Hz的方波

1.任务目标

使用AT89S51单片机,利用定时中断实现从P1.0输出1000Hz的方波。 2.任务分析

从P1.0输出1000Hz的方波,实际上就是要求从P1.0输出周期为1ms的方波。为了简化程序,将输出的方波的占空比设定为50%,则高电平和低电平的时间各为1ms的一半,即各为500μs。

要完成输出1000Hz的方波,即在P1.0输出500μs交替变化的高低电平,就是要在单片机中实现定时500μS的定时,在每次定时时间到了的时候,将P1.0的电平改变就可以了。而一个引脚的电平的改变,使用取反指令就可以完成。

使用同样的方式,如果改变定时时间,则可以改变输出的数字信号的周期(频率)。单片机能够输出不同频率的方波,既可以作为其他电路的信号源,也可以直接驱动音响,发出对应的声音,作为报警器、简易音乐等信号的提供者。

3.程序设计

#include

#define uchar unsigned char

sbit CLK=P1^0;//定义输出引脚

void main() {

TMOD=0X01; //设置定时器0为模式1; TH0=(65536-500*110592/120000)/256; //高八位的初始值 TL0=(65536-500*110592/120000)%6; //低八位的初始值 ET0=1; //允许定时器0产生中断 EA=1; //开中断 TR0=1; //开始计数

while(1) {

; //主程序,什么也不做,也可以是其他程序 } }

void time0() interrupt 1 {

TH0=(65536-500*110592/120000)/256;//高八位的初始值 TL0=(65536-500*110592/120000)%6;//低八位的初始值

CLK=~CLK; /*每次中断为500us,一个周期为1000us,产生的频率就为1000Hz*/ }

4.相关知识

⑴ 定时器/计数器的工作原理

在51系列单片机中有两个可编程的定时/计数器,分别叫T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式。T1还可以作为串行接口的波特率发生器。定时/计数器实质上就是一个加1计数器, T0是由TL0(8AH)和TH0(8CH)组成,T1

是TL1(8BH)和TH1(8DH)组成。这两个计数器的计数工作是由定时/计数器的控制寄存器TMOD的设置来控制。TCON是定时/计数器的控制寄存器,用于控制T0、T1的启动、停止和设置溢出标志。当计数溢出(计数器计数到所有位全为“1”时,再来一个计数脉冲,使计数各位全部回到零)时,使定时中断允许寄存器TCON的TF0或TF1位置1,向CPU发出中断请求,在定时/计数器中断允许的情况下,引起定时中断。当发生溢出时,如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示计数值已计满。

当定时/计数器对具有固定时间间隔的内部机器周期进行计数时,它是定时器,能间隔一段时间(可通过软件设置)调用定时中断服务程序;当它对外部输入脉冲进行计数时,它是计数器,作为计数器,最高能计数的外部频率为晶振的1/24。

⑵定时器/计数器的控制寄存器TMOD

与外部中断控制一样,定时/计数器的工作也是由两个特殊功能寄存器控制,这两个特殊功能寄存器是TMOD和TCON。

模式控制寄存器TMOD,是对定时器0和定时器1的计数方式和计数器控制方式进行设置的寄存器,低4位用于T0,高4位用于T1。TMOD的八位功能如下所示:

TMOD

内部地址89H GATE CT M1 M0 GATE CT M1 M0

└─────定时器1 ──┘ └─────定时器0 ──┘

GATE :定时器动作开关控制位,也称门控位。当GATE=1 时,INT0或INT1 引脚为高电平,同时单片机内部的定时器中断控制寄存器TCON中的 TR0 或 TR1 控制位为1时,计时/计数器 0 或计时/计数器1 才会工作。若GATE=0时,只要将TR0或TR1控制位设为1,就可以启动计时/计数器0或计时/计数器 1工作。

CT :定时/计数器模式选择位。CT=1时,设置成为计数器方式,定时/计数器的计数脉冲输入来自外部引脚 T0(P3.4)或 T1(P3.5) 输入的外部脉冲。CT=0时,设置为定时器方式,定时/计数器的计数脉冲输入来自单片机内部系统时钟提供的工作脉冲(系统晶振输出脉冲经12分频),计数值乘以机器周期就是定时的时间。

M1、M0:定时工作模式选择位。定时/计数器有4种工作模式,由M1M0进行设置。其中,00:模式0;01:模式1;10:模式2;11:模式3。

须要注意的是TMOD不能位寻址,只能是整个字节进行设置, 如程序中TMOD=0X01;语句就是对TMOD进行整体设置。CPU复位时TMOD所有位清0。

⑶定时器/计数器的工作方式

模式0:工作于模式0的定时/计数器是一个13位的定时/计数器。其最大计数值为:13

M=2=8192,THx的高八位和TLx的低五位构成13位。对于不同的计数要求,T0、T1计数器的初始值设置命令为

13

THx=(2-t×f/12)/32=(8192-t×f/12)/32;

13

TLx=(2-t×f/12)2=(8192-t×f/12)2;

表达式中,如果为定时方式,则t为需要定时的时间,单位为μS,f为单片机的工作频率,单位为MHz;如果为计数方式,则t为需要计数的次数,f=12。

模式1:在模式1中,由THx的高八位和TLx的低八位构成全16位定时/计数器,其最大计数值为:M=216=65536。其初始值设置命令为

16

THx=(2-t×f/12)/256=(65536-t×f/12)/256;

16

TLx=(2-t×f/12)/256=(65536-t×f/12)%6;

式中t和f的说明与模式0相同。在实际中这种模式应用较多。

模式2:模式2的定时/计数器为能自动重置初值连续工作的8位定时/计数器。最大能计数值为256。其初始值设置命令为

THx=256-t×f/12; TLx=256-t×f/12;