频率计设计预习报告.docx

上传人:b****4 文档编号:24266376 上传时间:2023-05-25 格式:DOCX 页数:13 大小:736.59KB
下载 相关 举报
频率计设计预习报告.docx_第1页
第1页 / 共13页
频率计设计预习报告.docx_第2页
第2页 / 共13页
频率计设计预习报告.docx_第3页
第3页 / 共13页
频率计设计预习报告.docx_第4页
第4页 / 共13页
频率计设计预习报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

频率计设计预习报告.docx

《频率计设计预习报告.docx》由会员分享,可在线阅读,更多相关《频率计设计预习报告.docx(13页珍藏版)》请在冰豆网上搜索。

频率计设计预习报告.docx

频率计设计预习报告

 

电气工程学院

微机原理课程设计

 

设计题目:

 频率计

学  号:

  11291060  

姓名:

吴宝明

同组人:

王子珩

指导老师:

徐建军

设计时间:

2014年3月18日

设计地点:

电气学院实验中心

1.思路

1.首先对信号输入进行波形的变换、整形、分频处理,然后输送给单片机89S51(由于测频方法为减小误差采用测频和测周两种方式,事先设置好两者的分档点(下面有详细论述)方便单片机进行处理)

2.由单片机判断使用测频或测周方式测量,执行测量程序得到测量结果

3.将结果进行处理(尤其是测周方式要将结果通过浮点运算得出频率数值)

4.最后将结果输出到显示电路由6个数码管进行数值显示。

2.概述

单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。

89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。

89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

本项目应用89C51的定时器和计数器或者外部中断,来测量10Hz-150kHz的方波频率,把频率与周期按5秒一切换分时显示在6位数码管。

可应用于教学实验,学生自主实验等对频率精确度要求不高的场合,也可应用于家用情况下频率的初步获取。

3.原理

本频率计的设计以89S51单片机为核心,利用它内部的定时/计数器完成待测信号周期/频率的测量。

单片机89S51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。

在构成为计数器时,在相应的外部引脚发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。

为了兼顾频率测量精度和测量反应时间的要求,把测量工作分为两种方法。

当待测信号的频率大于1000Hz时,以机器周期为基准,由软件产生计数闸门,进行计数定时,采集数据然后输出。

当待测信号的频率小于或者等于1000Hz时,定时/计数器构成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度等于待测信号的周期。

用方波作计数闸门,计数值通过浮点预算得到频率进行输出显示。

4.系统硬件

1)芯片主要性能:

8位CPU;

片内振荡器和时钟电路;

32根I/O线;

外部存贮器寻址范围ROM、RAM64K;

2个16位的定时器/计数器;

5个中断源,两个中断优先级;

全双工串行口;

布尔处理器;

2)功能特性描述:

89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。

89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

3)引脚描述:

VCC:

供电电压。

GND:

接地。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/

89C51引脚图

地址的低八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间为外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器读取外部ROM数据。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,单片机读取内部程序存储器。

(扩展有外部ROM时读取完内部ROM后自动读取外部ROM)。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

5.设计电路图

6.仿真电路图

7.C语言源程序

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitKey=P1^0;

sbitLed=P3^0;

ucharcodeled_code[18]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,//段码

0x90,0x88,0x83,0xc6,0xa1,0x86,0x81,0x7f,0xff};

uchardatadis_data[6]={0,0,0,0,0,0};

unsignedlongdatacounter;

uchardatatimer_counter=0;

voidInit();

voidTimer_Init();

voiddelayms(ucharn);

voidData_Deal();

voiddisplay(uchar*p,ucharn);

voidDelay100ms(unsignedint_100ms);

voidDelay1ms(unsignedintms);

//*******主程序*******//

voidmain()

{

Init();

while

(1)

{

if(timer_counter==20)

{

TR1=0;//关闭计时

TR0=0;//关闭计数

TH0=0;//计数清0

TL0=0;

TH1=0x4c;//50ms定时

TL1=0x00;

timer_counter=0;

Key=1;

if(Key)

{

Delay1ms(5);

if(Key)

{

counter=counter*16;

counter=counter/100;

Led=0;

Data_Deal();//更新数据

}

}

else

{

if(counter>200000)//超过200K范围后显示全FF

{

dis_data[0]=0x0f;

dis_data[1]=0x0f;

dis_data[2]=0x0f;

dis_data[3]=0x0f;

dis_data[4]=0x0f;

dis_data[5]=0x0f;

}

else

{

Led=1;

Data_Deal();//更新数据

}

}

counter=0;

TR1=1;//启动计时

TR0=1;//启动计数

}

display(dis_data,6);

}

}

//*******程序初始化*******//

voidInit()

{

Delay100ms(5);//开机先调用一段延时

Timer_Init();

}

//*******定时器初始化*******//

voidTimer_Init()

{

TMOD=0x15;//定时器1定时方式1,定时器0计数方式1

TH0=0;//计数清0

TL0=0;

TH1=0x4c;//50ms定时

TL1=0x00;

ET1=1;

EA=1;

TR1=1;//启动计时

TR0=1;//启动计数

Led=1;

}

//*******显示程序*******//

voiddisplay(uchar*p,ucharn)

{

uchari;

for(i=0;i

{

P2=i;

P0=led_code[p[i]];

Delay1ms(10);

P0=0xff;

}

}

//*******数据处理*******//

voidData_Deal()

{

unsignedlongTem;

Tem=counter;

dis_data[0]=Tem/100000;

dis_data[1]=(Tem%100000)/10000;

dis_data[2]=(Tem%10000)/1000;

dis_data[3]=(Tem%1000)/100;

dis_data[4]=(Tem%100)/10;

dis_data[5]=Tem%10;

Tem=0;

}

//***************************************

voidDelay1ms(unsignedintms)//ms级延时

{

unsignedcharn,x,loop;

for(loop=6;loop>0;loop--)

{

x=ms;

for(;x>0;x--)

for(n=225;n>0;n--)

{_nop_();_nop_();_nop_();_nop_();}

}

}

//***************************************

voidDelay100ms(unsignedint_100ms)//100ms级延时

{

unsignedcharn,i,ms,loop;

for(loop=6;loop>0;loop--)

{ms=_100ms;

for(;ms>0;ms--)

for(n=145;n>0;n--)

for(i=251;i>0;i--)_nop_();

}

}

//*******定时中断程序*******//

voidTimer1(void)interrupt3

{

TR0=0;

TH1=0x4c;

TL1=0x00;

counter=counter+TH0*256;

counter=counter+TL0;

TH0=0;

TL0=0;

timer_counter++;//50ms计数

TR0=1;

}

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

当前位置:首页 > 求职职场 > 简历

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

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