基于51单片机的数字频率计设计报告.doc

上传人:叶*** 文档编号:36113030 上传时间:2022-08-25 格式:DOC 页数:18 大小:748KB
返回 下载 相关 举报
基于51单片机的数字频率计设计报告.doc_第1页
第1页 / 共18页
基于51单片机的数字频率计设计报告.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《基于51单片机的数字频率计设计报告.doc》由会员分享,可在线阅读,更多相关《基于51单片机的数字频率计设计报告.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、目录摘要3关键词3正文41 概述42 总体设计方案52.1软件52.2 设计思路53 系统软件设计53.1 主板说明53.2 芯片主要性能53.3 功能特性描述63.4 引脚描述64 系统软件设计94.1 初始定义94.2 子程序设计94.3 主要源程序105 系统调试136 课程设计体会157 参考文献15附录16摘要: 数字频率计是现代科研生产中不可或缺的测量仪器,它以十进制数显示被测频率,基本功能是测量正弦信号,方波信号,及其它各种单位时间内变化的物理量。本系统采用AT89S52单片机智能控制,结合外围电子电路,设计的频率计性能稳定。在软件设计上采用了单片机的C语言设计,通过单片机内部定

2、时/计数器同时动作,在测量频率时将测频率和测周期相结合,提高了频率计的测量准确性。 测量结果在四位七段式数码管上输出显示,结果精确到整数位。频率计的软件设计,系统软件设计简单明了,适用于测量频率从19999Hz的脉冲信号,超频自动报警,安全可靠。关键词:数字频率计;AT89S52单片机;信号;AT89S52最小系统板;LG5011BSR正文1. 概述 单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。AT89S52是

3、一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 本项目以AT89S52为基本控制元件,能够对19999Hz频段内的正弦信号,方波信号,及其它各种单位时间内变化的物理量进行初略测量,可应用于教学实验,学生自主实验等对频率精确度要求不高的场合,也可应用于家用情况下频率的初步获取。

4、在科技高度发达的今天,作为一名工科的大学生,一款简易的频率测量仪器,人手必备。2.总体设计方案2.1 软件:采用Keil uVision3做为开发工具,进行编程设计,通过progisp2.0将程序下载到开发板芯片中。2.2设计思路:利用AT89S52 内部的定时/计数器0,和定时/计数器1 结合完成,在初化AT89S5时,把定时/计数器0设置为计数方式,计数的信号来源于单片机的引脚P35,定时/计数器1设置为定时方式.上电后按下按键kye1(P20),去抖启动,同时开始T1的定时过程和T0的计数过程,T1 定时20ms,设置定时中断,当T1第20次进入中断定时结束时,停止T0 的计数过程。之后

5、通过读取T0的计数值N,就可以知道在1s内输入信号的频率为val。若T1定时不到1s,T0计数到65536溢出,则进入计数中断,蜂鸣器报警。输出频率蜂鸣器报警计数溢出按下按键计频率 图一 程序控制方框图3系统硬件设计3.1主板【简要说明】 3.1.1 尺寸:长128mm宽87mm高18mm3.1.2 支持芯片:AT89S51/S52/S53 支持STC89C51/C52/C53(加 转换板可使用ATMEGA8/48、ATMEGA16/32)3.1.3 工作电压:直流4.55.5伏3.1.4 单片机标准十针下载接口。(可使用并口下载线和USB下载线 下载) 3.1.5 特点:(1)具有电源指示。

6、 (2)所以I/O口以引出并有LED灯指示。(3)四位数码管显示、四位按键输入、32位LED发光二极 管显示。(4)标准的11.0592M晶振。(晶振可以插拔更换)(5)具有上电复位和手动复位。(6)四种供电接口(USB供电、端子引入供电、排针引入供电、电源头接口供电)(7)串口通信使用MAX232接口,同时可以下载STC单片机程序。3.2 芯片主要性能:l 与MCS-51单片机产品兼容l 8K字节在线系统可编程Flash存储器l 1000次擦写周期l 4.0V-5.5V工作电压l 全静态操作:0Hz33Hzl 三级加密程序存储器l 256*8字节的内部数据存储器l 32个可编程I/O口线l

7、三个16位定时器/计数器l 八个中断源l 全双工UART串行通道l 低功耗空闲和掉电模式l 掉电后中断可唤醒 图二 芯片管脚示意图l 看门狗定时器l 双数据指针l 掉电标识符l 快速编程周期l 灵活ISP编程(字节和 模式)l 绿色(-免费)工作包操作3.3 功能特性描述:AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89

8、S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。3.4 引脚描述:VCC : 电源GND: 地P0 口:P0口是一个8位漏极开

