单片机系统开发与应用工程实习报告选题名称:基于AT89C52单片机的简易频率计设计系(院):专业:计)班级:姓名:学号:指导教师:学年学期: 2009 ~ 2010 学年第 2 学期2010 年 5 月 30 日摘要:在电子技术中,频率是一个经常用到的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
本项目主要阐述了以AT89C52单片机作为核心器件,采用模块化布局,设计一个简易数字频率计,以达到测量频率并进行显示的目的。
本项目利用单片机的内部定时器溢出产生中断来实现定时,把单片机内部的定时/计数器0作为定时器,实现2.5ms定时。
外部待测脉冲从单片机的TI(第15引脚)输入,以定时/计数器1作为计数器,利用中断方式来达到间接测量的目的。
最后采用四位数码管显示。
本设计采用C语言进行软件编程,用keil软件进行调试。
最后把调试成功后的程序固化到AT89C52单片机中,接到预先焊好的电路板上,接上待测脉冲,通电运行,数码管成功显示待测脉冲频率。
关键词:单片机;频率计;AT89C52目录1 项目综述 (1)1.1 设计要求 (1)1.2 系统设计 (1)2硬件设计 (2)2.1 电路原理图 (2)2.2 元件清单 (2)2.3 主要芯片引脚说明 (3)3 软件设计 (4)3.1 程序流程图 (4)3.2 软件设计简述 (5)3.3 程序清单 (6)4 系统仿真及调试 (10)4.1 硬件调试 (10)4.2 软件调试 (10)5 结果分析 (10)总结 (11)参考文献 (12)1 项目综述在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。
本项目主要阐述了选择AT89C52单片机作为核心器件,采用模块化布局,设计一个简易数字频率计测量频率并进行显示。
1.1 设计要求基于AT89C52单片机简易频率计的设计要求如下:(1)测量范围。
幅度:0.5~5V;频率:1Hz~1MHz.(2)测试误差≤0.1%。
(3)用4位数码管显示。
当频率变化时,能通过数码管及时看到变化后的信号频率。
1.2 系统设计1.2.1 框图设计基于AT89C52单片机简易频率计的电路主要由数码管显示电路、复位电路、晶振电路、电源电路等几部分组成,系统框图如图3.1所示。
图3.1 基于AT89C52单片机简易频率计系统框图1.2.3 知识点本项目需要通过学习和查阅资料,掌握和了解如下知识:1)+5V电源原理及设计。
2)单片机复位电路工作原理及设计。
3)单片机晶振电路工作原理及设计。
4)频率信号发生器的特性及使用。
5)驱动电路74LS244的特性及使用。
6)AT89C52单片机引脚结构及功能。
7)单片机C语言程序设计方法。
2 硬件设计2.1 电路原理图基于AT89C52单片机简易频率计电路原理图如图2-1所示。
图2-1 基于AT89C52单片机简易频率计电路原理图2.2 元件清单基于AT89C52单片机简易频率计元件清单如表2-1所示。
表2-1 基于AT89C52单片机简易频率计元件清单元件名称型号数量/个用途单片机AT89C52 1 控制核心晶振12MHz 1 晶振电路电容30pF 2 晶振电路电解电容10uF/10V 1 复位电路电阻10kΏ 1 复位电路驱动器74LS244 1 LED驱动非门74LS04 1 位选信号数码管4位共阴 1 显示电路按键 1 复位电路电源+5V/0.5A 1 提供+5V2.3 主要芯片引脚说明2.3.1 AT89C52引脚说明AT89C52为40脚双列直插封装8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU 通信等。
AT89C52 共有 6 个中断向量:两个外中断(INT0 和INT1),3 个定时器中断(定时器0、1、2)和串行口中断。
AT89C52引脚图如下:图2-2 AT89C52引脚图主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。
P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。
P1,P2,P3是一组带有内部上拉电阻的8 位双向I/O 口。
2.3.2 74HC244引脚说明74HC244可以让输入的数据保持比较长的时间,简单输入接口扩展通常使用的典型芯片为74HC244,由该芯片可构成三态数据缓冲器。
74HC244 芯片的引脚排列如下图所示:图2-3 74HC244引脚图74HC244芯片内部共有两个四位三态缓冲器,使用时可分别以1C和2G作为它们的选通工作信号。
当1/OE和2/OE都为低电平时,输出端Y和输入端A状态相同;当1/OE和2/OE都为高电平时,输出呈高阻态。
3 软件设计本项目利用单片机的内部定时器溢出产生中断来实现定时。
待测信号由单片机的TI中断来间接测量。
定时/计数器0定时2.5ms中断并对中断次数进行计数,当2.5ms 中断次数计到40次即0.1s时,查看定时/计数器1上的计得的数值,经过计算得到的待测信号的频率值,放入显示缓冲区,由数码管进行显示。
3.1 程序流程图主程序流程图如图3-1所示。
图3-1 主程序流程图3.2 软件设计简述1)利用单片机的内部定时器溢出产生中断来实现定时。
2)待测信号由单片机的TI (第15引脚)中断来间接测量。
3)采用12MHz 晶振,机器周期为1us4)定时/计数器0工作方式:定时方式,工作方式1,每次定时2.5ms 。
实现2.5ms 定时算法:1663(2)10 2.510(63036)1111011000111100DX X ---⨯=⨯== (3-1)即TH0=0xf6,TL0=0x3c5)定时/计数器1工作方式:计数方式,工作方式1。
当2.5ms 中断次数计到40次即0.1s 时,查看定时/计数器1上的计得的数值 。
6)通过公式:0.2540=⨯计数值脉冲频率 (3-2)可以计算出脉冲频率。
最后的数据以KHz单位,采用四舍五入的方法保留一位小数。
7)显示采用四位共阴LED数码管,用单片机P0口的8位控制数码管的8段二极管的明暗。
用P2口的P2.0~P2.3作为4位数码管的选通信号,采用从低到高逐位扫描的方法。
3.3 程序清单基于AT89C52单片机简易频率计程序清单如下:#include<reg52.h>bit timeint0,timeint1;unsigned char dispbuf[4];unsigned int period;unsigned int timecount=0;unsigned int count_1s;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //7段数码管代码表HEX_TO_BCD(unsigned int n) //十六进制数转BCD码子程序,//将BCD码送至显示缓存数组{unsigned char i; //当显示的频率超出范围,显示EEEE 报错if (n>9361)for(i=0;i<4;i++)dispbuf[i]=0x0e;else{dispbuf[3]=n/1000; //取出千位字节dispbuf[2]=(n/100)%10; //取出百位字节dispbuf[1]=(n/10)%10; //取出十位字节dispbuf[0]=n%10; //取出个位字节}}void scandisp(void) //显示子程序,//将显示缓存数组中的BCD码扫描并显示在数码管上{unsigned char posi=0x01;unsigned char i,j,temp;for(i=0;i<4;i++) //依次选中4个数码管{temp=dispbuf[i];//查出字码temp=table[temp];//第三位显示小数点if(i==1){for(j=0;j<200;j++){P2=posi;P0=temp|0x80;}}else{for(j=0;j<200;j++){P2=posi;P0 =temp;}}//依次点亮字位posi<<=1;}}void INIT_TMR1INT(void) //定时器初始化了程序,定义了两种{//定时/计数器0工作定时器方式,定时/计数器1工作在计数器方式 TMOD=0x51;ET1=1;//中断0开中断ET0=1;//CPU开中断EA=1;count_1s=0;//启动定时/计数器0开始定时TR0=1;TR1=1;}void time0(void) interrupt 1 //定时器0中断服务程序,系统自动调用,//每2.5ms执行一次{TH0=0xf6;TH1=0x3c;//每次定时是2.5 ms, 40次即0.1sif(++count_1s>40){count_1s=0;//每0.1s对计数器1所计数值进行统计timecount=TH1*256+TL1;TH1=0;TL1=0;//精确到小数点后1位,以KHz为单位period=timecount/10;//四舍五入显示if((timecount%10)>4)period++;timecount=0;HEX_TO_BCD(period);}}void timer1(void) interrupt 3 //定时器1中断服务程序,溢出后中断{TH1=0x00;TL1=0x00;}void main(void) //主函数{//初始化INIT_TMR1INT();while(1){//显示子程序scandisp();}}4 系统仿真及调试应用系统设计完成之后,就要进行硬件调试和软件调试,软件调试可以利用开发及仿真系统进行。
4.1 硬件调试硬件调试的调试主要是把电路各种参数调整到符合设计要求。
先排除硬件电路故障,包括设计性错误和工艺性故障。
一般原则是先静态后动态。
利用万用表或逻辑测试仪器,检查电路中各器件以及引脚是否连接正确,是否有短路故障。
先将单片机AT89C52芯片取下,对电路板进行通电检查,通过观察看是否有异常,是否有虚焊的情况,然后用万用表测试各电源电压,若这些都没有问题,则接上仿真机进行联机调试,观察各接口电路是否正常。