单片机测量频率的设计与实现

发布者:乐呵的挑最新更新时间:2012-11-27 来源: 21IC 关键字:单片机  测量频率  MCS-51 手机看文章 扫描二维码
随时随地手机看文章

    对于周期波频率的测量方法很多,但大多是通过测量间接计算频率。本文介绍了用目前应用比较广泛的MCS-51系列单片机对周期波频率进行测量,并通过LED以数字形式直观地示出频率,实现测量的智能化,省去间接对频率计算的麻烦与错误。文章对其测量原理,设计和实现作了说明,介绍了主要程序,并进行了误差分析。

引言
    目前单片机广泛应用到国民经济建设和日常生话的许多领域,成为测控技术现代化不可缺少的重要工具。而本文适应这一发展趋势,把MCS-51系列单片机应用于对周期波频率的测量。并通过LED显示器自动显示出来,这对于频率的测量带来了极大的方便。

设计思想
  利用施密特触发器将边缘缓慢变化的周期性信号如正弦波、三角波或任意形状的模拟信号变换成同频率的矩形脉冲。通过MCS-51系列单片机内部的两个十六位定时,计数器测量某段时间内的外加脉冲数,经过处理并通过LED直接显示出所加信号的频率。单片机内部的T0用来定时,T1用来计数(下降沿触发)。当来一个计数脉冲则计数一次。在T0开始定时的同时,T1开始计数;T0定时1s时间到时,T1停止计数。方框图如图1所示。
 

硬件设计
  测量频率的硬件电路主要由计数脉冲形成电路和计数显示电路两大部分组成。计数脉冲形成电路用"555"定时器接成施密特触发器对外加的周期波进行变换,使之输出为矩形脉冲。电路如图2所示,计数显示电路如图3所示,主要包括:
    (1)由INTEL公司生产、晶振频率为12MHz的89S02单片机。通过软件编程使它内部的定时器T0定时,T1对外部的所加脉冲计数。然后把测量结果值通过P0口输出。89S02自带8K闪存,可以有90—100个现场测量数据,供回放调检。
    (2)4位七段共阴极的LED显示器。
    (3)由于采用的是4位共阴极的动态扫描方式显示,段代码由89S02的P0口提供,位选线则由89S02P2口的P2.0~P2.3提供。由于89S02的输入,输出口不能提供足够的灌电流,因此用G1~G4提供给LED足够的显示电流。
 
 

软件设计
用MCS-51单片机测量频率的程序主要包括:初始化程序,定时计数程序、LED显示程序。初始化程序略。定时计数主要程序:
MOV R2,#14H ;定时20个0.05秒
ANL TMOD,#0FH;设置T0定时T1计数
ORL TMOD,#51H
MOV TH0,#3AH;置定时器初值
MOV TL0,#B1H
MOV TH1,#00H;置计数器初值
MOV TL1,#00H
SETB TR0  ;启动定时
SETB TR1  ;启动计数
XX:JBC TF0,LOOP ;定时溢出则转移
SJMP XX  ;否则继续查询
LOOP:MOV TH0,#3AH ;置定时初值
MOV TL0,#B1H
DJNZ R2,XX  ;R2不等于0则转移
CLR TR1  ;停止计数
LED显示程序
MOV A,0H
MOV A,TL1  ;TL1值送累加器A
MOV B,#100  ;处理计数结果
DIV AB
MOV R0,B  ;余数放77H单元
MOV 77H,R0
MOV 7AH,A  ;商放7AH单元
MOV A,0H
MOV A,77H  ;77H送累加器A
MOV B,#10  ;处理计数结果
DIV AB
MOV R0,B  ;余数放78H单元
MOV 78H,R0
MOV 79H,A  ;商放79H单元
(测量数据存储程序略)
DPLOP1: MOV A,78H  ;取出时间的十位数送A
MOVC A,@A+DPTR  ;查表
MOV P0,A  ;送P0口
CLR P2.3  ;开个位显示
ACALL D1MS  ;延时0.1秒
SETB P2.3  ;关个位显示
MOV A,79H  ;取出时间的个位数送A
MOVC A,@A+DPTR  ;查表
MOV P0,A  ;送P0口
CLR P2.2  ;开十位显示
ACALL D1MS  ;延时0.1秒
SETB P2.2  ;关十位显示
MOV A,7AH  ;取出时间的百位数送A
MOVC A,@A+DPTR  ;查表
MOV P0,A  ;送P0口
CLR P2.1  ;开百位显示
ACALL D1MS  ;延时0.1秒
SETB P2.1  ;关百位显示
D1MS:MOV R5,#60
DJNZ R5,$
LJMP DPLOP1
RET
;段数码管各划的数字排列表
NUMTAB:DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
显示内容的对应代码
0 1 2 3 4 5 6 7 8 9;显示内容

测量范围
  在上述程序下的最大测量频率为255Hz。适当调整程序后的最大测量频率可为89S02主频的1/12,但在保证测量精度的前提下最大测量频率宜安排在主频的1/100以下。

误差分析
  上述程序的最大测量频率为255Hz,由于单片机在响应中断的时候有2—6个机器周期,按最大误差计算,6-2=4个机器周期,在1 s钟中断响应一共发生20次,最不利的累计误差时间为4×20=80微秒,因此在此程序下的最大误差为80/1000000=0.08/1000,这样的精度完全能满足现场检测的需要。

关键字:单片机  测量频率  MCS-51 引用地址:单片机测量频率的设计与实现

上一篇:用查询定时器0溢出标志位的方式实现LED灯闪
下一篇:基于51单片机双极型PWM 的软件实现

