单片机课程设计.docx
《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
单片机课程设计
2011~2012学年第二学期
《单片机设计》
课程设计报告
题目:
专业:
通信工程
班级:
09通信一班
姓名:
指导教师:
电气工程系
2012年5月27日
摘要
各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。
在科学研究及教学实验中常常需要这几种信号的发生装置。
为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。
本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。
该信号源的特点是:
体积小、价格低廉、性能稳定、实现方便、功能齐全。
关键词:
正弦波;三角波;方波;信号源;低频信号
引言
波形发生器是信号源的一种,它是具有信号源所具有的特点,更因它高的性能优势而备受人们青睐。
信号源主要给被测电路提供所需要的已知信号(各种波形),然后用其它仪表测量感兴趣的参数。
可见信号源在各种实验应用和试验测试处理中,它不是测量仪器,而是根据使用者的要求,作为激励源,仿真各种测试信号,提供给被测电路,以满足测量或各种实际需要。
目前我国已经开始研制波形发生器,并取得了可喜的成果。
但总的来说,我国波形发生器还没有形成真正的产业。
就目前国内的成熟产品来看,多为一些PC仪器插卡,独立的仪器和VXI系统的模块很少。
并且我国目前在任意波形发生器的种类和性能都与国外同类产品存在较大的差异,因此加紧对这类产品的研制显得迫在眉睫。
1.
硬件设计
利用AT89C51单片机外接数模转换器和运算放大电路,由用户通过按键选择输出实验室中经常使用到的几种基本波形:
方波、锯齿波、正弦波和三角波。
方波由AT89C51单片机将最大值和最小值输出给D/A进行转换,并由用户通过键盘选择波形周期。
与微处理器兼容的8位数模转换器DAC0832将数字量转换为模拟量电压信号,通过运放电路得到锯齿波、正弦波、三角波信号,波形保证了它的精度、平滑和稳定。
可采用单片机程序产生以上4种波形,并通过一片D/A转换器输出。
另外,采用一片D/A转换器来控制前一片D/A转换器的参考电压,从而可以改变输出波形幅值,见图1所示。
通过外接键盘来设定波形的类型、幅值和频率,并在扩展的七段LED显示器上显示响应的波形的类型、幅值和频率。
AT89C51单片机时钟电路采用内部方式,外接陶瓷谐振器(频率为12MHz),微调电容值为30pF。
系统复位采用按键式外部复位方式,复位信号至少保持8us以上。
通过按键由用户选择要输出的波形,按键选择占用P10—P17口,采用独立式键盘结构,框图如图2.1所示。
图2.1总体方案结构框图
2.
单元模块设计
2.1
单片机的选择
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含4Kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机抽取数据
存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产。
兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。
AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
AT89C51提供以下标准功能:
4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作方式。
空闲工作方式停止CPU的工作,但允许RAM,定时器/计数器串口通信及中断系统继续工作,掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
2.2输入电路键盘的接口电路
在单片机控制系统中,为了实现人对系统的操纵控制及向系统输入参数,都需要为系统设置按键或键盘,实现简单的人机会话。
键盘是一组(通常多于8个)按键的集合。
键盘所使用的按键一般都是具有一对常开触点的按键开关,平时不按键时,触点处于断开(开路)状态,当按下按键时,触点才处于闭合(短路)状态,而当按键被松开后,触点又处于断开状态。
根据键盘上闭合键的识别方法不同,键盘可分为非编码键盘和编码键盘两种。
非编码键盘上,闭合键的识别采用软件实现;编码键盘上,闭合键的识别则由专门的硬件译码器产生按键的编号(即键码),并产生一个脉冲信号,以通知CPU接受键码。
编码键盘使用较为方便,易于编程,但硬件电路较为复杂,因此在单片机的控制系统中应用较少。
而非编码键盘几乎不需要附加什么硬件电路,因此在实际单片机控制系统中较多采用。
从键盘的结构来分,键盘可分为独立式和矩阵式两类。
当系统操作比较简单,所需键盘较少时,可采用独立式非编码键盘;而当系统操作比较复杂,需要数量较多的按键时,可采用矩阵式非编码键盘。
在本课题设计中,采用的是独立式键盘。
其电路图如图3.1所示。
图3.1键盘与单片机接口电路
输出波形种类、幅值和频率的设定由键盘输入。
由于单片机的PI口不作它用,可用它扩展一个4行*4列键盘。
键盘的4根行线接到单片机的P1.0~P1.3口线,4根列线接P1.4~P1.7口线。
16个按键分别定义为数字0~9和功能键Enter(确认键)、Clear(清除键)、Wave(波形选择键)、Frequenency(改变频率键)、Amplitude(改变幅值键)和(小数点键)。
2.3显示电路
当前输出波形的种类、幅值和频率需要显示出来。
由于单片机的串行不作它用,可用它接8片串入并出移位寄存器来扩展8位7段LED显示器,L1~L4用于显示输出波形的频率;L5~L7用于显示输出波形的幅值,L6的小数点接+5V,常亮,则可显示0.0V到10.0V;L8用于显示波形的种类,1表示正弦波,2表示方波,3表示三角波,4表示锯齿波,如图3.2。
图3.2显示电路
2.4D/A转换器与单片机的接口电路
在本设计中选用DAC0832的单缓冲工作方式,它与单片机AT89C51的接口电路如图3.3所示
图3.3DAC0832与单片机AT89C51的接口电路
按应用要求的不同,DAC0832可以接成单极性电压输出和双极性电压输出,当数字量在00—FF范围时,电压输出量若为0—+xV或0---xV,这种输出方式称为单极性电压输出方式;若电压的输出为-xV--+xV,则为双极性电压输出方式。
本课题根据实际要求选择IC3为单极性输出和IC4为双极性电压输出。
2.5运算放大器电路
将得到的模拟信号量分别进行放大,以利于对系统的信号量进行观察、读取等研究。
由于信号从D/A转换器出来的模拟信号量是比较微弱的,因而需要对所得到的信号量进行放大
3软件设计
通过单片机AT89C51的P1.0口输出方波,而方波的输出周期通过控制小键盘来实现,与单片机相连的数模转换模块DAC0832,它通过连一个I/V转换电路后输出正弦波和锯齿波,其波形的周期也是通过控制小键盘来实现的。
在该系统中,应有高可靠性、抗干扰性,在断电或出现故障时有保护、数据存储和复位功能。
择的是汇编语言,用助记符和标号地址编写的程序称为汇编语言源程序,其作用相当于人们直接用指令的机器码以及指令地址编写程序。
3.1初始化程序
初始化程序模块主要进行设置定时器、串行口的工作方式,设置波形的类型、幅值和频率,并在显示器上显示提示字符12345678等工作。
这部分程序如下:
MOVTMOD,#02H;设置定时器0为方式2工作
MOVTL0,#7FH;置初值
MOVTH0,#7FH
CLRTR0;不启动
MOVSCON,#00H;将串行口初始化为方式0
MOVDPTR,#0FFFDH;IC3的地址送DPTR
MOVA,#0FFH
MOVX@DPTR,A;输出波形的幅值初始化为10V
MOVDPTR,#0FFFEH;IC4的地址送DPTR
MOVA,#80H
MOVX@DPTR,A;输出设定为0
MOVWAVKD,#01H;波形类型初始化为1,即正弦波
3.2正弦波的产生程序
正弦波产生程序流程图如图4.1
图4.1正弦波产生程序流程图
其程序清单如下:
SETBTRO
SINWAV:
MOVRO,#00H;查表指针初始化为0
SINLP1:
MOVDPTR,#SINTAB;正弦波函数表地址送DPTR
MOVA,R0
MOVCA,@A+DPTR;
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVX@DPTR,A;输出数据给D/A
SINLP2:
JNBTFO,SINLP2;由定时器控制频率
CLRTFO
INCRO
CJNERO,#13H,SINTAB;
SINLP3:
MOVDPTR,#SINTAB;正弦波函数表表地址送DPTR
MOVA,RO
MOVCA,@A,RO
MOVCA,@A+DPTR;
MOVDPTR,#FFFEH;IC4F地址送DPTR
MOVX@DPTR,A
SINLP4:
JNBTFO,DINLP4;由定时器控制频率
CLRTFO
DECRO
CJNERO,#OOH,SINLP3;
SINLP5:
MOVDPTR,#SINTAB;正弦波涵数表表地址送DPTR
MOVA,RO
MOVCA,@A+DPTR;
CPLA;取反
MOVDPTR,#OFFFEH;IC4地址送DPTR
MOVX@DPTR,A;输出数据给D/A
SINLP6:
JNBTFO,SINLP6;由定时器控频率
CLRTFO
INCRO
CJNERO,#13H,SINLP6;
SINLP7:
MOVDPTR,#SINTAB;正弦波函数表地址送DPTR
MOVA,R0
MOVCA,@A+DPTR;
CPLA;取反
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVX@DPTR,A
SINLP8:
JNBTF0,SINLP8;由定时器控制频率
CLRTF0
DECR0
CJNER0,#00H,SINLP7;
SJMPSINWAV;输出下一个周期
SINTAB:
DB7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H
DB0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH
3.3三角波的产生程序
三角波产生程序流程图如图4.2
图4.2三角波产生程序流程图
程序清单如下:
SETBTR0
TRIWAV:
MOVR0,#00H;查表指针初始化为0
TRILP1:
MOVDPTR,#TRITAB;正弦波函数表地址送DPTR
MOVA,R0
MOVCA,@A+DPTR;
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVX@DPTR,A;输出数据给D/A
TRILP2:
JNBTF0,TRILP2;由定时器控制频率
CLRTF0
INCR0
CJNER0,#13H,TRILP1;
TRILP3:
MOVDPTR,#TRITAB;正弦波函数表地址送DPTR
MOVA,R0
MOVCA,@A+DPTR;
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVX@DPTR,A
TRILP4:
JNBTF0,TRILP4;由定时器控制频率
CLRTF0
DECR0
CJNER0,#00H,TRILP3;
TRILP5:
MOVDPTR,#TRITAB;正弦波函数表地址送DPTR
MOVA,R0
MOVCA,@A+DPTR;
CPLA;取反
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVX@DPTR,A;输出数据给D/A
TRILP6:
JNBTF0,TRILP6;由定时器控制频率
CLRTF0
INCR0
CJNER0,#13H,TRILP6;
TRILP7:
MOVDPTR,#TRITAB;正弦波函数表地址送DPTR
MOVA,R0
MOVCA,@A+DPTR;
CPLA;取反
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVX@DPTR,A
TRILP8:
JNBTF0,TRILP8;由定时器控制频率
CLRTF0
DECR0
CJNER0,#00H,TRILP7;
SJMPTRIWAV;输出下一个周期
TRITAB:
DB7FH,86H,8DH,94H,9BH,0A2H,0A9H,0B0H,0B7H,0BEH
DB0C5H,0CCH,0D3H,0DAH,0E1H,0E8H,0EFH,0F6H,0FDH
3.4锯齿波的产生程序
锯齿波产生程序流程图如图4.3
图4.3锯齿波产生程序流程图
程序清单如下:
SETBTR0
SOWWAV:
MOVDPTR,#0FFFEH;IC4地址送DPTR
MOVR0,#00H;波形输出初值为0
SOWLP1:
MOVA,R0
MOVX@DPTR,A;输出数据给D/A
SOWLP2:
JNBTF0,SOWLP2;由定时器控制频率
CLRTF0
INCR0;R0加1
SJMPSOWLP1
3.5方波的产生程序
方波产生程序流程图如图4.4
图4.4方波产生程序流程图
其程序清单如下:
SETBTR0
BOXWAV:
MOVDPTR,#0FFFEH;IC4地址送DPTR
BOXLP1:
MOVA,#0FFH;高脉冲
MOVX@DPTR,A;输出数据给D/A
BOXLP2:
JNBTF0,BOXLP2;由定时器控制频率
CLRTF0
MOVA,#00H;低脉冲
MOVX@DPTR,A;输出数据给D/A
BOXLP3:
JNBTF0,BOXLP3;由定时器控制频率
CLRTF0
SJMPBOXLP1
3.6显示程序
显示程序模块主要用于初始化显示、键入数据的显示,其中初始化显示程序在显示电路的调试部分已给出,这里不再重复。
下面就键入数据的显示程序作一说明。
本显示器由8个7段LED组成。
其中,L1~L4四位用于显示频率;L5~L7三位用于显示幅值,L6的小数点常亮,显示范围是00.0~99.9V,满足本波形发生器的幅值要求;L8用于显示波形类型,1为正弦波,2为方波,3为三角波,4为锯齿波。
输入数据通过查表转换为对应显示码,然后存于单片机内存30H~37H中。
由于采用单片机的串口外接串入并出移位寄存器驱动显示,越早写入串口的数据移到离单片机越远的显示器。
这样显示码的存储顺序应和显示器的次序刚好相反,即L8的显示码存于30H中,L7~L5的显示码存于31H~33H,L4~L1的显示码存于34H~37H中。
显示时,将30H~37H中的显示码依次取出,写入单片机的串口中即可。
程序清单如下:
DISP8:
MOVR0,#30H;显示指针初始化为指向第一个数
MOVSCON,#00H;将串行口初始化为方式0
DISP80:
MOVA,@R0;显示码送A
MOVSBUF,A;由串行口发送到7段LED上显示
DISP81:
JNBTI,DISP81;等待本次串行输出完成
ACALLDLAY1;延时一段时间
CLRTI;清发送中断标志
INCR0;准备查下一个数
CJNER0,#38H,LOOP;看8个数是否已输出显示完,未显示完,则继续
RET;已显示完,则退出
对于一个复杂的软件,一定要有一个软件总流程图,以便反映各个软件子模块间的内在联系,表达各个子模块的功能。
根据对软件任务的讨论,得到波形发生器的软件总流程图如图4.5所示
图4.5系统总程序流程图
4系统调试
4.1系统硬件调试
一个单片机应用系统经过方案论证、硬件设计、印刷版的布局、加工和焊接包括软件的编制,通常不可能一次成功,不可避免地要出现一些错误,这就要靠调试来解决。
调试的次序一般是先易后难,后面的调试应尽可能采用以前已调好的电路,各单元电路(或称作单元模块)都调好以后,再进行系统总调。
对于本波形发生器,其硬件电路的调试可以按如下步骤进行。
1)硬件电路的总体检查
在一块电路试验板上,焊接好电路,按实际电路图插好元器件,连好线。
在接上电源之前,用万用表粗略检查电路的正确性,尤其是要检查电源和地之间的电阻。
对于本波形发生器来讲,电源和地之间的电阻应为1k欧以上,若太小,应检查电源和地之间是否有短路现象或电源接错现象或有不良元器件。
确保电源
和地无故障之后,再通电,然后检查各电源+5V、+12V和—12V电压数值的正确性。
排除可能出现的故障后,再进行各单元电路调试。
2)单元电路调试
①单片机最小系统调试
按照前面设计的单片机最小系统和电源,焊接并插上相应的元器件,连好线,检查正确无误后,接上电源,用示波器测试单片机的时钟波形。
若时钟波形和频率正确,则进行下一步检查。
切断电源,空出单片机AT89C51的位置,并在此位置上插入仿真器的40芯仿真头。
连好相应线,检查正确无误后,接上电源,然后启动仿真器,检查地址锁存等电路的正确性。
②波形输出电路调试
按电路接线方法,我们可以知道D/A转换器IC3和IC4的地址分别为0FDH和0FEH,向着两个地址分别写入相应的数据后,若电路正确就启动了它们的D/A转换,若这时运放IC6和IC8输出的电压值相符,则说明波形输出电路正确。
4.2系统软件调试
首先,将源程序进行汇编,若汇编未通过,则汇编程序会提示出错类型,比如操作码错、缺少操作数、跳转出范围、符号未定义、缺少“,”等常见错误。
经过修改后再进行汇编,若这时提示汇编成功,保存目标文件,则说明源程序的指令使用没有错误。
但并不表示程序没有错误,还必须经过仿真调试,仿真通过才说明程序设计正确。
接下来要进行实物仿真调试,在用户电路板上插好仿真头,接好通信电缆,接通电源,运行仿真程序。
在进行实物仿真之前,要选择正确的仿真头、通信口、通信协议和波特率等,并设置用户程序空间和数据空间所处的位置(用户板上或仿真头)。
然后,装入前面的提示符显示程序,汇编并执行。
若在用户板上的8个七段LED显示器上显示的结果是“12345678”,则说明提示符程序设计完全正确。
其他软件模块的调试方法类似。
4.3系统整体调试
在系统的硬件各软件分别调试成功后,可以进行系统的整体调试.先用仿真器进行调试,插好仿真头,接通电源,启动仿真器,将本波形发生器的系统软件
装入仿真器中,并运行,调试系统的整体配合的正确性,直到满意为止。
5设计总结
小结:
本设计基本上达到了预期设计目标。
本设计是通过大量阅读国内外相关文献,总结了波形发生器、AT89C51和DAC0832还有汇编语言的各自的特点的基础上而提出的。
收获:
1.本设计采用了单片机技术来设计波形发生器,使波形发生器操作和使用都非常方便;
2.本文比较了不同系列的单片机的功能和特性,最终选取了AT89C51单片机,研究了系统各个模块的特点,分别列写了各个模块的流程图和汇编程序,使得具体工作有的放矢,很好的满足了要求;
3.经过本次毕业设计,作者对开发单片机应用系统的全过程得到了进一步的了解和体会。
意见和建议:
1.由于个人能力和时间上的限制,汇编程序及系统程序还略有不足和粗糙,在考虑问题的全面性上还有一定的欠缺;
2.每一个处理阶段的程序模块的优化和各个模块的衔接性有待增强。
参考文献
[1]蒋廷彪,刘电霆,高富强,方华.单片机原理及应用(MCS-51).重庆:
重庆大学出版社,2003
[2]刘南平,吉红.模拟电子技术.北京:
科学出版社,2005.9.153-183
[3]李朝青.单片机原理及接口技术[M].北京:
航空航天大学出版社,1994
[4]赵亮,侯国锐.单片机C语言编程与实例.北京:
人民邮电出版社,2003
[5]陈光东,赵性初.单片机微型计算机原理与接口技术.第二版.武汉:
华中科技大学出版社,1999
[6]江思敏,姚鹏翼,胡荣等.Protel电路设计教程.北京:
清华大学出版社,2002
[7]谢自美.电子线路设计·实验·测试.第二版.武汉:
华中科技大学出版社,1999
[8]康光华.电子技术基础模拟部分.第四版.高等教育出版社
[9]马忠梅,马岩,张凯,籍顺心.单片机的C语言程序设计.北京:
航空航天大学出版社,1997
[10]彭善琼,丁长松.一种新型信号发生器的设计与实现(吉首大学物理科学与信息工程学院,湖南省吉首市416000)电子工程师2007年2月