资讯详情

如何用8051 单片机做频率计数器

频率定义为每秒的周期数,也可以定义为周期经过的时间T”的倒数。我们将在这个项目中计算 8051 单片机端口 3.5 脉冲数,并显示在 1602 在液晶显示器上。即在8051的3.5端口测量信号的频率。我们在这里使用AT89S52 单片机,采样555 IC脉冲数在非稳态模式下演示。

所需组件:

8051单片机(AT89S52)

1602液晶显示器

频率源(555 定时器)

电位器

电路原理图:

555定时器方波脉冲发生器

使用 8051 的 TIMER 测量频率:

8051单片机 它是一个具有128字节的8位单片机RAM、4K字节的片上ROM、两个定时器,一个全双工串行口,四个八位端口。

AT89S52要将端口 3.5 配置为计数器需要 TMOD 寄存器值设置为 0x51。下图是TMOD 寄存器。

TRx:即TR0/TR1为TCON定时器在寄存器中的运行控制位置,相当于定时器的开关,设置1开始计时,设置0(清0)停止计时;

INTx:即INT0/INT1.外部中断引脚。

GATE :当 GATE=1点,定时/计数器只在 INTx 高电平引脚 TRx 平时控制引脚高电。 GATE=0时,只要 TRx为了高电平,定时器将被启用。

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

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

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

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

频率源为555定时器:

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

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

在这个8051 在频率计项目中,使用555定时器在非稳态模式下产生可变频率方波。 IC 调整电位器可以改变产生的信号频率。

在这个项目中,Timer1 (T1) 对进入 8051单片机端口 3.5 计数脉冲数,计数值分别存储 TH1 和 TL1 在寄存器中 TH1 和 TL1 以下公式用于寄存器的值。

脉冲数 = TH1 * (0x100) 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(unsigned int);  //Cmdwrt 函数用于向 1602 lcd 显示器发送命令 void cmdwrt(unsigned char);  //datawrt函数用于向 1602 lcd 发送数据的显示器。 void datawrt(unsigned char);

for(i=0;i<5;i  ) {     cmdwrt (cmd[i]);     delay (1); }

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

TR1=1; delay(50); TR1=0;

Pulses = TH1*(0x100)   TL1; Pulses = pulses*20;

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;

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);

该命令通过8051 单片机端口 0发送到1602 lcd。RS 命令写入低电平。RW 为低电平写作。 (E) 将高到低脉冲(下降边)应用于引脚的操作。

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

通过数据8051 单片机端口 0发送到1602lcd。RS 命令写入高电平。RW 为低电平写作。(E)将高到低脉冲(下降边)应用于引脚的操作。

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

这就是我们如何使用它 8051 单片机测量任何信号的频率。

标签: 5脚带开关电位器4k7

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台