方波发生器.docx
- 文档编号:24155752
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:21
- 大小:2.52MB
方波发生器.docx
《方波发生器.docx》由会员分享,可在线阅读,更多相关《方波发生器.docx(21页珍藏版)》请在冰豆网上搜索。
方波发生器
课程设计(论文)说明书
题目:
方波发生器__________
院(系):
专业:
学生姓名:
____
学号:
_
指导教师:
职称:
2012年12月17日
摘要
本次课堂设计以at89s52单片机为核心器件,通过外接16按键键盘作为输出频率的控制的方波发生器。
该方波发生器能实现对周期为2us到2*65535us的方波输出。
其核心技术为单片机并行端口应用、单片机定时器中断应用。
采用16个按键构成输入模块,还有两个按键分别用做复位和0号中断源,操作方便。
0号中断应用在将输入的值当做周期的一半处理并输出,不通过中断直接输入的值则当做频率来处理,该方波发生器的频率有一定的限制,也就是输出的方波周期只能是定时器计数(约为1us)基值的2倍到2*65535倍。
关键字:
at89s52;单片机;方波;键盘
Abstract
Thisclassdesignwithat89s52SCMasthecoredevice,throughtheexternal16keykeyboardasoutputfrequencycontrolofsquarewavegenerator.Thesquarewavegeneratorcanrealizethecycleof2usto2*65535usofsquarewaveoutput.ItscoretechnologyforSCMparallelportapplication,single-chipmicrocomputertimerinterruptapplication.The16keyconstituteinputmodule,andtwobuttonsareusedtoresetandzeronumberinterruptsource,easytooperate.0nointerruptusedintheinputvalueasacycleofhalfprocessingandoutput,notthroughtheinterruptdirectinputvalueisasfrequencytodealwith,thissquarewavegeneratorfrequencytohavecertainrestriction,isalsotheoutputofthesquarewacycleisonlytimercount(about1us)basevalueof2timesto2*65535times.
Key:
at89s52;microcontroller;squarewave;thekeyboard
目录
引言4
1概述4
1.1设计内容5
1.2设计的基本要求5
2方波发生器设计方案5
2.1方案介绍5
2.2方波发生器的原理和功能5
3系统的硬件设计6
3.1单片机最小系统6
4系统的软件设计6
4.1主程序7
4.2函数jishu27
4.30号中断程序7
4.4延时子程序7
5调试与性能分析7
5.1硬件调试7
5.2软件的调试7
5.3性能及误差分析8
6总结8
谢辞9
参考文献11
附录12
引言
本次课设设计的目的是通过在“单片机原理及应用”课堂上学习的知识,以及查阅资料,培养一种自学的能力完成课程设计。
并且引导一种创新思维,把学到的知识应用到日常生活中。
在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析方法解决遇到的困难,掌握单片机系统一般的算法流程,学会对问题的处理,积累设计系统的经验,充分发挥教学与实践的结合。
全能提高个人系统开发的综合能力,开拓了思维,为今后能在相应工作岗位上的工作打下了坚实的基础。
1概述
单片微型计算机简称单片机,是典型的嵌入式微控制器(MicrocontrollerUnit),单片机芯片常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
它最早是被用在工业控制领域,如今单片机在日常生活中已随处可见,比如电饭锅、洗衣机等家电产品里都含有单片机,本课设设计的方波发生器就是采用了被广泛使用的at89s52单片机,AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash。
1.1设计内容
本次课堂设计是设计一个方波发生器,用键盘控制输出频率,通过单片机引脚直接输出,通过示波器观察输出波形。
1.2设计的基本要求
频率可调,用外接的16按键键盘直接输入频率或周期,周期范围为2us到131.07ms
2方波发生器设计方案
实现方波输出的方法有很多,可以采用不同的原理和器件构成不同的电路,都可以实现方波的输出。
在这次课堂设计当中,与模拟电路通过改变电阻或电容来实现频率可调不同,是通过外接的键盘直接输入周期或频率来控制频率的。
2.1方案介绍
微处理器模块at89s52,16按键模块,0号中断模块,复位模块,晶振电路模块。
本次课堂设计用到定时器2,工作在自动重装方式2上,工作在方式2是因为利用它的自动重装功能,保证方波的稳定输出。
键盘是通过扫描程序和单片机共同来控制的,键盘操作来完成对频率的控制。
2.2方波发生器的原理和功能
方波发生器的原理方框图如图所示
频率输入或周期输入
图1.1方波发生器原理方框图
由于系统的要求不高,比较单一的,再加上是通过定时器来调节频率,而非电阻,因此实现起来就相对简化了。
仅用键盘、at89s52就可完成设计,达到要求实现的功能。
简单的流程为:
主程序初始化后通过调用函数扫描键盘,将设置的信息输入,处理后,赋给定时器2,通过定时器溢出中断输出波形。
单片机的晶振为12mhz,用到T2时,基本周期为1us,因此输出的频率的周期只能是1us的整数倍。
当输入的是频率时,freq为输入的频率,N为周期比,即N=(1/freq)/1us,因为自动重装方式2只能是加计数,因此给RCAPHRCAPL赋值为:
0x10000-N/2,N除以2是因为定时器溢出的时间是周期的一半。
当输入的是周期时RCAPHRCAPL=0x10000-T,T为输入的值,输出周期是T的两倍。
该电路有一个复位按键和一个0号中断按键,0号中断是用来输入周期的,不通过调用中断,直接输入的值是频率,通过中断来输入的值是周期的一半。
3系统的硬件设计
3.1单片机最小系统
单片机各功能部件的运行都是以时钟频率为基准的,因而时钟频率直接影响单片机的速度,时钟电路的质量也直接影响到单片机系统的稳定性。
常用的时钟电路方式有两种:
一种是内部时钟方式,一种是外部时钟方式,这里采用的是内部时钟方式,外接晶振。
时钟电路有片外晶振、15pf的瓷片电容和单片机的内部电路组成。
选择频率为12mhz的晶振。
波形输出口设定为at89s52单片机的P2^0口,将它和示波器相接可观察到波形是方波
此单元电路包括内部振荡方式时钟电路、按钮开关复位电路和0号中断电路截图如下
图示2.2从左到右分别为复位、0号中断和单片机最小系统
4系统的软件设计
方波发生器的软件设计包括主程序、延时子程序。
0号中断程序、定时器溢出中断程序以及键盘扫描子程序。
其中主程序用来控制整个程序的执行,它和各子程序紧密相连,共同决定方波发生器的功能的执行。
4.1主程序
主程序包括系统的初始化(包括定时器的初始化,定时初值的载入,单片机开中断,通过调用函数jishu2进入死循环。
其流程图如下所示
图示2.3主程序流程图
4.2函数jishu2
这个函数包含了键盘扫描部分,是一个死循环函数,直接输入的值将直接作为频率输出。
例如,直接输入1000(以*键结束)单片机将输出1000hz的方波。
当输入的值高于7位时,默认为100000hz。
4.30号中断程序
实现将输入的值当做周期,直接输出2倍于该值的周期,例如按了0号中断键后输入1000,单片机将输出2000us的方波。
定时溢出中断服务程序:
当定时器溢出时将调用该函数,实现T2的中断标志位TF2的清零以及取反P2^0
4.4延时子程序
用来在扫描键盘时消除去抖效应的。
5调试与性能分析
5.1硬件调试
硬件的调试首先是检查电路的逻辑线路是不是正确的,如果正确再检查原理图的连线是否正确,电路的布局安排是不是合理。
硬件的问题比较少,主要体现在上拉电阻的使用以及电容的使用等,极少发生逻辑上的错误。
硬件问题往往是致命的问题,其不易察觉,发现之后电路更不易修改。
这就要求我们在实践中不断的积累经验,吸取教训。
5.2软件的调试
软件的测试主要是检查程序的语法是不是正确的,数据结构安排是不是合理的,整体流程安排是不是合理的。
检查妥当后,就要进行最重要的了,软硬件同时调试,问题往往在此得以发现。
软件问题是调试过程中遇到最多的,常碰到的问题如下:
1按键值不能被正常识别。
2定时器的定时不正确不稳定。
3频率不能正确输出
5.3板子测试
直接输入的,键入值为频率,如下表格:
表一
频率输入/hz
6
7
14
16
600
870
10000
输出频率/hz
28
84.8
169.7
16
600.15
870.95
9.9986k
调用0号中断,键入值为半周期,如下表格:
表二
半周期
输入/us
400
600
700
872
6421
半周期
输出/ms
0.410
0.620
0.712
0.890
6.54
由表一可知当输入6hz时,输出为28hz,输出不能被正常显示,这是是因为该方波发生器的频率在7.65hz到500khz,当输入频率不在这个范围时将不能被正常输出,由表1和表二可以知道,输出和输入有微小的误差,这是因为晶振的不稳定引起的。
以下图为实际示波器的输出:
图表2.1输入频率为10000hz
图表2.2输入半周期600us
图表2.3输入半周期400us
图表2.4输入频率600hz
5.4性能及误差分析
该方波发生器只是可以实现频率的控制,而且波形的频率也只能是某些值,也就是波形的周期只能为2到65535*2个us,当周期大于65535*2或频率小于7左右时单片机就不能正确输出。
除了固有的误差外还受到晶振的稳定性影响,还有就是因为程序执行需要时间,也会对波形的准确输出有一定的影响。
6总结
用单片机进行方波发生器的设计,我不仅加深了对单片机的理论的理解,将理论很好的应用到实际当中去,而且学会了如何去培养我们的创新精神,将自己的想法通过硬件及软件实现出来,从而不断地挑战困难,超越自己。
我在这一设计过程中,遇到了很多困难,出现了很多不如易的地方,但我没有放弃,努力钻研,克服了种种困难。
虽然学习过单片机相关的课程,但由于平时上课对单片机知识学习得不够扎实,理解得不够透彻、一知半解,致使在运用时不能贯通,特别是编写程序实现硬件功能部分,导致在设计过程中困难重重,不知道从哪下手,但是通过向同学请教,最后还是解决了,通过这次课堂设计我对dxp、proteus等软件有了更深的认识了。
谢辞
本课设设计在符杰林老师的悉心指导和严格要求下业已完成,从课题选择到具体的写作过程,无不凝聚着符杰林老师的心血和汗水,在我的课设论文写作期间,符杰林老师为我提供了种种专业知识上的指导和一些富于创造性的建议,没有这样的帮助和关怀,我不会这么顺利的完成课程设计。
在此向符杰林老师表示深深的感谢和崇高的敬意。
感谢学校的安排,是在这样一个学校下,才有机会能做这样的课设机会,在做课设期间,可以说是使自己能真正的做到了理论与实践相结合,自己从中受益匪浅。
感谢过去几年各位任课老师认真负责,在他们的悉心帮助和支持下,使我能够很好的掌握和运用专业知识,并在课设中得以体现,顺利完成课程设计。
同时,在课设与论文的处理过程中,我还参考了有关的书籍和论文,在这里一并向有关的作者表示谢意。
我还要感谢同组的各位同学,在课程设计的这段时间里,你们给了我很多的启发,提出了很多宝贵的意见,对于你们帮助和支持,在此我表示深深地感谢。
参考文献
[1]李群芳.单片机微型计算机与接口技术(第三版)
[2]张靖武.单片机原理、应用与Proteus仿真
[3]黄智伟.全国大学生电子设计竞赛电路设计.
[4]汤元信.电子工艺及电子工程设计.北京:
航空航天大学出版社.2001
[5]孙青.电子元器件可靠性工程.北京:
电子工业出版社.2002
[6]周仲.国产集成电路应用500例.北京:
电子工业出版社.1992
[7]那文鹏,王昊.通用集成电路的选择与使用.北京:
人民邮政出版社.2004
[8]周亦武,孙威娜.放大电路指南.福建:
科学技术出版社.2004
[9]谭浩强.C语言程序设计:
清华大学出版社
附录
完整程序如下:
#include
#include
sfrT2MOD=0XC9;
sbitp20=P2^0;
sbitp11=P1^1;
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uinti);
voidjishu2(void);
floatfreq,t0;
ucharrcap2l,rcap2h;
uchar
tab[]={0x14,0x88,0x84,0x82,0x48,0x44,0x42,0x28,0x24,0x22,0x81,0x41,0x21,0x11,0x12,0x18};
int5()interrupt5{
p20=~p20;
TF2=0;
}
int0()interrupt0{
union{uintusint;
ucharuschar[2];
}perid;
uintfreq1;
ucharbs[7],s;
uchari,j,k;
TR2=0;
s=0;
keyscan:
P1=0x0f;
i=P1;
i=(~i)&0x0f;
if(i==0)gotokeyscan;
P1=0xf0;
j=P1;
j=(~j)&0xf0;
if(j==0)gotokeyscan;
delay(100);
do
{k=P1;}
while((~k)&0xf0);
delay(100);
i=i|j;
k=0;
while(tab[k++]!
=i)
;
k-=1;
if(k<10)
{bs[s]=k;
s++;
gotokeyscan;}
elseif(k>=10&&k<=14)gotokeyscan;
if(k==15){switch(s){
case6:
freq1=bs[0]*100000+bs[1]*10000+bs[2]*1000+bs[3]*100+bs[4]*10+bs[5];break;
case5:
freq1=bs[0]*10000+bs[1]*1000+bs[2]*100+bs[3]*10+bs[4];break;
case4:
freq1=bs[0]*1000+bs[1]*100+bs[2]*10+bs[3];break;
case3:
freq1=bs[0]*100+bs[1]*10+bs[2];break;
case2:
freq1=bs[0]*10+bs[1];break;
case1:
freq1=bs[0];break;
default:
freq1=10000;
}
}
freq1=0x10000-freq1;
perid.usint=freq1;
RCAP2H=perid.uschar[0];
RCAP2L=perid.uschar[1];
p11=1;
TR2=1;
}
}
voidmain(void)
{
EA=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
jishu2();
}
voiddelay(uinti)
{ucharj;
for(;i>0;i--)
for(j=0;j<100;j++)
{_nop_();
}
}
voidjishu2(void)
{
union
{uintusN2;
ucharuschar[2];
}N3;
unsignedlongfreq1;
uintN2=0;
floatt2;
ucharbs[7],s;
uchari,j,k;
T2MOD=1;
T2CON=0X80;
RCAP2H=0;
RCAP2L=0;
ET2=1;
p11=1;
TR2=1;
s=0;
keyscan:
P1=0x0f;
i=P1;
i=(~i)&0x0f;
if(i==0)gotokeyscan;
P1=0xf0;
j=P1;
j=(~j)&0xf0;
if(j==0)gotokeyscan;
delay(100);
do
{k=P1;}
while((~k)&0xf0);
delay(100);
i=i|j;
k=0;
while(tab[k++]!
=i)
;
k-=1;
if(k<10)
{bs[s]=k;
s++;
gotokeyscan;}
elseif(k>=10&&k<=14)gotokeyscan;
if(k==15){switch(s){;
case6:
freq1=bs[0]*100000+bs[1]*10000+bs[2]*1000+bs[3]*100+bs[4]*10+bs[5];break;
case5:
freq1=bs[0]*10000+bs[1]*1000+bs[2]*100+bs[3]*10+bs[4];break;
case4:
freq1=bs[0]*1000+bs[1]*100+bs[2]*10+bs[3];break;
case3:
freq1=bs[0]*100+bs[1]*10+bs[2];break;
case2:
freq1=bs[0]*10+bs[1];break;
case1:
freq1=bs[0];break;
default:
freq1=10000;
}
s=0;
TR2=0;
t2=1/(float)freq1;
N2=t2/0.000001;
N2=N2/2;
N2=0x10000-N2;
N3.usN2=N2;
RCAP2H=N3.uschar[0];
RCAP2L=N3.uschar[1];
p11=1;
TR2=1;
gotokeyscan;
}
}
Proteus仿真原理图
图示3.1proteus仿真原理图
图示4.2输入600hz仿真图
图示4.3输入10000hz的仿真图
Pcb图
图示4.4板子的pcb图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方波 发生器