数字频率计单片机.docx

上传人:b****7 文档编号:8786359 上传时间:2023-02-01 格式:DOCX 页数:22 大小:116.30KB
下载 相关 举报
数字频率计单片机.docx_第1页
第1页 / 共22页
数字频率计单片机.docx_第2页
第2页 / 共22页
数字频率计单片机.docx_第3页
第3页 / 共22页
数字频率计单片机.docx_第4页
第4页 / 共22页
数字频率计单片机.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数字频率计单片机.docx

《数字频率计单片机.docx》由会员分享,可在线阅读,更多相关《数字频率计单片机.docx(22页珍藏版)》请在冰豆网上搜索。

数字频率计单片机.docx

数字频率计单片机

1前言

随着电子技术的不断发展,各种电子产品也层出不穷,种类繁多。

但是每一种产品开发时都应该少不了对信号的检测,而检测信号的频率也是其中重要指标之一。

本设计设计的目的就是要设计出一种高效,高精度,价格便宜符合广大群众要求的数字频率计。

本设计主要由波形整形电路,单片机电路,量程指示及数字显示电路三大部分组成。

测量对象可以是方波,正弦波,三角波。

本设计以单片机位核心,单片机可以快速,精确地测出信号的频率,并且可以用直观的数字显示出来。

用单片机制作的数字频率计所需要的硬件要求比较简单,维修方便。

利用单片机的软件部分可以实现测量不同频率范围,本设计的测量范围为1HZ-10KHZ,10KHZ-100KHZ,100KHZ-1MHZ三个量程。

该电路还可以通过编程达到自动调节测量信号的量程,该电路软家调试简单,实用性高,价格低廉!

本设计使用了美国ATMEL公司生产的AT89S51,AT89S51是低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。

它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中。

 

2总体方案设计

2.1方案比较

方案一:

本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描法把测出的数据送到数字显示电路显示。

其原理框图如图2.1所示:

图2.1方案一原理框图

方案二:

本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。

其原理框图如图2.2所示:

图2.2方案二原理框图

2.2方案论证

方案一:

本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测的正弦波或者三角波整形为方波。

利用单片机的计数器和定时器的功能对被测信号进行计数。

编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。

方案二:

本方案使用大量的数字器件,被测信号经放大整形电路变成计数器所要求的脉冲信号,其频率与被侧信号的频率相同。

同时时基电路提供标准时间基准信号,其高电平持续时间1s,当1s信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s信号结束闸门关闭,停止计数。

若在闸门时间1s内计数器计得的脉冲个数为N,则被测信号频率Fx=NHz。

逻辑控制电路的作用有两个:

一是产生锁存脉冲,是显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。

2.3方案选择

比较以上两种方案可以知道,方案一的核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测试能自动选择测试的量程。

与方案一相比较方案二则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。

如要测量高频的信号还需要加上分频电路,价格相对高了点。

基于上述比较,所以选择了方案一。

 

3单元模块电路设计

3.1信号放大电路

放大整形电路由晶体管3DG100与74LS00等组成,其中3DG100组成放大器将输入频率为Fx的周期信号如正弦波,三角波等进行放大。

与非门74LS00构成施密特触发器,它对放大器的输出信号进行整形,使之成为矩形脉冲。

其电路图如图3.1所示:

图3.1信号放大整形电路

利用ISIS仿真软件,上面的信号代表的是输入信号,下面信号代表的是输出信号。

当输入信号为正弦波时,可以得到如图3.2所示的方波输出信号。

图3.2信号整形后的波形

3.2单片机复位电路

复位是单片机的初始化操作,只要给RESET引脚加上2个机器周期以上的高电平信号,就可使MCS—51单片机复位。

复位的主要功能是把PC初始化为0000H,使MCS—51单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态,为摆脱死锁状态,也需按复位键重新启动。

单片机的复位电路通常采用上电复位和按钮复位的两种方式。

本设计采用图3.3上电复位电路.上电自动复位是通过外部复位电路的电容充电来实现的。

只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

图3.3单片机复位电路

除PC之外,复位操作还对其它寄存器有影响,其复位状态如表3.1所示:

