1、频率计设计预习报告电气工程学院微机原理课程设计设计题目: 频率计 学号: 11291060 姓 名: 吴宝明 同 组 人: 王子珩 指导老师: 徐建军 设计时间: 2014年3月18日 设计地点: 电气学院实验中心 1.思路1.首先对信号输入进行波形的变换、整形、分频处理,然后输送给单片机89S51(由于测频方法为减小误差采用测频和测周两种方式,事先设置好两者的分档点(下面有详细论述)方便单片机进行处理)2.由单片机判断使用测频或测周方式测量,执行测量程序得到测量结果3.将结果进行处理(尤其是测周方式要将结果通过浮点运算得出频率数值)4.最后将结果输出到显示电路由6个数码管进行数值显示。2.概
2、述 单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的8
3、9C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 本项目应用89C51的定时器和计数器或者外部中断,来测量10Hz-150kHz的方波频率,把频率与周期按5秒一切换分时显示在6位数码管。可应用于教学实验,学生自主实验等对频率精确度要求不高的场合,也可应用于家用情况下频率的初步获取。3.原理本频率计的设计以89S51单片机为核心,利用它内部的定时/ 计数器完成待测信号周期/ 频率的测量。单片机89S51内部具有2个16位定时/计数器,定时/ 计数器的工作可以由编程来实现定时、计数和产生计数溢出中断要求的功能。在构成为计
4、数器时,在相应的外部引脚发生从1 到0 的跳变时计数器加1 ,这样在计数闸门的控制下可以用来测量待测信号的频率。为了兼顾频率测量精度和测量反应时间的要求,把测量工作分为两种方法。当待测信号的频率大于1000Hz 时,以机器周期为基准,由软件产生计数闸门,进行计数定时,采集数据然后输出。当待测信号的频率小于或者等于1000Hz 时,定时/ 计数器构成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度等于待测信号的周期。用方波作计数闸门,计数值通过浮点预算得到频率进行输出显示。4系统硬件1) 芯片主要性能:8位CPU;片内振荡器和时钟电路;32根I/O线;外部存贮器寻址范围ROM、RAM6
5、4K;2个16位的定时器/计数器;5个中断源,两个中断优先级;全双工串行口;布尔处理器;2) 功能特性描述:89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89
6、C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。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口被外部下拉为低电平时,将输出电流,这是
7、由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电
8、阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能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(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当
9、振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外
10、部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间为外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器读取外部ROM数据。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,单片机读取内部程序存储器。(扩展有外部ROM时读取完内部ROM后自动读取外部ROM)。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。5. 设计电路图6. 仿真电路图7
11、. C语言源程序#include#include#define uchar unsigned char#define uint unsigned intsbit Key=P10;sbit Led=P30;uchar code led_code18=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, /段码 0x90,0x88,0x83,0xc6,0xa1,0x86,0x81,0x7f,0xff;uchar data dis_data6=0,0,0,0,0,0;unsigned long data counter;uchar data timer_coun
12、ter=0;void Init();void Timer_Init();void delayms(uchar n);void Data_Deal();void display(uchar *p,uchar n);void Delay100ms(unsigned int _100ms);void Delay1ms(unsigned int ms);/*主程序*/void main() Init(); while(1) if(timer_counter=20) TR1=0; /关闭计时 TR0=0; /关闭计数 TH0=0; /计数清0 TL0=0; TH1=0x4c; /50ms定时 TL1=0
13、x00; timer_counter=0; Key=1; if(Key) Delay1ms(5); if(Key) counter=counter*16; counter=counter/100; Led=0; Data_Deal(); /更新数据 else if(counter200000) /超过200K范围后显示全FF dis_data0=0x0f; dis_data1=0x0f; dis_data2=0x0f; dis_data3=0x0f; dis_data4=0x0f; dis_data5=0x0f; else Led=1; Data_Deal(); /更新数据 counter=0
14、; TR1=1; /启动计时 TR0=1; /启动计数 display(dis_data,6); /*程序初始化*/void Init() Delay100ms(5); /开机先调用一段延时 Timer_Init(); /*定时器初始化*/void Timer_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;/*显示程序*/void display(uchar *p,uchar n
15、) uchar i; for(i=0;i0;loop-) x=ms; for(;x0;x-) for(n=225;n0;n-) _nop_();_nop_();_nop_();_nop_(); /*void Delay100ms(unsigned int _100ms) /100ms级延时 unsigned char n,i,ms,loop; for(loop=6;loop0;loop-) ms=_100ms; for(;ms0;ms-) for(n=145;n0;n-) for(i=251;i0;i-)_nop_(); /*定时中断程序*/void Timer1(void) interrupt 3 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