基于单片机的函数信号发生器设计毕业设计.doc_第1页
基于单片机的函数信号发生器设计毕业设计.doc_第2页
基于单片机的函数信号发生器设计毕业设计.doc_第3页
基于单片机的函数信号发生器设计毕业设计.doc_第4页
基于单片机的函数信号发生器设计毕业设计.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

华东交通大学理工学院毕业设计institute of technology. east china jiaotong university 毕 业 设 计(论 文) graduation design (thesis)题 目 基于单片机的函数信号发生器设计 毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名: 日期: 毕业论文(设计)授权使用说明本论文(设计)作者完全了解*学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。 作者签名: 指导教师签名: 日期: 日期: 注 意 事 项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词 5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用a4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订3)其它目录摘 要i第1章 绪 论11.1 本课题研究背景11.2 函数发生器分类21.3 研究内容3第2章 整体设计方案42.1 方案的提出和整论42.2 设计原理5第3章 硬件设计74.1 硬件整体设计74.2 复位电路84.3 时钟电路84.4 键盘电路94.5 d/a转换模块114.5.1 dac0832转换器简介114.6 显示电路设计13第4章 软件设计144.1 设计构思144.2 主程序流程图144.3 波形产生子程序184.4 中断服务子程序204.5 按键扫描子程序214.6 显示子程序22第5章 仿真验证235.1 整体设计235.2 功能实现235.3 本章小结26结论27参考文献29摘 要 信号发生器是学习、科研领域中一种十分常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。目前使用的信号发生器大部分是函数信号发生器,且特殊波形发生器的价格昂贵。为此,为节省成本,本文利用80c51单片机构成信号发生器,可产生三角波、方波、正弦波等多种特殊波形,波形的频率可用程序控制改变。 本次设计利用80c51设计一个函数信号发生器,详细说明了其实现过程。本系统使用汇编语言编写,用80c51单片机来实现各模块功能,使用proteus进行仿真。本文描述使用汇编语言和proteus仿真实现函数信号发生器的基本功能,实现了方波、三角波、正弦波、锯齿波,频率可调为10hz、100hz、500hz、1000hz。本文给出了源程序、各模块的连接图以及仿真图,并做出了详细的分析。经测试该设计方案线路优化,结构紧凑,性能优越,满足设计要求。关键词:信号发生器;80c51;proteus;频率可调;单片机iiabstractsignal generators are learning, research in the field of a very common source, widely used in the field of electronic circuits, automatic control system and teaching experiments. most of the current signal generator is a function of the signal generator, and the price is expensive special waveform generator. for this reason, in order to save costs, we use 80c51 microcontroller constitute signal generator can generate triangle wave, square wave, sine wave and other special frequency can be controlled by changing the waveform. the design uses 80c51 design a function generator, a detailed description of its implementation process. the system is written in assembly language, using 80c51 microcontroller to achieve the function of each module, using the proteus simulation.this paper describes the use of assembly language and proteus simulation function of the basic functions of the signal generator to achieve a square wave, triangle wave, sine, sawtooth, adjustable frequency is 10hz, 100hz, 500hz, 1000hz. in this paper, the source, connection diagram and simulation diagram of each module, and make a detailed analysis. . the line has been tested and optimized design, compact structure, superior performance to meet the design requirements.key words: signal generator; 80c51; proteus; adjustable frequency; mcu34第1章 绪 论1.1 本课题研究背景 随着电子测量及其他部门对各类信号发生器的广泛需求及电子技术的迅速发展,促使信号发生器种类增多,性能提高。尤其随着70年代微处理器的出现,更促使信号发生器向着自动化、智能化方向发展。现在,许多信号发生器带有微处理器,因而具备了自校、自检、自动故障诊断和自动波形形成和修正等功能,可以和控制计算机及其他测量仪器一起方便的构成自动测试系统。当前信号发生器总的趋势是向着宽频率覆盖、低功耗、高频率精度、多功能、自动化和智能化方向发展。在科学研究、工程教育及生产实践中,如工业过程控制、教学实验、机械振动试验、动态分析、材料试验、生物医学等领域,常常需要用到低频信号发生器。而在我们日常生活中,以及一些科学研究中,锯齿波和正弦波、矩形波信号是常用的基本测试信号。譬如在示波器、电视机等仪器中,为了使电子按照一定规律运动,以利用荧光屏显示图像,常用到锯齿波产生器作为时基电路。信号发生器作为一种通用的电子仪器,在生产、科研、测控、通讯等领域都得到了广泛的应用。 但市面上能看到的仪器在频率精度、带宽、波形种类及程控方面都已不能满足许多方面实际应用的需求。加之各类功能的半导体集成芯片的快速生产,都使我们研制一种低功耗、宽频带,能产生多种波形并具有程控等低频的信号发生器成为可能1。单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:cpu、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机是所有微处理机中性价比最高的一种,随着种类的不断全面,功能不断完善,其应用领域也迅速扩大。单片机在智能仪表、实时控制、机电一体化、办公机械、家用电器等方面都有相当的应用领域。当前,8位单片机主要用于工业控制,如温度、压力、流量、计量和机械加工的测量和控制场合;高效能的16位单片机(如mcs-96、mk-68200)可用在更复杂的计算机网络。可以说,微机测控技术的应用已渗透到国民经济的各个部门,微机测控技术的应用是产品提高档次和推陈出新的有效途径2。便携式和智能化越来越成为仪器的基本要求,对传统仪器的数字化,智能化,集成化也就明显得尤为重要。平时常用信号源产生正弦波,方波,三角波等常见波形作为待测系统的输入,测试系统的性能。单在某些场合,我们需要特殊波形对系统进行测试,这是传统的模拟信号发生器和数字信号发生器很难胜任的。利用单片机的强大功能,设计合适的人机交互界面,使用户能够通过手动的设定,设置所需波形。1.2 函数发生器分类函数发生器应用广泛,种类繁多,性能各异,分类也不尽一致。函数发生器亦称信号发生器,主要作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器3。函数发生器作为一种常见的应用电子仪器设备,传统的一般可以完全由硬件电路搭接而成,如采用555振荡电路发生正弦波、三角波和方波的电路便是可取的路径之一,不用依靠单片机。但是这种电路存在波形质量差,控制难,可调范围小,电路复杂和体积大等缺点。在科学研究和生产实践中,如工业过程控制,生物医学,地震模拟机械振动等领域常常要用到低频信号源。而由硬件电路构成的低频信号其性能难以令人满意,而且由于低频信号源所需的rc要很大。大电阻,大电容在制作上有困难,参数的精度亦难以保证。体积大,漏电,损耗显著更是其致命的弱点。一旦工作需求功能有增加,则电路复杂程度会大大增加。利用单片机采用程序设计方法来产生低频信号,其频率底线很低。具有线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强,用途广泛等优点,并且能够对波形进行细微调整,改良波形,使其满足系统的要求。只要对电路稍加修改,调整程序,即可完成功能升级。1.3 研究内容本次设计是基于80c51单片机信号发生器设计,信号发生器可以产生方波、三角波、正弦波、3种波形,通过d/a转换器dac0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产10hz、100hz、500hz、1000hz的波形。在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出4。 第2章 整体设计方案2.1 方案的提出和整论常用的函数信号发生器的实现方法有如下几种:1.采用分立元件实现信号的输出,主要是通过模拟电路实现正弦信号的输出,在通过各种积分微分电路实现各种不同波形的输出。但是这种方法频率和幅值的调整比较困难,而且模拟电路受外部因素的影响较大,输出的波形难以控制。2.采用集成信号发生芯片max038输出各种波形,并通过外接电阻值改变实现对幅值和频率的调整。这种方法实现起来比较容易,但是频率和幅值的调节比较困难5。图2-1 基于max038的信号发生器原理图3.采用dac0832通过查表得方式输出需要的波形,通过单片机定时向dac转化器发送转换数据,实现不同的幅值和频率的输出。这种方法能够实现各种需要的波形的输出,成本也不高,只是在扩展外设的时候浪费了大量的接口,以后的系统扩展可能会有影响6。 4.采用dds频率合成器,能输出各种波形,而且能够轻松调节幅值和频率。dds同dsp(数字信号处理)一样,是一项关键的数字化技术。dds是直接数字式频率合成器(direct digital synthesizer)的英文缩写。与传统的频率合成器相比,dds具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。一块dds芯片中主要包括频率控制寄存器、高速相位累加器和正弦计算器三个部分。频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码;而相位累加器根据dds频率控制码在每个时钟周期内进行相位累加,得到一个相位值;正弦计算器则对该相位值计算数字化正弦波幅度(芯片一般通过查表得到)。dds芯片输出的一般是数字化的正弦波,因此还需经过高速d/a转换器和低通滤波器才能得到一个可用的模拟频率信号7。图2-2 dds的原理框图鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用元器件,容易得到,且价格便宜,使得硬件开销达最省8。2.2 设计原理 数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89c51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器cpu、随机存取存储器ram、只读存储器rom、i/o接口电路、定时器/计数器以及串行通讯接口等,只要将89c51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2-3所示9。图2-2 整体设计方案80c51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要输出波形10。第3章 硬件设计硬件原理硬件电路设计决定一个系统功能,是设计基础所在,而一般设计目标:可靠,简洁,高效,优化,好硬件电路可给程序编写带来极大优势,同时使可以很好提高该信号设计精度和灵敏度,使整个系统工作协调有序。以80c51单片机芯片作为核心处理器,编程实现各种不同类型信号,最后通过da转换输出11。4.1 硬件整体设计由频率控制模块、幅度控制模块、键盘模块和液晶显示模块组成整个系统。用单片机控制键盘和液晶显示,液晶屏显示四个参数:频率、幅值、类型和不同频率范围中频率的步进。用单片机控制两个数字电位器中的抽头位置来实现改变输出的频率和幅度的大小,运用数字电位器x9c103和icl8038共同设计的函数信号发生器。该电路能够产生稳定的正弦波信号、三角波信号、频率与占比可调节的矩形波信号,其输出频率能在1hz-imhz范围内连续调整,达到调试简单、性能稳定、使用方便等优点。其工作系统框图如下图4-1所示。4-1 整体硬件电路4.2 复位电路无论哪种类型的单片机,这些器件总要涉及到单片机的复位电路以及复位电路的设计。、单片机上电复位电路设计好与坏,将直接影响整个微机控制系统工作可靠性与稳定性。很多用户在设计完单片机控制系统,实验室可能调试成功后,但是在现场却出现“死机”和“程序跑飞”等现象产生,导致这些最主要原因可能是复位电路设计不当造成,因此设计一个很好复位电路对于单片机控制系统运行来说非常重要。复位电路连接有三种连接方式,列举一种,如图4-2所示:4-2 复位电路设计4.3 时钟电路单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。在引脚xtal1 和xtal2 外接晶体振荡器,构成了内部振荡方式。由于单片机内部有一个高增益的反相放大器,当外接晶振后,就构成了自激振荡,并产生振动时钟脉冲。晶振通常选用6mhz、12mhz、24mhz。本设计中时钟电路图如图4-3,选择了12mhz和晶振分别接引脚xtal1 和xtal2,电容c1,c2 均选择为30pf,对振荡器的频率有稳定作用,当频率较大时,正弦波、方波、三角波及锯齿波中每一点的延时时间为几微妙,故延时时间还加上指令时间才能获得较大的频率波形12。4-3 时钟电路设计4.4 键盘电路 通常单片机外部扩展键盘的方式有独立式键盘,矩阵键盘以及专门的键盘电路。独立式键盘就是一个i/o口扩展一个开关,这种方式程序编写比较容易,只需要检测单片机i/o某一时刻是否为低电平就能检测出其的按键输入情况,而且按键和i/o口一一对应,所以能够轻松识别按键的值,如图4-3所示为独立按键接口电路。本设计中采用的是3个独立的功能按键。s1用来切换现在产生的波形。当没有按下s1时信号发生器产生方波信号。第一次按下s1时,将切换成三角波信号。第二次按下s1时,将切换产生正弦波信号。第三次按下s1时,又产生方波信号。这样一直循环。s2用来调节输出的函数信号的频率。当没有按下s2时,产生的函数信号最高。当按下s2时,波形频率降低,同时还要对应向led显示缓冲区给定一个频率值提供当前频率显示所需要的数据。s2按7次一个循环。当第7次按下时恢复到最高频率输出。s3用来启动对输出的函数信号电压值测量。当s3没有按下时,单片机只向dac0832送波形数据表和显示当前波形的频率。按下s3后,单片机除了向dac0832送波形数据表外,还要每隔一小段时间对读取adc0809转换电压值,并且换算出来,送给led显示当前电压。此时不再显示当前波形频率13。4-4 独立式键盘 矩阵键盘相比独立式键盘其扩充的量大大增加,例如常见的4*4矩阵键盘占用的i/o口为4+4=8个,当需要扩充为20键输入时只需要4+5=9个i/o口,而采用独立式键盘的时候要分别用掉16个i/o口和20个i/o口,由于单片机的i/o口数量有限,很难将大量的i/o口用于,显然矩阵键盘能够大大的减少系统i/o口的使用,矩阵键盘的缺点是编写程序比较麻烦,需要上拉电阻系统的连线和元器件都增加。当采用行扫描方式读取键值时,需要4个上拉电阻,提供需要的高电平,当采用线反转法式需要采用8个上拉电阻,显然整个电路的接线都将变得更加复杂。矩阵式按键键盘中,分为行线和列线两种,行线和列线与矩阵按键开关的两端相连接,其中行线是连接到5v电源上。当没有按键按下时,行线会处于高电平状态;当有按键动作时,行线和列线将导通。这是矩阵式按键来识别按键是否按下的关键策略14。4-5 矩阵式键盘4.5 d/a转换模块4.5.1 dac0832转换器简介dac0832是双列直插式8位d/a转换器。能完成数字量输入到模拟量(电流)输出的转换。其主要参数如下:分辨率为8位,转换时间为1s,满量程误差为1lsb,参考电压为(+10-10)v,供电电源为(+5+15)v,逻辑电平输入与ttl兼容。从图3.7中可见,在dac0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ile,第二级锁存器称为dac寄存器,它的锁存信号也称为通道控制信号xfer。图4-6 dac0832引脚图图4-6中,当ile为高电平,片选信号cs 和写信号wr1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。此后,当wr1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据db的变化而变化。对第二级锁存来说,传送控制信号xfer 和写信号wr2同时为低电平时,二级锁存控制信号为高电平,8位的dac寄存器的输出随输入而变化,此后,当wr2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到dac寄存器中。 dac0832各引脚编号及其作用: 1.1号cs引脚:片选信号输入线,低电平有效; 2.2号wr1引脚:为输入寄存器的写选通信号; 3.3号agnd引脚:模拟地,模拟信号和基准电源的参考地; 4.4-7,13-16号d0-d7引脚:数据输入线,tll电平; 5.8号v ref引脚:基准电压输入(-10v+10v); 6.9号rfb引脚:反馈信号输入线,芯片内部有反馈电阻; 7.10号dgnd引脚:数字地; 8.11号iout1引脚:电流输出线,当输入全为1时,iout1最大; 9.12号iout2引脚:电流输出线,其值与iout1为一常数; 10.17号xfre引脚:数据传送控制信号输入线,低电平有效; 11.18号wr2引脚:为dac寄存器写选通输入线; 12.19号ile引脚:数据锁存允许控制信号输入线,高电平有效; 32.0号v cc引脚:电源输入线(+5v+15v)vref。本次设计选择的d/a转化器是dac0832,是一款8分辨率的d/a转换集成芯片。与微处理器完全兼容。这个da芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。d/a转换器由8位输入锁存器、8位dac寄存器、8位d/a转换电路及转换控制电路构成。at89c51单片机控制两片dac0832的原理如图4-7所示。4-7 单片机控制dac0832的d/a转换因为at89c51单片机自身便有一个64k的程序存储器,所以不用扩展外加程序存储器。由单片机编程即可由单片机输出所需要信号的数字量,再由d/a转换器将数字量转化为模拟电流输出,通过运放转化为模拟电压输出。d/a数模转换器的最大输出电压是由其输入的基准电压来控制的,所以只要能控制d/a的基准电压便可以控制输出幅度,实现幅度可调。所以设计用两片dac0832来输出信号,第一片d/a用来输出信号,第二片d/a用来控制压。其中用p0口作为两片d/a的数据总线,p2口的p2.0和p2.1口用来控制两片d/a的选通15。本文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器。dac0832。dac0832主要由8位输入寄存器、8位dac寄存器、8位d/a转换器以及输入控制电路四部分组成。但实际上,dac0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。dac0832是电流型输出,在应用时外接运放使之成为电压型输出。4.6 显示电路设计显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用led数码管显示器。而且led数码管是采用共阳极接法,当主控端口输出一个低电平后,与其相对应的数码管即变亮,显示所需数据。 本次设计要求对输出波形的频率,幅值和波形进行输出,所以要扩展显示模块,常用的显示模块lcd有7端数码管,lcd1602和12864等液晶显示屏。为了降低设计的成本和扩展的难度,本次设计选择使用7段数码管。led显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用cpu时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的16。图4-8 显示器第4章 软件设计4.1 设计构思 幅度控制:由于d/a数模转换器输出的最大幅度可以用其基准电压来控制,所以控制第二片d/a数模转换器输出给第一片d/a数模转换器的电压值就可控制信号幅度。因此,送入第二片的值是几个固定的值。由于dac0832内部具有锁存器,所以只需向第二片d/a送值一次,直到下一次改变信号幅度。 频率控制:单片机内部数据只有0、1之分,所产生的信号也都是离散信号。为了能够让单片机输出所需的数字信号,我们采用对信号采样、量化的方法来实现由单片机产生所需信号。在本设计中,对信号的四分之一周期采样19个幅度值,通过反复查表来输出幅度值,而整个信号是通过正查表和逆向查表来实现的。采样的点越密,信号失真度也就越小。两次采样点的输出时间间隔是由定时、计数器来控制的,因此,通过控制不同的计数初值就可以控制整个信号的频率。计数时间=信号周期/72。计数次数=计数时间/机器周期。对应的,计数初值=65536计数次数。单片机只能产生离散频率的信号,所以所得到的信号频率不是连续的,而是离散的频率点。由于这部分计算位数较多,不适合用单片机编程来计算计数初值,所以本设计中将各频率的计数初值算出,让单片机按控制命令来查表控制频率。正弦波和三角波的频率控制方法都与上述方法相同,而方波的频率控制是半周期计数,经过半周期只需改变输出为最大或最小电平即可17。4.2 主程序流程图主程序的流程图如图4-1所示,在程序开始运行之后,首先是对程序进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。本文中子程序的调用是通过按键的选择来实现,在取得按键相应的键值后,启动计时器和相应的中断服务程序,再直接查询程序中预先设置的数据值,通过转换输出相应的电压,从而形成所需的各种波形。在程序开始运行之后,首先是对8255a进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示。4-1 主程序设计下面说明主程序流程图的程序实现: 1.开始:org 0000h 程序开始执行,首先觉得跳转到主程序ajm main org 000bh 定时器0中断入口地址,跳转到中断服务程序ljmp tcoorg 0030h2.8255a初始化:mov dptr,#7f00h 指向8155命令字端口地址mov a,#06h 设置a口为输入,b口、c口为输出movx dptr,a 送命令字3.判定信号频率:mov dptr,#7f01h 指向a口地址movx a,dptr 读入a口的开关数据jnb acc.4,k10h 判断是否“4”号键,若是则转输出10hz信号jnb acc.5,k100h 判断是否“5”号键,若是则转输出100hz信号jnb acc.6,k500h 判断是否“6”号键,若是则转输出500hz信号jnb acc.7,k1k 判断是否“7”号键,若是则转输出1khz信号ajmp main 无键按下则返回等待4.根据频率值置新的时间常数,以10hz为例:k10h:mov 30h,#00h 显示10hzmov 31h,#00hmov 32h,#00hmov 33h,#00hmov 34h,#01hmov 35h,#00hlcall led1 调显示子程序mov tmod,#00hmov tl0,#15hmov th0,#9ehajmp pd5.显示频率值,以10hz为例k10h:mov 30h,#00h 显示10hzmov 31h,#00hmov 32h,#00hmov 33h,#00hmov 34h,#01hmov 35h,#00hlcall led1 调显示子程序6.显示子程序:led1: mov r3,#06h 设置6个led显示mov r2,#01h 选通第一位led数据mov r1,#30h 送显示缓冲区首址gn1:mov dptr,#7f03h 指向c口地址mov a,r2 位选通数据送amovx dptr,a 位选通数据送c口rl a 选通下一位mov r2,a 位选通数据送r2中保存 mov a, r1 取键值mov dptr,#tab 送led显示软件译码表首址movc a,a+dptr 查表求出键值显示的段码mov dptr,#7f02h 指向b口地址mov dptr,a 段码送显示lcall loop1 调延时子程序inc r1 指向下一位显示缓冲区地址djnz r3,gn1 循环显示6个ledret7.中断设置开中断:gn: setb tr0 启动定时器setb et0 开定时器0中断setb ea 开总中断8.判定波形:pd:jnb acc.0,ke0 判断是否“0”号键按下,若是则转方波输出jnb acc.1,ke1 判断是否“1”号键按下,若是则转正弦方波输出jnb acc.2,ke2 判断是否“2”号键按下,若是则转三角波输出jnb acc.3,ke3 判断是否“3”号键按下,若是则转锯4.3 波形产生子程序图4-2为各波形子程序的流程图。如图所示,在中断服务子程序开始后,通过判断来确定各种波形的输出,当判断选择的不是方波后,则转向对正弦波的判断,如此反复。如果选择的是方波,则用查表的方法求出相应的数据,并通过d/a转换器将数据转换成模拟信号,形成所需波形信号18。4-2 波形产生子程序设计下面说明子程序流程图的实现:1.中断服务程序开始:ljmp tco 绝对跳转到中断服务程序2.判断是否方波及处理方法:tco:cjne r7,#00h,tc1 判断是否是方波,不是则跳转mov dptr,#tab1 送方波数据表首址mov a,r6 发送数据寄存器movc a,a+dptrmov dptr,#0afffh 指向dac0832(2)movx dptr,a dac0832(2)输出mov a,r6inc a mov r6,acjne a,#32,ql1mov r6,#00hajmp ql13.判断是够是正弦波及处理方法:tc1:cjne r7,#01h,tc2 发送正弦波程序mov dptr,#tab2 送正弦波数据表首址mov a,r6movc a, a+dptrmov dptr,#0afffh 指向dac0832(2)movx dptr,a dac0832(2)输出mov a,r6inc amov r6,acjne a,#32,ql1mov r6,#00hajmp ql14.判断是否是三角波及处理方法:tc2:cjne r7,#02h,ql1 发送三角波程序mov dptr,#tab3 送三角波数据表首址mov a,r6movc a,a+dptr mov dptr,#0afffh 指向dac0832(2)movx dptr,a dac0832(2)输出mov a,r6inc amov r6,acjne a,#32,ql1mov r6,#00h ajmp ql14.4 中断服务子程序中断服务子程序是产生波形必不可少的程序,其程序流程图如下4-3所示,方波波形的实现较为简单,只需开始的时候设置一个初值然后直接输出这个值就行了,每次输出的时间根据延时来定,我们把波形分为了256个点,输出半个波形后,然后再对其置零,同样输出个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。方波的幅值大小可以不用考虑,这些可由外部的运算放大器来放大。三角波的产生:初始化后,单片机先从00h开始输出,经过规定的演示后家2h,再进过同样的时间再加2h,这样累加到ffh,一共累加了128次。到ffh后在减二,一直减到00h,这样也是128次,同样满足可一个波形取点256次的要求。这样把所得到的信号输送给8255,这样就可以从输出端得到一个连续的三角波。因为其输出端有运算放大器,可以实现对波形信号的放大。4-3 中断子程序设计4.5 按键扫描子程序本次设计由于要求对幅值和频率进行控制,所以要求用相关的按键输入,前面已经介绍了各种按键的优缺点,最后选择了独立式键盘,分别为+-频率,+-幅值,模式选择5位,共占用5个ip口,选择p2口的高5位作为按键输入。程序中的模式选择是通过mode位输入,通过设定一个模式标志位,当执行一次模式位按键程序,标志位自动+1,并指向其所指定的波形。幅值选择通过按键ampl+和ampl-输入,当执行了幅值子程序的时候,系统通过改变x9511抽头的位置,改变其vw的输出电压,通过vref改变输出电压的幅值。频率的选择则是通过freq+和freq-进行选择的,当执行频率调节子程序的时候,通过改变定时的初值实现的,当使用12m晶振时候,正弦表位256位时,理想中最大的频率可以达到4khz,当频率为10hz的时候,计数初值为390。由于系统采用的最低的初值时间为100,所以最高只能产生20hz的频率19。4-4 按键扫描子程序设计4.6 显示子程序显示部分采用动态输出的方式,通过控制两个锁存器来控制实现单个i/o分时控制输出输出数码管的段选(字形的选择)和位选(位权的选择)。如图3-5-2显示电路图中p0用于输出数据,而p2.0和p2.1用来控制寄存器的通断来控制是输出字段信息还是位权信息。通常的数码管动态显示程序都要进行延时,然后靠人眼的余光实现数据的输出,当延时时间太小的时候会出现数码闪烁甚至乱码,当延时时间设定的太大的时候,有可能出现输出断续的可能,通常需延时5ms,6位数据显示就是30ms,而按键的消抖时间不过10ms,所以时间片轮法的话会大大影响电路的正常工作,甚至不能检测出按键输入,或则按键输入的时候出现显示断续的情况,所以本才设计采用了中断显示的方法,利用定时器进行延时,设定好定时器的初值,在固定的延时时间上溢出,然后调用显示子程序显示当前的输出情况,由于定时器中断程序 执行一次只能显示一位数据,所以要设定一个全局变量的显示缓冲区和全局变量的位选标志。4-5 显示子程序设计第5章 仿真验证5.1 整体设计protues仿真软件完成函数信号发生器仿真,本设计仿真环境如图5-1所示。图5-1 基于protues的函数信号发生器仿真5.2 功能实现 三种波形的仿真波形图如下:在仿真环境下,运行仿真软件,按要求操作键盘会出现如下波形图,各个波形的仿真图不同的频率。 当“s0”键按下事将产生方波,键“s4” “s7”决定正弦波的频率,“s4”号键为10hz的频率信号,“s5”号键为100hz的频率信号,“s6”号键为500hz的频率信号,“s7”号键为1khz的频率信号。 图5-3、图5-4、图5-5为频率为10hz、100hz、500hz的正弦波,1000hz的正弦波在文中不画出来。图5-2 波形显示图5-3 10hz正弦波 图5-4 100hz正弦波 图5-5 500hz正弦波 图5-6、图5-7、图5-8为频率为10hz、100hz、500hz的三角波,1000hz的正弦波在文中不画出来。当“s0”键按下将产生三角波,键“s4”“s7”决定方波的频率,“s4”号键为10hz的频率信号,“s5”号键为100hz的频率信号,“s6”号键为500hz的频率信号,“s7”号键为1khz的频率信号。 图5-6 三角波 图5-7 三角波 图5-8 三角波 图5-9、图5-10、图5-11为频率为10hz、100hz、500hz的方波,1000hz的正弦波在文中不画出来。当“s0”键按下将产生方波,键“s4”“s7”决定方波的频率,“s4”号键为10hz的频率信号,“s5”号键为100hz的频率信号,“s6”号键为500hz的频率信号,“s7”号键为1khz的频率信号。 图5-9 方波 图5-10 方波 图5-11 方波5.3 本章小结基于单片机的函数信号发生器的设计与仿真已全部完成,所设计的函数信号发生器有一定的实用价值和经济价值。能按预期的效果通过按键实现波形切换且波形标准美观,频率稳定可调。并且在数码管上显示出波形的频率。在函数信号发生器系统的4个模块中,最重要的是主控模块,其它还有显示模块,按键模块,信号输出模块。各模块完成后,将它们组合成完整的函数信号发生器系统。结论 本次毕业设计我所涉及的题目是多功能函数信号发生器,由于是基于单片机的波形发生器,所以我才用了查表输出的方法,经过d/a转化输出需要的波形,并通过低通滤波是其输出的波形能比较的平滑。通过两个月的毕业设计,进一步的加深了我对专业课的理解和认识,毕业设计是我在大学四年的最后一堂课,也是对我大学四年所学的知识的一个最好的评估。开始设计方案,总感觉自己还是有许多的东西弄不太清楚,于是就请教同学。有一些开始的时候由于没有经验,不知如何下手,所以就去图书管找了一些书看,尽管有许多的设经验。经过自己分析各方案之后,决定用查表的方法来做。这样可以降低一些硬件设计的难度,初次设计应切合自己的水平。 回顾起此次单片机

温馨提示

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

评论

0/150

提交评论