怎么用8051 单片机做频率计数器

小微 科技怎么用8051 单片机做频率计数器已关闭评论102字数 2283阅读模式
摘要频率定义为每一一秒的周期数,也可以定义为一个周期经过的时间“T”的倒数。在这个项目中,我们将计算进入 8051 单片机端口 3.5 的脉冲数,并将其显示在 1602 液晶显示器上。...

频率定义为每一秒的周期数,也能够定义为一个周期经由的时间“T”的倒数。在这个项目中,咱们将计算进入 8051 单片机端口 3.5 的脉冲数,并将其显示在 1602 液晶显示器上。即在8051的3.5端口丈量信号的频率。这里咱们使用AT89S52 单片机,采样555 IC在非稳态模式下发生脉冲数进行演示。

所需组件:

8051单片机(AT89S52)文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

1602液晶显示器文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

频率源(555 定时器)文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

电位器文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

电路原理图:

555定时器的方波脉冲产生器文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

使用 8051 的 TIMER 丈量频率:

8051单片机 是一个8位单片机,拥有128字节的片上RAM、4K字节的片上ROM、两个定时器、一个全双工串行口以及四个8位端口。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

AT89S52要将端口 3.5 配置为计数器,需要将 TMOD 存放器值设置为 0x51。下图是TMOD 存放器。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

TRx:即TR0/TR1为TCON存放器中定时器运行节制位,至关于定时器的开关,置1开始计时,置0(清0)休止计时;文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

INTx:即INT0/INT1,外部中止引脚。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

GATE :当 GATE=1时,定时/计数器仅在 INTx 引脚为高电平且 TRx 节制引脚高电平时启用。当 GATE=0时,只要 TRx为高电平,定时器就会被启用。文章源自微观生活(93wg.com)微观生活-https://93wg.com/4415.html

C/T(Count/Timer)定时器/计数器切换开关:C/T=0为定时模式,C/T=1为计数模式;

M1以及M0表示定时/计数器操作模式。

当 TMOD = 0x51 时,timer1 用作计数器,并以模式 1(16 位)运行。

关于8051定时/计数器方面的内容这里不开展,有兴致的请自行学习相关内容。

555定时器作为频率源:

频率源应发生方波,最大振幅限制在5V,由于 8051 单片机的端口不能处理大于 5V 的电压。

8051定时/计数器在模式1时,提供两个16位定时/计数器,计数规模0-65535,计量数寄存在TH1 (高8位)以及 TL1(低8位) 存放器。因为 TH1 以及 TL1 存放器的存储限制,TH1 以及 TL1 至多可以保留 65536 个计数。

在这个8051 频率计项目中,使用555定时器在非稳态模式下发生可变频率方波。555 IC 发生的信号频率可以通过调剂电位器来扭转。

在这个项目中,Timer1 对进入 8051单片机端口 3.5 的脉冲数进行计数,计数值将分别存储在 TH1 以及 TL1 存放器中。要组合 TH1 以及 TL1 存放器的值,使用下列公式。

脉冲数 = TH1 * + TL1

在采取12 MHz晶振的情况下,单片机最大计数速度为0.5 MHz即500 kHz。

此项目只计算在 50 毫秒内产生的“脉冲数”,信号的频率又被定义为每一秒的经由的周期数。要将其转换为频率,转换如下:

f = 脉冲数* 20

代码说明:

对于1602 LCD 与 8051 单片机的接口,咱们须定义 1602 lcd 连接到 8051 单片机的引脚:

sbit rs=P2^7; //1602 lcd 的 RS 脚接 P2.7,
sbit rw=P2^6; //1602 lcd 的 RW 脚接 P2.6,
sbit en=P2^5; //1602 lcd 的 E 脚接 P2.5,
数据引脚连接到 8051 单片机的端口 0。

接下来定义一些在程序中使用的函数:

//delay延时函数用于创立指定的时间延迟,
void delay;
//Cmdwrt 函数用于向 1602 lcd 显示器发送命令
void cmdwrt;
//datawrt函数用于向 1602 lcd 显示器发送数据。
void datawrt;

1602 LCD初始化代码:清屏、显示光标、强制光标到第 1 行开头等:

for
{
cmdwrt ;
delay ;
}

8051定时/计数器初始化代码中:

//将timer1配置为计数器,并将操作模式设置为模式1,
// 用于计数脉冲数。
TMOD=0x51;
//Timer0 配置为定时器,操作模式设置为模式 1,用于发生延时。
TL1=0;
//TH1 以及 TL1 值设置为 0,以确保从 0 开始计数。
TH1=0;

定时器运行 50 ms。TR1=1 用于启动定时器,TR1=0 用于在 50 ms后休止定时器:

TR1=1;
delay;
TR1=0;

将 TH1 以及 TL1 存放器中的计数值组合起来,然后乘以 20得到 1 秒内的总周期数:

Pulses = TH1* + TL1;
Pulses = pulses*20;

将频率值转换为单字节,以便于在 1602 lcd 显示器上显示:

d1 = pulses % 10;
s1 = pulses % 100;
s2 = pulses % 1000;
s3 = pulses % 10000;
s4 = pulses % 100000;
d2 = / 10;
d3 = / 100;
d4 = / 1000;
d5 = / 10000;
d6 = / 100000;

把频率值的各个数字被转换为 ASCII格式,并显示在 1602显示器上:

If
datawrt ;
if
datawrt;
if
datawrt;
if
datawrt;
if
datawrt;
datawrt;

向 1602 lcd 显示器发送命令:

该命令通过8051 单片机的端口 0发送到1602 lcd。RS 为低电平以进行命令写入。RW 为低电平以进行写操作。在使能 引脚上施加高到低脉冲(降落沿)以执行命令写入操作。

void cmdwrt
{
P0=x;
rs=0;
rw=0;
en=1;
delay;
en=0;
}

将数据发送到 1602 lcd:

通过数据8051 单片机的端口 0发送到1602lcd。RS 为高电平以进行命令写入。RW 为低电平以进行写操作。在使能(E)引脚上施加高到低脉冲(降落沿)以执行数据写入操作。

void datawrt
{
P0=y;
rs=1;
rw=0;
en=1;
delay;
en=0;
}

这就是咱们怎么使用 8051 单片机丈量任何信号的频率。

以上就是微观生活(93wg.com)关于“怎么用8051 单片机做频率计数器”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/4415.html