波形发生器.doc_第1页
波形发生器.doc_第2页
波形发生器.doc_第3页
波形发生器.doc_第4页
波形发生器.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理及应用课程设计题 目: 波形发生器 学 院: 电气与信息工程学院 专 业: 电气工程及其自动化 姓 名: 徐国庆 学 号: 091412233 指导老师: 任琦梅 完成时间: 2015年01月09日 成绩评定一、指导教师评语二、评分课程设计成绩评定 成绩: 指导教师签字 年 月 日5河南城建学院摘要波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。本设计是以AT89C51单片机、DAC0832芯片、74LS373锁存器及LM358运算放大器为核心应用常用电子器件通过搭建单片机最小系统及扩展电路最终实现锯齿波、梯形波、三角波、矩形波和正弦波等波形的产生。关键字:AT89C51单片机 DAC0832芯片、74LS373锁存器目录一、设计目的及意义11.1设计目的11.2设计意义1二、方案论证22.1设计要求22.2方案论证2三、硬件电路设计43.1设计思路及元件选型43.2主要芯片介绍43.2.1 DAC0832芯片介绍43.2.2单片机AT89C51介绍63.2.3 74LS373的引脚及功能83.3时钟电路和复位电路83.3.1单片机的时钟电路93.3.2单片机的复位状态93.4系统硬件总体设计103.5系统原理图10四、软件设计124.1设计思路124.2波形的产生134.2.1锯齿波的产生过程144.2.2梯形波产生过程144.2.3三角波的产生过程154.2.4方波的产生过程154.2.5正弦波的产生过程16五、调试与仿真175.1软件仿真175.2 实物制作19六、总结与体会21参考文献22附录231程序源代码232系统原理图25一、设计目的及意义1.1设计目的1利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。2我们这次的课程设计是以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、方波、梯形波等)且频率、幅度可变的函数发生器。3掌握各个接口芯片(如0832等)的功能特性及接口方法,并能运用其实现一个简单的微机应用系统功能器件。4在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习。因此,缺乏一种系统的设计锻炼。在课程所学结束以后,这样的课程设计十分有助于学生的知识系统的总结到一起。5通过这几个波形进行组合形成了一个函数发生器,使得我对系统的整个框架的设计有了一个很好的锻炼。这不仅有助于大家找到自己感兴趣的题目,更可以锻炼大家微机知识的应用。1.2设计意义波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。二、方案论证2.1设计要求设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。产生指定波形可以通过DAC来实现,不同波形产生实质上是对输出的二进制数字量进行相应改变来实现的。本题目中,方波信号是利用定时器中断产生的,每次中断时,将输出的信号按位反即可;三角波信号是将输出的二进制数字信号依次加1,达到0xff时依次减1,并实时将数字信号经D/A转换得到;锯齿波信号是将输出的二进制数字信号依次加1,达到0xff时置为0x00,并实时将数字信号经D/A转换得到的;梯形波是将输出的二进制数字信号依次加1,达到0xff时保持一段时间,然后依次减1直至0x00,并实时将数字信号经D/A转换得到的;正弦波是利用MATLAB将正弦曲线均匀取样后,得到等间隔时刻的y方向上的二进制数值,然后依次输出后经D/A转换得到。2.2方案论证信号发生器的实现方法通常有以下几种:方案一:用分立元件组成的函数发生器:通常是单函数发生器且频率不高,其工作不很稳定,不易调试。方案二:可以由晶体管、运放IC等通用器件制作,更多的则是用专门的函数信号发生器IC产生。早期的函数信号发生器IC,如L8038、BA205、XR2207/2209等,它们的功能较少,精度不高,频率上限只有300kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。方案三:利用专用直接数字合成芯片的函数发生器:能产生任意波形并达到很高的频率。但成本较高。方案四:采用AT89C51单片机和DAC0832芯片,直接连接键盘和显示。该种方案主要对AT89C51单片机的各个I/O口充分利用.P1口是连接键盘以及接显示电路,P0口连接DAC0832输出波形.这样总体来说,能对单片机各个接口都利用上,而不在多用其它芯片,从而减小了系统的成本.也对按照系统便携式低频信号发生器的要求所完成.占用空间小,使用芯片少,低功耗。综合考虑,方案四各项性能和指标都优于其他几种方案,能使输出频率有较好的稳定性,充分体现了模块化设计的要求,而且这些芯片及器件均为通用器件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。三、硬件电路设计3.1设计思路及元件选型设计思路:(一)、课设需要各个波形的基本输出。如输出锯齿波、三角波、方波、正弦波和梯形波。这些波形的实现的具体步骤:锯齿波实现很简单,只需要一开始定义一个初值,然后不断的加1,当溢出后又重初值开始加起,就这样循环下去。三角波的实验过程是先加后减,实现方法是先是从00H开始加1直到溢出后就执行减1操作,就这样不断调用这个循环。方波的实现方法是连续输出一个数,到某个时候就改变一下值,可以把值定义为正极性的,也可以是负极性。正弦波的实现是非常麻烦的。它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。(二)、通过P1口和开关SW0-SW4相连接来控制各个波形的输出。能根据SW0-SW4键状态进行波形切换,当某一按键按下时,输出相对应的波形。元件选型:单片机AT89C51最小系统,DAC0832一片,74LS373锁存器、PC机一台,LM358运算放大器。3.2主要芯片介绍3.2.1 DAC0832芯片介绍DAC0832采用双缓冲接口方式,其传送控制端接地,输入所存允许断ILE与+5V电源相连,利用一个地址码进行二次输出操作,完成数据的传送和激动转换,第一次操作室P2.6为高电平,将P0口数据线上的数据锁存于DAC0832的输入寄存器中。第二次操作是写控制信号由效,传送控制端为低电平,将输入寄存器中的内容锁存入0832的DAC寄存器中,D/A转换器便开始对锁存于DAC寄存器的8位数据进行转换,约经过1/2时钟周期后,在输出端(IOUT2、IOUT1)建立稳定的电流输出。运放的作用是将DAC0832输出的模拟电流信号转换为电压波形。DAC0832为一个8位D/A转换器,单电源供电,在+5+15V范围内均可正常工作。基准电压的范围为10V,电流建立时间为1s,CMOS工艺,低功耗20mW。DAC0832的内部结构框图如下图所示。图3-1 DAC0832内部结构框图DAC0832内部结构资料:芯片内有两级输入寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。D/A转换结果采用电流形式输出。要是需要相应的模拟信号,可通过一个高输入阻抗的线性运算放大器实现这个供功能。运放的反馈电阻可通过RFB端引用片内固有电阻。DI0DI7:数据输入线,TLL电平。ILE:数据锁存允许控制信号输入线,高电平有效。CS:片选信号输入线,低电平有效。WR1:为输入寄存器的写选通信号。XFER:数据传送控制信号输入线,低电平有效。WR2:为DAC寄存器写选通输入线。Iout1:电流输出线。当输入全为1时Iout1最大。Iout2:电流输出线。其值与Iout1之和为一常数。Rfb:反馈信号输入线,芯片内部有反馈电阻.Vcc:电源输入线(+5v+15v)Vref:基准电压输入线(-10v+10v)AGND:模拟地,摸拟信号和基准电源的参考地.DGND:数字地,两种地线在基准电源处共地比较好3.2.2单片机AT89C51介绍AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51外形及引脚排列如下图所示:图3-2 AT89C51外形及引脚排列AT89C51管脚说明:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.2.3 74LS373的引脚及功能74LS373是常用的地址锁存器芯片,它实质是一个带三态缓冲输出的8D触发器。D0D7:数据输入端;Q0Q7:数据输出端;OE:三态允许控制端,低电平有效;当OE为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线;当OE为高电平时,Q0Q7呈高阻态,既不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。LE:锁存允许端。当锁存允许端LE为高电平时,Q随数据D而变当LE为低电平时,Q被锁存在已建立的数据电平。图3-3 74ls373管脚图3.3时钟电路和复位电路单片机的时钟信号用来提供单片机内各种微操作的时间基准;复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。3.3.1单片机的时钟电路单片机的时钟信号通常有两种产生方式。一种是内部时钟方式;另一种是外部时钟方式。图3-4 单片机的时钟电路内部时钟方式只要在单片机的XTAL1和XTAL2引脚外接晶振就构成了自激振荡器,并在单片机内部产生时钟脉冲信号。外部时钟方式是把外部已有的时钟信号引入到单片机内,常用于多片单片机同时工作,已使各单片机同步。单片机的时序单位:晶振周期为时钟脉冲频率的倒数,为最小的时序单位,也称T状态;时钟周期包含两个晶振周期,也称S状态;完成一个基本操作所需要的时间称为机器周期,由6个时钟周期组成,即12个晶振周期;指令的执行时间称为指令周期,通常含有14个机器周期。3.3.2单片机的复位状态当MCS-51系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和手动复位。上电复位要求接通电源后,自动实现复位操作。手动复位是当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值。图3-5 单片机的复位电路3.4系统硬件总体设计波形的产生是通过51单片机执行某一波形发生器程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。图3-6 系统总体设计图3.5系统原理图下图为perteus绘制的系统原理图。图3-7 系统原理图四、软件设计4.1设计思路利用中断,当5个开关中有任意一个闭合时,跳转至中断程序,在中断程序中判断是哪一个按键闭合,跳转至相应的程序,执行输出波形的操作,每输出一个点之后,判断按键是否断开,如果依旧闭合,则继续输出,如果已经断开,则结束中断程序。程序如下: ORG0000H LJMPMAIN ORG0003H ;外部中断0LJMPINT00ORG0040HMAIN: MOVSP,60H ;更改堆栈指针,避免堆栈与工作寄存器区发生冲突SETBIT0 ;外部中断请求0为下降沿触发方式 SETBEA ;中断允许总开关打开SETBEX0 ;允许外部中断0中断INT00:CLREA ;关中断PUSHPSW ;现场保护PUSHAccSETBEA ;开中断JNBP1.0,IR0;如果K0键闭合,则跳转至IR0输出锯齿波 JNBP1.1,IR1;如果K1键闭合,则跳转至IR1输出梯形波 JNBP1.2,IR2;如果K2键闭合,则跳转至IR2输出三角波JNBP1.3,IR3;如果K3键闭合,则跳转至IR3输出方波 JNBP1.4,IR4;如果K4键闭合,则跳转至IR4输出正弦波INTIR:CLREA ;关中断POPAcc ;现场恢复 POPPSW SETBEA ;开中断RETI4.2波形的产生利用中断,当5个开关中有任意一个闭合时,跳转至中断程序,在中断程序中判断是哪一个按键闭合,跳转至相应的程序,执行输出波形的操作,每输出一个点之后,判断按键是否断开,如果依旧闭合,则继续输出,如果已经断开,则结束中断程序。图4-2 波形产生图4.2.1锯齿波的产生过程锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。锯齿波发生子程序如下:IR0: MOVR0,#0FEH;设置端口地址 MOVA,#00HLOOP:MOVXR0,A;写入 JBP1.0,INTIR;如果k0键已经断开,则返回INCA;A加一SJMPLOOP;循环LJMPINTIR ;返回4.2.2梯形波产生过程梯形波的实现是设置一个初值,然后进行加一,当加到某个数时延时,之后减一,减到初值时在返回到之前的操作,继续加一、延时、减一。梯形波发生子程序如下:IR1:MOVR0,#0FEH ;设置端口地址MOVA,#00HUP: MOVXR0,A ;写入JBP1.1,INTIR;如果k1键已经断开,则返回INCA ;A加一JNZUP ;循环DECA ;如果已经溢出,则减一,减一之后A的值为255LCALLDELAY ;延时 JBP1.1,INTIR;如果k1键已经断开,则返回DOWN: DECAMOVXR0,A ;写入 JBP1.1,INTIR;如果k1键已经断开,则返回JNZDOWN ;循环SJMPUP ;如果减到0,则跳转至UP,继续执行加一操作LJMPINTIR ;返回DELAY:MOVR7,#100 ;延时子程序DELAY1:MOVR6,#10NOPDELAY2:DJNZR6,DELAY2DJNZR7,DELAY1 RET4.2.3三角波的产生过程三角波的实现是设置一个初值,当加到某个值的时候,执行减一操作,减到初值时,再加一。三角波发生子程序如下:IR2:MOVR0,#0FEH ;设置端口地址 MOVA,#00HUP2:MOVXR0,A ;写入 JBP1.2,INTIR;如果k2键已经断开,则返回 INCA ;A加一JNZUP2 ;循环DOWN2:DECA ;A减一MOVXR0,A ;写入 JBP1.2,INTIR;如果k2键已经断开,则返回 JNZDOWN2 ;循环 SJMPUP2 ;如果减到0,则跳转至UP2,继续加一操作LJMPINTIR ;返回4.2.4方波的产生过程方波的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。方波发生子程序如下:IR3: MOVR0,#0FEH;设置端口地址POSI:MOVA,#00H ;给A赋值0x00MOVXR0,A ;写入 LCALLDELAY ;延时 JBP1.3,INTIR ;如果k3键已经断开,则返回NEGA:MOVA,#0FFH ;给A赋值0xFFMOVXR0,A ;写入LCALLDELAY ;延时 JBP1.3,INTIR ;如果k3键已经断开,则返回 SJMPPOSI ;跳转至POSI,继续下一个波形的输出LJMPINTIR ;返回4.2.5正弦波的产生过程正弦波的实现需要查表,每查一次表,输出一个数值,之后查下一个数值继续输出,当一个波形的256个数值全部输出之后,从头开始继续输出。方波发生子程序如下:IR4: MOVR0,#0FEH ;设置端口地址 MOVR1,#00HXX: MOVA,R1 LCALLHANSHU ;调用查表函数 MOVXR0,A ;写入 JBP1.4,INTIR;如果k4键已经断开,则返回 INCR1SJMPXX ;继续查表LJMPINTIR ;返回HANSHU: MOVDPTR,#TAB1MOVCA,A+DPTRRETTAB1:db 080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh db 0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h db 0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h,0f4h db 0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh db 0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h db 0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch db 0dah,0d8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h db 0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h db 080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h db 04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h,02fh,02dh,02bh,028h db 026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch db 00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h db 000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah db 00bh,00ch,00dh,00fh,010h,011h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h db 026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh db 04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh五、调试与仿真5.1软件仿真本次的设计主要应用了protues和keil软件进行系统设计和仿真,经过仿真后,结果较好,示波器可以正确的输出方波、正弦波、三角波、锯齿波、梯形波。函数图像如下图所示:图5-1 锯齿波图5-2梯形波图5-3 三角波图5-4 方波图5-5正弦波5.2 实物制作下图为实物制作的照片。图5-6 实物图六、总结与体会本次的设计中利用AT89C51和DAC0832以及放大器完成电路的设计,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察。在这次的软件设计中,程序设计采用的是汇编语言。汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能。但是汇编语言也存在编写的代码非常难懂,不好维护,很容易产生bug,难于调试的缺点。因此,在大型程序的设计中,多采用C语言进行程序编译。C语言简洁高效,是最贴近硬件的高级编程语言,经过多年的发展,现在已成熟为专业水平的高级语言。而且,现在单片机产品推出时纷纷配套了C语言编译器,应用广泛。不过就本次课程设计来说,汇编语言还是适用的。由于真正意义上的程序设计还不多,因此还不是很得心应手,所以在设计中遇到一些问题和一些难点。比如:在程序设计中如何实现程序结构的最优化,以达到较高的质量。这是以后设计中要注意的问题。通过这次课程设计,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的元件,而且重新温习了刚学不久的汇编语言,使我学得了许多知识,使我获益匪浅。这次课程设计,使我的动手能力得到了很大的提高,更使我们懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是我们得到的理论知识得到验证,更能增加对理论知识的理解。参考文献1毅刚,彭喜元.单片机原理与应用设计.北京:电子工业出版社.2(美)RichardBlum著;马朝晖等译;汇编语言程序设计北京:机械工业出版社3 边春远,王志强,MCS-51单片机应用开发实用子程序M.北京:人民邮电出版社.4 李朝青主编,单片机原理及接口技术(第3版)M. 北京:航空航天大学出版社.5 廖先芸,电子技术实践与实训M.北京:高等教育出版社.附录1程序源代码 ORG 0000H LJMP MAIN ORG 0003H ;外部中断0 LJMP INT00 ORG 0040H MAIN: MOV SP,60H ;更改堆栈指针,避免堆栈与工作寄存器区发生冲突 SETB IT0 ;外部中断请求0为下降沿触发方式 SETB EA ;中断允许总开关打开 SETB EX0 ;允许外部中断0中断 INT00: CLR EA ;关中断 PUSH PSW ;现场保护 PUSH Acc SETB EA ;开中断 JNB P1.0,IR0 ;如果K0键闭合,则跳转至IR0输出锯齿波 JNB P1.1,IR1 ;如果K1键闭合,则跳转至IR1输出梯形波 JNB P1.2,IR2 ;如果K2键闭合,则跳转至IR2输出三角波 JNB P1.3,IR3 ;如果K3键闭合,则跳转至IR3输出方波 JNB P1.4,IR4 ;如果K4键闭合,则跳转至IR4输出正弦波 INTIR: CLR EA ;关中断 POP Acc ;现场恢复 POP PSW SETB EA ;开中断 RETIIR0: MOV R0,#0FEH ;设置端口地址 MOV A,#00H LOOP: MOVX R0,A ;*写入 JB P1.0,INTIR ;如果k0键已经断开,则返回 INC A ;A加一 SJMP LOOP ;循环 LJMP INTIR ;返回IR1: MOV R0,#0FEH ;设置端口地址 MOV A,#00H UP: MOVX R0,A ;写入 JB P1.1,INTIR ;如果k1键已经断开,则返回 INC A ;A加一 JNZ UP ;循环 LCALL DELAY ;延时 DEC A ;如果已经溢出,则减一,减一之后A的值为255DOWN: DEC A MOVX R0,A ;写入 JB P1.1,INTIR ;如果k1键已经断开,则返回 JNZ DOWN ;循环 SJMP UP ;如果减到0,则跳转至UP,继续执行加一操作 LJMP INTIR ;返回 DELAY: MOV R7,#100 ;延时子程序 DELAY1: MOV R6,#10 DELAY2: DJNZ R6,DELAY2 NOP DJNZ R7,DELAY1 RETIR2: MOV R0,#0FEH ;设置端口地址 MOV A,#00H UP2: MOVX R0,A ;写入 JB P1.2,INTIR ;如果k2键已经断开,则返回 INC A ;A加一 JNZ UP2 ;循环 DOWN2: DEC A ;A减一 MOVX R0,A ;写入 JB P1.2,INTIR ;如果k2键已经断开,则返回 JNZ DOWN2 ;循环 SJMP UP2 ;如果减到0,则跳转至UP2,继续加一操作 LJMP INTIR ;返回IR3: MOV R0,#0FEH ;设置端口地址 POSI: MOV A,#00H ;给A赋值0x00 MOVX R0,A ;写入 LCALL DELAY ;延时 JB P1.3,INTIR ;如果k3键已经断开,则返回 NEGA: MOV A,#0FFH ;给A赋值0xFF MOVX R0,A ;写入 LCALL DELAY ;延时 JB P1.3,INTIR ;如果k3键已经断开,则返回 SJMP POSI ;跳转至POSI,继续下一个波形的输出 LJMP INTIR ;返回IR4: MOV R0,#0FEH ;设置端口地址 MOV R1,#00H XX: MOV A,R1 LCALL HANSHU ;调用查表函数 MOVX R0,A ;写入 JB P1.4,INTIR ;如果k4键已经断开,则返回 INC R1 SJMP XX ;继续查表 LJMP INTIR ;返回 HANSH

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论