9、路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口。P1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器

10、/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.2MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用) 表1 P1口第二功能说明P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时

11、,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的

12、原因,将输出电流(IIL)。在flash编程和校验时,P3口也接收一些控制信号。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。Port PinAlternate FunctionsP3.0RXD (serial input port)P3.1TXD (serial output port)P3.2INT0 (external interrupt 0)P3.3INT1 (external interrupt 1)P3.4T0 (timer 0 external input)P3.5T1 (timer 1 external input)P3.6WR (external data

13、memory write strobe)P3.7RD (external data memory read strobe)表2 P3口第二功能说明RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下, 复位高电平有效。在访问外部数据存储器时,PSEN将不被激活。定时器0 和定时器1:在AT89S52 中,定时器0 和定时器1 的操作与AT89C51 和AT89C52 一样。图三 频率计系统组成图开始4.系统软件设计4.1

14、 初始定义按下key1判别成功与 否4.2 子程序设计a. 画流程图 b编译数码显示延时,按键去抖延时 T0计数T1计时c数码管扫描 d记时20ms中断(再次赋初值)T0中断 e计数溢出中断 f. 对记时,计数,中断初始化T1中断显示 图四 流程图4.3 主要源程序#include /库文件#define uchar unsigned char/宏定义无符号字符型#define uint unsigned int /宏定义无符号整型/*初始定义*/code uchar seg7code10= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;

15、/显示段码 不加code,默认在数据存储器256buchar wei4=0XEf,0XDf,0XBf,0X7f; /位的控制端 (四位数码管)sbit key1=P20;uint tcnt=0; /计中断int th0,t0,val=0;sbit sound=P37; /蜂鸣器/*延时函数*/void delay(uchar t) uchar i,j; for(i=0;i0;j-);void delay_2ms() uchar l,k; for(l=0;l0;l+) for(k=0;k254;k+); /*显示函数*/ void Led(int date) /显示函数/*数据转换*/ uint

16、 z,x,c,v; z=date/1000; /求千位 x=date%1000/100; /求百位 c=date%100/10; /求十位 v=date%10; /求个位 P2=0XFF; P0=seg7codez; P2=wei0; delay(80); P2=0XFF; P0=seg7codex; P2=wei1; delay(80); P2=0XFF; P0=seg7codec; P2=wei2; delay(80); P2=0XFF; P0=seg7codev; P2=wei3; delay(80); P2=0XFF;/*定时中断服务函数*/void t1(void) interrup

17、t 3 using 0 /定时中断服务函数 p23 ,p46 tcnt+; /每过50ms tcnt 加一 if(tcnt=20) /计满20 次(1 秒)时 th0=TH0; /读计数值 t0=TL0; val=th0*256+t0; /换算计数值 tcnt=0;/重新再计TH0=(65535-9999)/256;TL0=(65535-9999)%256; TH1=(65535-50000)/256; /对TH1 TL1 赋值 TL1=(65535-50000)%256; void t00() interrupt 1 /计数中断 sound=sound;/计数溢出中断void init()T

18、MOD=0x15; /定时器1工作方式1,计数器0工作方式1IE=0X8A; TR1=1; /开始计时TR0=1; /开始计数 TH1=(65535-50000)/256; /对TH1 TL1 赋值TL1=(65535-50000)%256; TH0=(65535-9999)/256; TL0=(65535-9999)%256;/*主函数*/void main() if(!key1) delay_2ms(); if(!key1) init(); while(1) Led(val); /*结束*/5.系统调试5.1 程序准备:频率计程序,脉冲源程序5.2 检测硬件芯片:数码管,按键,蜂鸣器5.3

19、 调试: 5.3.1下载程序到板,导线连接脉冲源一P20到频率计P34, 显示频率在91.92.83,99间跳变,复位。 5.3.2 调入脉冲源二,频率显示稳定,复位。 5.3.3 调整脉冲源二程序,超频,蜂鸣器报警。 5.3.4 再次调入脉冲源一,塞选频段,显示稳定在91,92Hz。 5.3.5 调试结束。5.4 测试结果:可以准确测量从1到9999Hz占空比较为稳定的信号源,超过此频率范围,系统报警。5.5 问题:开始时,未给定时器附初值,频率显示过大,用不同的板测试接果不同,频率过大时结果出错,蜂鸣器不报警。 解决方案:(1) 赋初值:示波器检测信号源一,频率为91.3Hz,以此为标准调

