ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:649.95KB ,
资源ID:8995178      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8995178.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的数字频率计设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、基于51单片机的数字频率计设计报告目录摘要 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单片机智能控制,结合外围电子电路,设

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

3、了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。AT89S52是一种低功耗、高性能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,

5、设置定时中断,当T1第20次进入中断定时结束时,停止T0 的计数过程。之后通过读取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.

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

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

8、2为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。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 me

13、mory 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、义4.2 子程序设计a. 画流程图 b编译数码显示延时,按键去抖延时 c数码管扫描 d记时20ms中断(再次赋初值) e计数溢出中断 f. 对记时,计数,中断初始化 图四 流程图4.3 主要源程序#include /库文件#define uchar unsigned char/宏定义无符号字符型#define uint unsigned int /宏定义无符号整型/*初始定义*/Code unchar seg7code10= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /显示段码 不加code,默认在数据存储器256buchar wei

15、4=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 z,x,c,v; z=date/1000; /求千位 x=date

16、%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) interrupt 3 using 0 /定时中断服务函数 p23 ,p46 tcn

17、t+; /每过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() TMOD=0x15; /定时器1工作方式1,计数器0工作方式1 IE

18、=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 调试: 5.3.1下载程序到板,导线连接脉冲源一P20到频

19、率计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,以此为标准调整程序如下:void t1(void) interrupt

20、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】卢胜利,郝立果,丁峰等. 单片机原理与应用技术实践M.北京:机械工业出版社,2009.5;

23、【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 */ #include #include #define uchar unsig

24、ned 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 speed) if(speed=-100 & speed=1

25、00) 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(1,i); delay(5000); for(i=0;i0

26、;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(

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

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