表3.1复位时片内各寄存器的状态

寄存器

复位状态

寄存器

复位状态

PC

0000H

TMOD

00H

Acc

00H

TCON

00H

PSW

00H

TH0

00H

B

00H

TL0

00H

SP

07H

TH1

00H

DPTR

0000H

TL1

00H

P0-P3

FFH

SCON

00H

IP

XXX00000B

SBUF

XXXXXXXXB

IE

0XX00000B

PCON

0XXX0000B

由表可知,复位时,SP=07H;4个I/O端口P0-P3的引脚均为高电平,这在某些控制应用中,要考虑到引脚的高电平对外部控制电路的影响。

3.3时钟电路

时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。

因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。

单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

这两个引脚跨接石英振荡器和微调电容,就构成一个稳定的自激振荡器。

单片机内部时钟方式的振荡器电路如图3.4所示:

图3.4内部时钟电路

晶体的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。

但反过来运行速度快对储存器的速度也就越高。

本设计采用40PF的电容和24MHz的晶振。

本设计使用24MHz晶振的原因主要由本设计计数器对外部计数输入信号的要求。

当MCS-51内部的定时器/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1,因此定时器/计数器的输入脉冲的周期与机器周期一样,输入脉冲的频率为时钟振荡的1/12。

当采用12MHz频率的晶体时,计数速率为1MHz,输入脉冲的周期间隔为1us。

当定时器/计数器用作计数器时计数脉冲来自相应的外部输入引脚T0和T1。

当输入信号产生由1至0的负跳变时,计数器的值增1.每个机器周期的S5P2期间,对外部输入引脚进行采样。

如在第一个机器周期仲采得的值为1,而在下一个周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1的期间,计数器加1。

由于确认一次负跳变要花两个机器周期,即24个振荡周期,因此外部输入的脉冲频率最高为250KHz,如果选用24MHz频率的晶体,则最高可输入1MHz的外部脉冲。

所以本设计最少要使用24MHz或更高的晶振。

对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则这一点评至少要保持一个机器周期。

 

3.4量程指示电路

量程指示电路能按照所测频率的大小来自动显示所测频率的量程,如图3.5所示:

图3.5量程指示电路

当单片机开始正常工作时,指示灯L1便亮。

当所测的频率在1Hz至10KHz时灯L4亮,当所测的频率在10K至100KHz时灯L3亮,当所测的频率在100K至1MHz时灯L2亮。

3.5数字显示电路

本设计使用动态扫描数字显示电路来显示频率的大小,如图3.6所示:

图3.6数字显示电路

在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个8位I/O口控制,形成段选线的多路复用。

而各位的共阳极或共阴极分别由相应的I/O线控制,实现各位的分时选通。

图3.7所示位一个4位7段LED动态显示器电路原理图。

其中段选线占用一个8位I/O口,而位选线占用一个4位I/O口。

由于各位的段选线并联,段码的输出对各位来说都是相同的。

因此,同一时刻,如果各位位选都处于选通状态的话,4位LED将显示相同的字符。

若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的段码。

这样同一时刻,4位LED中只有选通的那一位显示字符,而其他三位则是熄灭的。

同样,在下一时刻,只让下一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,在段选线上输出相应位将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。

如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在不同时刻出现的,而同一时刻,只有以为显示,其他各位熄灭,但由于LED显示器的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可造成多为同时亮的假象,达到同时显示的目的。

LED不同位显示的时间间隔不能太短,因为发光二极管从导通到发光有一定的延时,导通时间太短,发光太弱人眼无法看清。

但也不能太长,因为毕竟要受限于临界闪烁频率,而且时间越长,占用CPU时间也越多。

另外,显示位增多,也将占用大量的CPU时间,因此动态显示实质是以牺牲CPU时间来换取元件的减小。

4单片机软件设计

4.1数字频率计程序流程图

4.2单片机工作程序

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineCYCLE49980

voidDELAY(void);

voidKEYSCAN(void);

voidDISPLAY(void);

voidCHULI(void);

unsignedchargewei,shiwei,baiwei,qianwei,shiwei1,baiwei1,qianwei1;