推荐阅读最新更新时间:2024-03-16 13:14

SAM4E单片机之旅——21、DMAC之USART回显
DMAC也可以和外设进行数据交互。之前我们曾使用PDC进行USART的数据回显,这次就使用DMAC完成相同的工作。而且由于DMAC有内部的缓冲区,实现起来更为简单。 一、 USART设置 因为之前已经做过相关的实验,这里不再重复。需要注意的是,要注意JP11的跳线,以选择正确的协议(RS232)。另外,如果使用硬件握手协议的话,注意设置PC端串口通信软件的线路控制信号。 另外,由于不再使用手动的缓冲区和PDC,所以不需要进行相关的设置。同时,也不用再使用USART的接收超时功能。 二、 DMAC设置 本次使用的通道依然为通道0: 1 #define DMAC_CH 0 启用DMAC: 1 // 代码略
[单片机]
SAM4E<font color='red'>单片机</font>之旅——21、DMAC之USART回显
基于51单片机智能锁原理图PCB+源程序
Altium Designer画的原理图和PCB图如下: 单片机源程序如下: #include string.h #include intrins.h #include STC12C5A60S2.h #include main.h #include delay.h #include lcd1602.h #include key.h #include IAPEEPROM.h sbit motor=P2^1; sbit led=P2^2; sbit buzz=P2^3; /**********************************************/ uchar code Start
[单片机]
基于51<font color='red'>单片机</font>智能锁原理图PCB+源程序
51单片机控制步进电机的程序
初学单片机:   #include reg52.h #include stdio.h code unsigned char tab =             {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  unsigned char code F_Rotation ={0x02,0x04,0x08,0x10}; unsigned char Dis_Shiwei;//定义十位 unsigned char Dis_Gewei; //定义个位 sbit key1=P3^0;//定义按键位置 sbit key2=P3^1; sbit key3=P3^2; sbit key4=
[单片机]
【STC单片机学习】第十七课:LCD1602显示器
1.17.1_2.LCD显示器相关背景1_2 1.17.1.1、LCD简介 (1)显示器 CRT显示器(大头电视) LCD液晶显示器 LED液晶显示器等等 (2)LCD(Liquid Crystal Display),液晶显示器,原理介绍 液晶显示器的工作原理是利用液晶的物理特性,在通电时导通,使液晶排列变得有秩序,使光线容易通过;不通电时,排列则变得混乱,阻止光线通过。 透光率! (3)LCD应用领域 平板电脑、笔记本电脑、手机屏幕、智能电视屏幕... (4)LED OLED(被认为下一代显示器) OLED:曲面屏,尤其三星 1.17.1.2、电子显示器的原理 (1)像素(分辨率): 像素(px):组成图像的最小单位
[单片机]
【STC<font color='red'>单片机</font>学习】第十七课:LCD1602显示器
关于51单片机使用printf串口调试
在51系列单片机上面使用串口的时候,有时候为了方便调试看一下输出结果,会用到printf函数输出到电脑终端,再用串口助手显示。但是单片机使用printf的时候有一点需要注意的地方。 1、首先添加头文件#include stdio.h ,因为printf在这个里面 2、然后配置串口,但是在串口初始化的时候需要吧 TI = 1;否则无法发送。因为printf函数会调用putchar函数,而putchar函数会判断 TI ,不为 1 则等待,相当于死机,为 1 则清零。 3、也可以使用接受中断,但是中断里面不要再有 TI = 1;这句,否则无法发送。 就这三点,然后就可以很方便的使用printf输出了。 但是方便归方便,这个只
[单片机]
关于51<font color='red'>单片机</font>使用printf串口调试
基于W77E58单片机的通用数据采集和通讯仪的设计
0 引言 单片机数据采集系统是指利用单片机对现场的各种信号,包括:非电量信号(如温度、压力、流量等),电信号(电压、电流),以及开关量,频率量信号等进行采集,存储,显示,传输的系统。目前,8位单片机由于其控制功能强大、品种多、价格低廉,正广泛应用于各个领域,特别是应用在数据采集,设备控制等方面,是单片机应用中的主流机种。本文采用台湾华邦公司生产的高性能Turbo-51系列单片机 W77E58,实现了一种基于单片机的通用数据采集和通讯仪的研制,具有较高的实用价值。为了使设计的数据采集仪应用方便,系统利用PTR2000无线数据传输模块与上位机进行通讯,以便能随时响应控制中心的PC机的数据上传命令,将采集到的数据实时上传给控制中心。
[单片机]
基于W77E58<font color='red'>单片机</font>的通用数据采集和通讯仪的设计
RTOS实现双核MCU消息通信
手机、电脑多核的CPU你可能经常看见,但多核的单片机相对来说就不那么常见了。随着需求的增加、技术的进步,单片机已不再局限于单核了,因此,近几年陆续出现了双核的单片机了。 你可能会好奇,双核单片机之间怎么通信?其实,通信的方式和方法有很多种。本文就给大家描述一下:使用FreeRTOS消息缓冲区,实现简单的非对称多处理(AMP)核心到核心通信,结合STM32H7(M4和M7) 双核处理器为例。 分享正文之前推荐一个嵌入式招聘信息的平台: 概述 实现STM32H7双核之间通信是FreeRTOS官方提供的一个方案,是基于FreeRTOS消息缓冲区,该消息缓冲区是无锁循环缓冲区,可以将大小不同的数据包从单个发送方传递到单个接收方。
[单片机]
RTOS实现双核<font color='red'>MCU</font>消息通信
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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