20、整程序如下:void t1(void) interrupt 3 using 0 tcnt+; if(tcnt=20) th0=TH0; t0=TL0; val=th0*256+t0; tcnt=0;/TH0=(65535-9999)/256;/添加初始值TL0=(65535-9999)%256; TH1=(65535-50000)/256;/添加初始值 TL1=(65535-50000)%256; (2)查看晶振:同一批的板中晶振有12M的,也有16M的,因而频率不同。(3)蜂鸣器缺少晶振,换版后添加计数中断如下: void T0() interrupt 1 /计数中断 sound=sound

21、;/计数溢出中断设计体会在此次单片机项目设计的过程中,我进一步认识到全面专业知识以及逻辑思考方式对研究问题的重要性,以及成功最重要的一块敲门砖是不妥协,不放弃!虽然这门课修过公选,但时隔一年本就不大熟的知识更加淡漠,完成整体设计颇费周折。在这过程中书到用时方恨少,天下还是好人多同学和老师的帮助给了我莫大的动力。在这三周中,有时一天中翻专业书的次数比前三周理论学习时合起来翻的次数都多,对理论联系实际的重要性有了更新的领悟。在设计过程中也从网络上获取许多宝贵的资源,每种设计都有独到之处,通过请教他人加上自己的理解,并与所学的知识紧密相结合,我相信这过程必然对我今后的学习和工作产生积极的影响。除了获

22、取新的知识,深感巩固旧的学问也很重要,尤其是结合了这几年学的相关的专业知识,对各门课都做一个全面的温习,才不用带着书柜跑。这不仅对我现在的学习乃至今后的工作都会有很大的帮助。本次选择设计的定时数字频率计,因为受材料和个人知识水平的限制只能满足满足一般的测量要求,且电路在测试复杂信号时存在一定的问题,频率只能稳定在一定范围内,虽可以通过选取特定的频段来排除频率变化较复杂区段的干扰,但这样针对不同的信号源都要重新调整程序,过于复杂。而更精确的频率计设计,现有水平还不能达到,所以本次就未深入涉及。希望老师给以评点和支持,我将在今后朝着这些方向学习奋斗。7.参考文献【1】卢胜利,郝立果,丁峰等. 单片

23、机原理与应用技术实践M.北京:机械工业出版社,2009.5;【2】谢自美.电子线路设计M.武昌:华中科技大学出版社,2000.7 ;【3】张永瑞.电子测量技术基础M.西安:西安电子科技大学出版社,2002.【4】李春.数字频率计设计D.北京:邵阳电子厂,2011,02: 4页到7页;【5】张杰,杨艳丽,马莉莉,张立倩.基于单片机C语言的数字频率计设计 内蒙古农业大学学报,第28卷,第二期,2007年6月。附录1 总体电路图附录2 实验板元器件分布图附录3 测频程序一/* =直流电机的PWM速度控制程序= */ /* 晶振采用11.0592M,产生的PWM的频率约为91Hz */ #includ

24、e #include #define uchar unsigned char #define uint unsigned int sbit en1=P20; /* Enable A */ sbit s1=P22; /* Input 1 */ sbit s2=P23; /* Input 2 */ uchar t=0; /* 中断计数器 */ uchar m1=0; /* 电机1速度值 */ uchar tmp1; /* 电机当前速度值 */ /* 电机控制函数 index-电机号(1,2); speed-电机速度(-100100) */ void motor(uchar index, char

25、speed) if(speed=-100 & speed=100) if(index=1) /* 电机1的处理 */ m1=abs(speed); /* 取速度的绝对值 */ if(speed0;j-); void main() char i; TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值 */ TL0=0x9B; EA=1; /* 开中断 */ ET0=1; /* 定时器0允许中断 */ TR0=1; /* 启动定时器0 */ while(1) /* 电机实际控制演示 */ for(i=0;i0;i-) /* 正转减速 */ motor

26、(1,i); delay(5000); for(i=0;i0;i-) /* 反转减速 */ motor(1,-i); delay(5000); void timer0() interrupt 1 /* T0中断服务程序 */ if(t=0) /* 1个PWM周期完成后才会接受新数值 */ tmp1=m1; if(t=100) t=0; /* 1个PWM信号由100次中断产生 */ 附录4:测频程序四#include /库文件#define uchar unsigned char/宏定义无符号字符型#define uint unsigned int /宏定义无符号整型/*I/O定义*/sbit LED=P10; /定义单片机P1口的第0位 (即P1.0)/*延时函数*/void delay()/延时程序uchar m,n,s;for(m=20;m0;m-)for(n=20;n0;n-)for(s=248;s0;s-);/*主函数*/void main()while(1) /无限循环 LED=0; /点亮P1.0口灯 delay(); /延时 LED=1; /熄灭P1.0口灯 delay(); /延时/*结束*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 公文通知

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