unsignedcharcodea[10]={0xc0,0xf9,0xa4,0xB0,0x99,

0x92,0x82,0xF8,0x80,0x90};

sbitKaiGuan=P2^7;//开关位

sbitLEDpin=P1^3;//工作指示灯控制位

ucharT0H=0,T0L=0;

bitflag=0;

uintN=0;

unsignedlongfreq1=0;

unsignedlongfreq=0;

voidmain(void)

{while

(1)

{

KEYSCAN();

if(TF0==1)

{TF0=0;

N++;

}

if(flag==1)//判断所测频率的范围

{freq1=(65536*N+T0H*256+T0L);

flag=0;

if(freq1<=2500)

{freq=freq1*4;

P1=0xf6;

}

elseif(2501<=freq1&freq1<=25000)

{freq=freq1*2/5;

P1=0xf5;

}

elseif(freq1>=25001)

{freq=freq1/25;

P1=0xf3;

}

gewei=freq%10;

shiwei=(freq/10)%10;

baiwei=(freq/100)%10;

qianwei=freq/1000;

}

CHULI();

DISPLAY();

}

}

voidtimer1(void)interrupt3using1//一秒中断

{staticuintcounter;

if(++counter>=10)

{TR0=0;

TR1=0;

T0L=TL0;

T0H=TH0;

TH0=TL0=0;

flag=1;

counter=0;

}

TH1=(65536-CYCLE)/256;

TL1=(65536-CYCLE)%256;

}

voidDELAY(void)//延时程序

{staticunsignedcharx,y;

for(x=0;x<20;x++)

for(y=0;y<40;y++);

}

voidKEYSCAN(void)//键盘扫描

{if(KaiGuan==0)

{DELAY();

if(KaiGuan==0)

{LEDpin=0;

TMOD=0x15;

IE=0x88;

TH1=(65536-CYCLE)/256;

TL1=(65536-CYCLE)%256;

TH0=TL0=0;

freq=0x00;

TR0=1;

TR1=1;

}

}

}

voidCHULI(void)

{if(P1==0xf6)

{qianwei1=a[qianwei]&0x7f;

baiwei1=a[baiwei];

shiwei1=a[shiwei];

}

if(P1==0xf5)

{qianwei1=a[qianwei];

baiwei1=a[baiwei]&0x7f;

shiwei1=a[shiwei];

}

if(P1==0xf3)

{qianwei1=a[qianwei];

baiwei1=a[baiwei];

shiwei1=a[shiwei]&0x7f;

}

}

voidDISPLAY(void)//显示所测的频率大小

{

P2=0xFE;

P0=qianwei1;

DELAY();

P2=0xFD;

P0=baiwei1;

DELAY();

P2=0xFB;

P0=shiwei1;

DELAY();

P2=0xF7;

P0=a[gewei];

DELAY();}

5特殊器件的介绍

5.1单片机AT89S51

单片机AT89S51的管脚图如图5.1所示:

图5.1AT89S51原理图

AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。

它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中。

5.2引脚功能说明

Vcc:

电源电压

GND:

RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。

DISRT0位缺省为RESET输出高电平打开状态。

ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

对F1ash存储器程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。

PSEN:

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

当访问外部数据存储器,没有两次有效的PSEN信号。

EA/VPP:

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。

XTALl:

振荡器反相放大器及内部时钟发生器的输入端。

XTAL2:

振荡器反相放大器的输出端。

P0口:

P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。

作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在F1ash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:

Pl是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

Flash编程和程序校验期间,Pl接收低8位地址。

其引脚功能表如表5.1所示:

表5.1P1口引脚功能表

端口引脚

第二功能

P1.5

MOSI(用于ISP编程)

P1.6

MISO(用于ISP编程)

P1.7

SCK(用于ISP编程)

P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。

Flash编程或校验时,P2亦接收高位地址和其它控制信号。

P3口:

P3口是一组带有内部上拉电阻的8位双向I/0口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。

作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。

P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表所示:

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

其引脚功能表如图5.2所示:

表5.2P3口引脚功能表

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

INT0(外中断0)

P3.3

INT1(外中断1)

P3.4

T0(定时/计数器0外部输入)

