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

发布者:sokaku最新更新时间:2023-10-26 来源: elecfans关键字:微控制器  信号频率 手机看文章 扫描二维码
随时随地手机看文章

频率定义为每秒的周期数。它也可以定义为总时间“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 / TM1M0C / TM1M2
定时器 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


关键字:微控制器  信号频率 引用地址:使用8051微控制器测量任何信号频率的方式

上一篇:8051单片机是几位机_8051单片机共有几个中断源
下一篇:基于C8051F020单片机与RTL8019AS的音频峰值采集终端设计

推荐阅读最新更新时间:2024-11-17 21:55

80c51单片机的基本配置有哪些 80c51单片机各个引脚及功能
  80c51单片机的基本配置有哪些   80C51单片机的基本配置包括:   CPU:80C51单片机的CPU由一个8位的ALU(算术逻辑单元)、一个8位的累加器、一个8位的B寄存器、一个16位的程序计数器和一个8位的状态寄存器组成。   存储器:80C51单片机的存储器包括程序存储器(ROM)、数据存储器(RAM)和特殊功能寄存器(SFR)。   时钟源:80C51单片机支持多种时钟源,包括外部晶体、外部时钟信号、内部振荡器等。   中断系统:80C51单片机支持多种中断源和中断优先级设置,可以灵活处理各种外部事件。   IO端口:80C51单片机的IO端口由多个可编程的输入输出引脚组成,可以连接各种外部设备。   通信接口:
[单片机]
通过软件操作来实现单片机的地址重叠
在80C31为控制核心的数据采集系统中,往往需要较大的外部RAM来存放数据。大家知道80C31是8位CPU,地址总线宽度为16位,其外部RAM,ROM可直接寻址范围各为64k字节(0000H——FFFFH)。在80C31的工作过程中,ROM和外部RAM的地址是重叠使用的,但使用不同的控制信号和指令,而扩展I/O口和外部RAM是统一编址的,它占用外部RAM的地址单元,并且使用外部RAM相同的读写控制信号和读/写指令。 在数据采集系统中,往往需要大容量的外部RAM,显示器、A/D转换、打印机等外部设备也必须进行I/O扩展。笔者在设计智能型声级计的过程中,要求80C31扩展外部RAM为64kB字节,扩展I/O口采用82C55
[单片机]
通过软件操作来实现<font color='red'>单片机</font>的地址重叠
基于单片机信号发生器仿真设计
这是我做的信号发生器课设,用proteus画的原理图,keil4.1编写的C语言。 仿真原理图如下 单片机源程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int #define DAdata P0 //DA数据端口 sbit DA_S1=P2^0; sbit DA_S2=P2^1; sbit key =P3^2; uchar wavecount; //波形波码计数标志 uchar THtemp,TLtemp;//传递频率的中间变量 uchar judge=1; //用于方波函数,作标志 uchar waveform;
[单片机]
基于<font color='red'>单片机</font>的<font color='red'>信号</font>发生器仿真设计
基于单片机DS1302电子时钟闹钟控制系统
一、系统方案 本设计采用STC89C52作为主控制器,DS1302计时,液晶1602显示,按键设置时分秒,闹钟,实际时间走时达到闹钟时间,蜂鸣器报警提醒。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化: /*************定时器0初始化程序***************/ void init_time0() { EA = 1; //开总中断 TMOD = 0X12; //定时器0、工作方式1 TH1= 0X3C; TL1 = 0XB0; //50ms ET1 = 1; //开定时器0中断 TR1 = 1; //允许定时器0定时 TH0=0x00; //重载值 TL0=0x00; //初始化
[单片机]
基于<font color='red'>单片机</font>DS1302电子时钟闹钟控制系统
一种基于单片机和PSD的数制化电源
    摘 要 根据单片机80C196KC和现场可编程系统器件PSD302的特性,设计了一种数制化电源装置,提供了程序框图,并对其进行了谐波分析。它是一种高性能的通用装置,可替代传统的PWM逆变电源。     关键词 电力电子器件 电源 单片机 现场可编程系统器件         随着现代工业的发展和社会进步,人类对电能种类的需求不断增加,如要求电能有多种制式:直流稳压电源、交流工频电源、中高频感应加热电源、高压电解电源等,而且需求的数量也在不断增加。要提供这些制式的电能,就要有许多不同的电源变换装置。此外,为满足各种电气设备对电源的特殊要求,也需要一些装置对电源进行变换和控制。这些装置品种繁多,其原理
[工业控制]
基于MC32P21单片机的移动电源设计
移动电源是一种集供电和充电功能于一体的便携式充电器,可以给手机等数码设备随时随地充电或待机供电。一般由锂电芯或者干电池作为储电单元。区别于产品内部配置的电池,也叫外挂电池。一般配备多种电源转接头, 通常具有大容量、多用途、体积小、寿命长和安全可靠等特点,是可随时随地为智能手机、平板电脑、数码相机、MP3、MP4等多种数码产品供电或待机充电的功能产品。 移动电源可以通过USB电缆线使用在任何符合USB国际标准的设备,其具有短路、过充过放、恒流恒压等保护措施,还有高性能电源管理技术。 移动电源方案,根据是否可以编程,分为硬件移动电源和软件移动电源两种技术路线。硬件移动电源方案主要存在的问题是:1.发热严重,采用非同步整流模式,温度高后
[电源管理]
基于MC32P21<font color='red'>单片机</font>的移动电源设计
单片机的汇编延时程序
50ms延时;一般书上的程序 DEL: MOV R7,#200 LO: MOV R6,#123 NOP L1: DJNZ R6,L1 DJNZ R7,L0 RET 但是这个程序实际上延时50.001ms,多了一个机器周期, 其实这个问题是不可能由一个二重循环实现精确延时的,必须采用三重循环 我的程序; DEL: MOV R5,#29 L0: MOV R7,#22 L1: MOV R6,#6 L2: DJNZ R6,L2 DJNZ R7,L1 DJNZ R5,L0 RET 此时精确延时50ms,并且三个寄存器里的数值是可以变化的,这里要讨论的是,为什么不能,或说不容易用一个
[单片机]
51单片机的输入/输出口(IO口)
MCS-51单片机有4个双向的8位I/O口的P0~P3口为三态双向口 P1,P2,P3口为准双向口(用作输入时,口线被拉成高电平,所以称为准双向口)。 P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。 P0口还可以用来输出外部存储器的第8位地址。 由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE。 P1口是专门供用户使用的I/O口,用户可以利用它作为I/O口线使用。P1口是准双向口。每一位均由锁存器(SFR)、输出驱动器和输入缓冲器组成。 它们的上拉电阻实际上不是线性电阻,而是由场效应管构成 ,每位锁存器均由D触发器组成。 每个I/O口都有两种读入方法:读锁存
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved