0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用8051微控制器测量任何信号频率的方式

科技观察员 来源:circuitdigest 作者:沙希·库马尔 2022-11-17 17:50 次阅读

频率定义为每秒的周期数。它也可以定义为总时间“T”的倒数。在本项目中,我们将计算进入8051微控制器端口3.5的脉冲数,并将其显示在16 * 2 LCD显示屏上。所以基本上我们测量了8051端口3.5的信号频率。这里我们使用了AT89S528051芯片,在非稳定模式下使用555 IC来生成采样脉冲进行演示。

所需组件:

8051 微控制器 (AT89S52)

16*2液晶显示屏

频率源(555 定时器

电位计

连接线

电路图:

poYBAGN2A5iAO2I8AAGVrS21tOE088.png

poYBAGN2A-KAfzu6AAAhVuCJoI8290.png

使用 8051 定时器测量频率:

8051微控制器是一款8位微控制器,具有128字节的片上RAM,4K字节的片上ROM,两个定时器,一个串行端口和四个8位端口。8052微控制器是微控制器的扩展。要将端口 3.5 配置为计数器,TMOD 寄存器值设置为 0x51。下图显示了TMOD寄存器。

C / T M1 M0 C / T M1 M2
定时器 1 定时器 0

GATE- 设置 GATE时,仅当 INTx 引脚为高电平且 TRx 控制引脚设置为 TRx 控制引脚时,才会使能定时器或计数器。当 GATE 被清除时,只要 TRx 控制位设置为 U,定时器就会启用。

C / T– 当C / T= 0时,它充当计时器。当 C/T = 1 时,它充当计数器。

M1 和M0表示工作模式。

对于 TMOD = 0x51,定时器1充当计数器,并在模式1(16位)下运行。

16 * 2 LCD用于以赫兹(Hz)显示信号的频率。如果您不熟悉 16x2 LCD,请在此处查看有关 16x2 LCD 引脚及其命令的更多信息。另请查看如何将液晶屏与8051连接。

555定时器作为频率源:
频率源应产生方波,最大幅度限制为5V,因为8051微控制器的端口无法处理大于5V的电压。它可以测量的最大频率为655.35 KHz,因为TH1和TL1寄存器的内存限制(每个8位)。在 100 毫秒内,TH1 和 TL1 最多可容纳 65535 个计数。因此,可以测量的最大频率为 65535 * 10 = 655.35 KHz。

在这个 8051 频率计项目中,我在非稳定模式下使用 555 定时器来产生可变频率方波。555 IC产生的信号频率可以通过调整电位计来改变,如本项目结束时给出的视频所示。

在本项目中,Timer1 (T1) 对进入 8051 微控制器端口 3.5 的脉冲数进行 100 毫秒的计数。计数值将分别存储在 TH1 和 TL1 寄存器中。为了组合TH1和TL1寄存器的值,使用以下公式。

Pulses = TH1 * (0x100) + TL1
现在,“脉冲”将在 100 毫秒内具有周期数。但信号的频率定义为每秒的周期数。要将其转换为频率,请使用以下公式。

Pulses = Pulses * 10
工作和代码解释:
本项目结束时给出了该频率计的完整 C 程序。代码被分成有意义的小块,并在下面解释。

对于与8051微控制器的16 * 2 LCD接口,我们必须定义16 * 2 LCD连接到8051微控制器的引脚。16*2 LCD 的 RS 引脚连接到 P2.7,16*2 LCD 的 RW 引脚连接到 P2.6,16*2 LCD 的 E 引脚连接到 P2.5。数据引脚连接到 8051 微控制器的端口 0。

sbit rs=P2^7;
sbit rw=P2^6;
sbit en=P2^5;
接下来,我们必须定义一些在程序中使用的函数。延迟功能用于创建指定的时间延迟。Cmdwrt功能用于向16 * 2 LCD显示器发送命令。Datawrt功能用于将数据发送到16 * 2 LCD显示器。

void delay(unsigned int) ;
void cmdwrt(unsigned char);
void datawrt(unsigned char);
在代码的这一部分中,我们将命令发送到 16*2 lcd。清除显示、递增光标、强制光标以 1 开头等命令圣在指定的时间延迟后,线被一一发送到16 * 2液晶显示器。

for(i=0;i<5;i++) 
{
cmdwrt (cmd[i]);
delay (1);
}
在代码的这一部分中,定时器1配置为计数器,操作模式设置为模式1。

定时器0配置为定时器,操作模式设置为模式1。定时器1用于计算脉冲数,定时器0用于产生延时。TH1 和 TL1 值设置为 0,以确保计数从 0 开始。

TMOD=0x51;
TL1=0;
TH1=0;
在代码的这一部分中,计时器运行 100 毫秒。使用延迟功能生成 100 毫秒的延迟。TR1=1 用于启动计时器,TR1=0 用于在 100 毫秒后停止计时器。

TR1=1;
delay(100);
TR1=0;
在代码的这一部分中,将 TH1 和 TL1 寄存器中存在的计数值组合在一起,然后乘以 10 以获得 1 秒内的总周期数。

Pulses = TH1*(0x100) + TL1;
Pulses = pulses*10;
在代码的这一部分中,频率值被转换为单个字节,以便于在16 * 2 LCD显示器上显示。

d1 = pulses % 10;
s1 = pulses % 100;
s2 = pulses % 1000;
s3 = pulses % 10000;
s4 = pulses % 100000;
d2 = (s1-d1) / 10;
d3 = (s2-s1) / 100;
d4 = (s3-s2) / 1000;
d5 = (s4-s3) / 10000;
d6 = (pulses-s4) / 100000;
在代码的这一部分中,频率值的各个数字被转换为ASCII格式,并显示在16 * 2 LCD显示屏上。

If (pulses>=100000)
datawrt ( 0x30 + d6);
if(pulses>=10000)
datawrt( 0x30 + d5);
if(pulses>=1000)
datawrt( 0x30 + d4);
if(pulses>=100)
datawrt( 0x30 + d3);
if(pulses>=10)
datawrt( 0x30 + d2);
datawrt( 0x30 + d1);
在代码的这一部分中,我们将命令发送到 16*2 LCD 显示器。该命令将复制到 8051 微控制器的端口 0。对于命令写入,RS 设置为低电平。对于写入操作,RW 设置为低电平。在使能 (E) 引脚上施加高到低脉冲以启动命令写入操作。

void cmdwrt (unsigned char x)
{
P0=x;
rs=0;
rw=0;
en=1;
delay(1);
en=0;
}
在代码的这一部分中,我们将数据发送到16 * 2 LCD显示器。数据将复制到 8051 微控制器的端口 0。RS 设置为高电平以进行命令写入。对于写入操作,RW 设置为低电平。在使能(E)引脚上施加高到低脉冲以启动数据写入操作。

void datawrt (unsigned char y)
{
P0=y;
rs=1;
rw=0;
en=1;
delay(1);
en=0;
}

pYYBAGN2A-SARL3zAAEGU8ofNNY166.jpg

这就是我们使用8051微控制器测量任何信号频率的方式。

#include



sbit rs=P2^7;

sbit rw=P2^6;

sbit en=P2^5;



void delay(unsigned int) ;

void cmdwrt(unsigned char);

void datawrt(unsigned char);



void main (void)

{

unsigned long int pulses;

unsigned char i;

unsigned int s1,s2,s3,s4;

unsigned char d1,d2,d3,d4,d5,d6;

unsigned char cmd[]={0x38,0x01,0x06,0x0c,0x82};

unsigned char msg[]={"Freq: "};

unsigned char msg2[]={" Hz"};



for(i=0;i<5;i++) 

{

cmdwrt(cmd[i]);

delay(1);

}



while(1)

{

TMOD=0x51;

TL1=0;

TH1=0;



TR1=1;



delay(100);



TR1=0;



pulses= TH1*256 + TL1;

pulses=pulses*10;



d1=pulses%10;

s1=pulses%100;

s2=pulses%1000;

s3=pulses%10000;

s4=pulses%100000;



d2=(s1-d1)/10;

d3=(s2-s1)/100;

d4=(s3-s2)/1000;

d5=(s4-s3)/10000;

d6=(pulses-s4)/100000;



cmdwrt(0x01);

delay(1);



for(i=0;msg[i]!='';i++)

datawrt(msg[i]);



if(pulses>=100000)

datawrt(0x30+d6);

if(pulses>=10000)

datawrt(0x30+d5);

if(pulses>=1000)

datawrt(0x30+d4);

if(pulses>=100)

datawrt(0x30+d3);

if(pulses>=10)

datawrt(0x30+d2);

datawrt(0x30+d1);



for(i=0;msg2[i]!='';i++)

datawrt(msg2[i]);

delay(1000);

}

}





void cmdwrt (unsigned char x)

{

P0=x;

rs=0;

rw=0;

en=1;

delay(1);

en=0;

}



void datawrt (unsigned char y)

{

P0=y;

rs=1;

rw=0;

en=1;

delay(1);

en=0;

}



void delay(unsigned int z)

{

unsigned int p;

for(p=0;p

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7471

    浏览量

    150960
  • 8051
    +关注

    关注

    3

    文章

    309

    浏览量

    51444
  • 信号频率
    +关注

    关注

    0

    文章

    21

    浏览量

    1938
收藏 人收藏

    评论

    相关推荐

    8051微控制器架构的简要说明

    此前已经介绍了关于8051微控制器基础知识和引脚图说明等相关知识,而在本文中,将重点介绍8051微控制器的硬件方面内容,如 I/O 端口、RAM、ROM、定时
    发表于 08-23 14:45 2736次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>架构的简要说明

    8051微控制器的基础知识

    8051微控制器是嵌入式系统、消费电子、汽车等各个领域中最流行和最常用的微控制器之一,技术上称为Intel MCS-51架构。8051微控制器
    发表于 09-12 17:32 3273次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>的基础知识

    8051微控制器指令集和寻址模式

    任何微控制器编写程序包括以特定顺序向微控制器发出命令,这些命令必须按特定顺序执行才能执行特定任务。微控制器的命令称为微控制器指令集。
    发表于 10-11 17:07 5476次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>指令集和寻址模式

    #硬声创作季 微控制器原理:8051微控制器的技术发展

    微控制器mcu8051
    Mr_haohao
    发布于 :2022年11月02日 14:47:16

    基于XCCV3004HQ240芯片的8051微控制器接口设计

    接口芯片主要由以下模块组成:地址解码逻辑、总线接口状态机、中断逻辑、用户可定义寄存组、数据输出多路选择。其内部结构框图如图2所示。 3.1 8051微控制器接口
    发表于 05-24 05:00

    讨论AVR,ARM,8051和PIC微控制器之间的区别

    8051和PIC微控制器之间的区别。**AVR,ARM,8051和PIC微控制器之间的区别**微控制器之间的差异主要包括什么是
    发表于 11-23 07:24

    用新型微控制器降低8051系统的功耗

    用新型微控制器降低8051系统的功耗
    发表于 05-04 13:37 18次下载

    MAX6901 RTC与8051微控制器的接口

    要:该应用笔记演示了MAX6901与8051微控制器的连接方式,并提供了基本的接口程序例程。本文采用的微控制器是DS2250,软件用C语言编写。 MAX6901引脚配置
    发表于 04-21 11:12 742次阅读
    MAX6901 RTC与<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>的接口

    DS1302 RTC与8051微控制器的接口

    摘要:本应用笔记说明了DS1302 RTC通过3线接口与8051微控制器的连接方式,设计实例包括电路原理图和C语言接口程序。 DS1302引脚配置
    发表于 04-21 11:14 2297次阅读
    DS1302 RTC与<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>的接口

    如何用微控制器测量电容

    微控制器广泛用于测量各种物理变量。测量中涉及的技术对于单个变量类型可能有所不同,并且主要基于要测量的变量的特性。本教程介绍了一些使用微控制器
    的头像 发表于 12-06 14:54 2896次阅读
    如何用<b class='flag-5'>微控制器</b><b class='flag-5'>测量</b>电容

    如何使用微控制器测量电容

    微控制器已不是新兴事物,对于微控制器,大家或许都有所了解。在往期文章中,小编对微控制器做过一定介绍。为进一步增进大家对微控制器的了解,本文将对微控制
    的头像 发表于 06-27 16:04 3435次阅读
    如何使用<b class='flag-5'>微控制器</b><b class='flag-5'>测量</b>电容

    C8051F330和C8051F331微控制器的数据手册

    本文档的主要内容详细介绍的是C8051F330和C8051F331微控制器的数据手册免费下载。
    发表于 03-03 17:29 15次下载
    C<b class='flag-5'>8051</b>F330和C<b class='flag-5'>8051</b>F331<b class='flag-5'>微控制器</b>的数据手册

    8051微控制器引脚说明与基本电路

    此前已经介绍过8051微控制器的基础知识,包括它的历史、特性、封装和一些实际应用。在本文中,小编将将继续介绍关于8051微控制器引脚图、引脚说明以及其他一些细节内容,包括
    发表于 08-23 15:53 8018次阅读
    <b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>引脚说明与基本电路

    如何使用触摸传感8051微控制器控制LED灯

    在这个项目中,我们将触摸传感8051 微控制器 AT89S52 连接。如果您是 8051 微控制器的新手,那么您可以从LED 闪烁开始
    的头像 发表于 09-07 15:13 3047次阅读
    如何使用触摸传感<b class='flag-5'>器</b>和<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b><b class='flag-5'>控制</b>LED灯

    将基于8051微控制器连接到SCI端口

    本应用笔记介绍如何配置高速微控制器或超高速闪存微控制器的UART,以便与支持SCI的设备通信。它首先简要讨论了SCI和UART模块之间的差异,并以一个实际示例结束,说明如何配置基于8051的达拉斯半导体
    的头像 发表于 06-13 15:48 719次阅读
    将基于<b class='flag-5'>8051</b>的<b class='flag-5'>微控制器</b>连接到SCI端口