P3.5

T1(定时/计数器1外部输入)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器读选通)

5.2特殊功能寄存器

电源空闲标志:

电源空闲标志(POF)在特殊功能寄存器SFR中PCON的第4位(PCON.4),电源打开时POF置“1",它可由软件设置睡眠状态并不为复位所影响。

存储器结构:

MCS-51单片机内核采用程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空间。

程序存储器:

如果EA引脚接地(GND),全部程序均执行外部存储器。

在AT89S51,假如EA接至Vcc(电源+),程序首先执行地址从0000H-0FFFH(4KB)内部程序存储器,再执行地址为1000H-FFFFH(60KB)的外部程序存储器。

数据存储器:

AT89S51的具有128字节的内部RAM,这128字节可利用直接或间接寻址方式访问,堆栈操作可利用间接寻址方式进行,128字节均可设置为堆栈区空间。

看门狗定时器(WDT):

WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看门狗复位SFR(WDTRST)构成。

外部复位时,WDT默认为关闭状态,要打开WDT,用户必须按顺序将01EH和0E1H写到WDTRST寄存(SFR地址为0A6H),当启动了WDT,它会随晶体振荡器在每个机器周期计数,除硬件复位或WDT溢出复位外没有其它方法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。

使用看门狗(WDT):

打开WDT需按次序写01EH和0E1H到WDTRST寄存器(SFR的地址为0A6H),当WDT打开后,需在一定的时候01EH和0E1H到WDTRST寄存器以避免WDT计数溢出。

14位WDT计数器计数达到16383(3FFFH),WDT将溢出并使器件复位。

WDT打开时,它会随晶体振荡器在每个机器周期计数,这意味着用户必须在小于每个16383机器周期内复位WDT,也即写01EH和0E1H到WDTRST寄存器,WDTRST为只写寄存器。

WDT计数器既不可读也不可写,当WDT溢出时,通常将使RST引脚输出高电平的复位脉冲。

复位脉冲持续时间为98×Tosc,而Tosc=1/Fos(晶体振荡频率)。

为使WDT工作最优化,必须在合适的程序代码时间段周期地复位WDT防止WDT溢出。

掉电和空闲状态时的WDT:

掉电时期,晶体振荡停止,WDT也停止。

掉电模式下,用户不能再复位WDT。

有两种方法可退出掉电模式:

硬件复位或通过激活外部中断。

当硬件复位退出掉电模式时,处理WDT可象通常的上电复位一样。

当由中断退出掉电模式则有所不同,中断低电平状态持续到晶体振荡稳定,当中断电平变为高即响应中断服务。

为防止中断误复位,当器件复位,中断引脚持续为低时,WDT并未开始计数,直到中断引脚被拉高为止。

这为在掉电模式下的中断执行中断服务程序而设置。

为保证WDT在退出掉电模式时极端情况下不溢出,最好在进入掉电模式前复位WDT。

在进入空闲模式前,WDT打开时,WDT是否继续计数由SFR中的AUXR的WDIDLE位决定,在IDLE期间(位WDIDLE=0)默认状态是继续计数。

为防止AT89S51从空闲模式中复位,用户应周期性地设置定时器,重新进入空闲模式。

位WDIDLE被置位,在空闲模式中WDT将停止计数,直到从空闲(IDLE)模式中退出重新开始计数。

定时器0和定时器1:

AT89S51的定时器0和定时器1操作与AT89C51一样。

中断:

AT89S51共有5个中断向量:

2个外中断(INT0和INT1),2个定时中断(Timer0和Timer1)和一个串行中断。

这些中断源各自的禁止和使能位参见特殊功能寄存器的IE。

IE也包含总中断控制位EA,EA清0,将关闭所有中断。

值得注意的是表4中的IE.6和IE.5没有定义,用户不要访问这些位,它是保留为以后的AT89产品作扩展用途。

定时器0和定时器1的中断标志TF0和TF1,它是定时器溢出时的S5P2时序周期被置位,该标志保留至下个时序周期。

空闲节电模式:

在空闲工作模式状态,CPU保持睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。

此时,片内RAM和所有特殊功能寄

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1