《微机原理与接口技术》课程设计报告书课题:利用DAC设计波形发生器学院:计算机科学与技术班级:计 091 班姓名:王骏(0913022030)沈志轩(0913022033)徐晓龙(0913022029)指导教师:顾辉提交日间:2012年6月17日目录一、引言 (3)二、设计目的 (3)三、设计内容及要求 (3)四、选用器材 (4)五、设计原理及方案 (4)六、硬件设计 (5)七、软件设计 (9)八、调试方法与结果 (15)九、收获、体会 (17)十、参考文献 (18)一.引言波形发生器是一种常用的信号源,广泛的应用于电子电路、自动控制系统和教学实验等领域,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源。
由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察。
测量被测仪器的输出响应,以分析确定它们的性能参数。
信号发生器是电子测量领域中最基本、应用最为广泛的一类电子仪器。
它可以产生多种波形信号,如锯齿波、三角波、梯形波等,因而广泛应用于通信、雷达、导航、宇航等领域。
本设计正是基于数模转换原理,采用8086最小系统经数模转换芯片DAC0832设计并制作出了多功能信号发生器。
用该方法设计的多功能信号发生器具有频率稳定、幅值稳定、波形失真度低、原理简单等特点。
二、设计目的(1)掌握方波,三角波,锯齿波,正弦波函数发生器的原理及设计方法。
(2)掌握8086的工作原理,电路连接以及其最小系统的设计。
(3)了解数模转换芯片的的工作方式和使用。
(4)学会用proteus 画电路原理图。
三、设计内容及要求3.1、设计要求利用DAC设计一个波形发生器,能分别产生三角波、正弦波、锯齿波和方波,要求自行设计输出波形的切换方式。
3.2、设计内容⑴以8086为CPU。
利用D|A转换器,编程产生锯齿波,正弦波,三角波,方波信号。
输出上述四种波形。
⑵波形的控制由接在8255上的开关的实现:设计四个开关,KEY1,KEY2,KEY3,KEY4,分别控制输出正弦波、方波、三角波和锯齿波波形。
⑶接在8255上的数码管显示4个数1、2、3、4分别代表三角波、正弦波、锯齿波、方波。
⑷由接在8253上的扬声器产生四种声音do、ri、mi、fa分别代表三角波、正弦波、锯齿波、方波。
四、选用器材五、设计原理及方案5.1设计原理D/A转换器产生各种波形的原理:利用D/A转换器输出的模拟量与输入数字量成正比关系这一特点,将D/A转换器作为微机输出接口,CPU通过程序向D/A转换器输出随时间呈现不同变化规律的数字量,则D/A转换器就可输出各种各样的模拟量,如方波、三角波、锯齿波、正弦波等。
8255A实现波形切换的原理:从8255A的C口读入外接开关的信号,CPU读入不同信号值,从而执行不同的代码,向D/A转换器传送不同的数据,控制D/A转换器输出锯齿波、三角波、方波、正弦波和锯齿波。
5.2系统总体设计通过查阅相关的资料,本设计采用8086和数模转换芯片(DAC0832)实现波形的产生,波形的产生由程序控制,向D/A的输入端按一定的规律发送数据,经过D/A和1458输出。
总体框图如图2-1所示,此方案通过编程简化了外部电路,原理简单,容易实现。
使用4个按键共同实现正弦波,方波,三角波,锯齿波这四种常见波形的产生及产生不同声音的功能。
图2-1系统原理框图5.3系统主要功能主要功能是实现利用8086和8位D/A转换芯片DAC0832共同实现正弦波,方波,三角波,锯齿波这四种常见波形的发生,并且通过按键利用DAC接口实现波形发生器可以产生锯齿波、三角波、方波和正弦波等常用标准波形。
将8255的PB0~PB6作为数码管的控制位。
将8255 上的C口某几位分别作为这四种波的控制位,当相应的控制键按下后,出现相应的波形。
由8253的0端口产生一段信号连接到扬声器从而产生四种声音分别代表四种波。
六、硬件设计6.1芯片简介1、8086(8088)CPU引脚图(如图1):图1 图22、DAC0832(D/A转换器)引脚图(如图2):NSC公司生产的DAC0832 ,是一种内部带有数据输入寄存器的8位D/A转化器,采用CMOS工艺制成,芯片内部R-2R梯形电阻网络,用于对参考电压产生的电压进行分流,完成模数转换,转换结果以一组差动电流 IOUT1IOUT2输出各引脚的功能分述如下:VREF:参考电压输入端。
根据需要一定大小的电压,由于它是转换的基准,要求数值正确,稳定性好。
VCC:工作电压输入端。
A GAN 为模拟地,DGAN为数字地。
在模拟电路中,所有的模拟地要连在一起然后将模拟地,数字地连接到一个公共接地点。
DI7-DI0:数据输入。
可直接连接到数据总线。
I OUT1IOUT2:互补的电流输出端。
为了输出模拟电压,需加转换电路。
3、8255A(可编程并行接口)8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。
其内部还有一个控制寄存器,即控制口。
通常A口、B口作为输入输出的数据端口。
C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。
它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。
8255可编程并行接口芯片工作方式说明: 方式0:基本输入/输出方式。
适用于三个端口中的任何一个。
每一个端口都可以用作输入或输出。
输出可被锁存,输入不能锁存。
方式1:选通输入/输出方式。
这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。
方式2:双向总线方式。
只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。
引脚图(如图3):4、 8253inter8253是一种能够完成定时和计数的芯片,8253内部有3个16位计数器通道,通过对他们编程,每个计数器可以按照6种工作方式工作,并且都可以按2或10进制格式进行计数。
,最高频率为2HZ.。
8253还可以用于许多其他场合,比如可作编程方波发生器,分频器等。
引脚:1数据缓冲总线数据总线缓冲器是8253与系统总线相连时使用的接口电路,它由8位双相三态缓冲器构成,CPU用输入输出指令对8253进行读写操作的信息都由8位数据总线传输:(1)CPU在对8253进行初始化编程时,向他写入控制字。
(2)CPU向某一计时器写入计数初值。
(3)从计数器读出计数值。
2读写控制逻辑读写控制逻辑接受系统控制总线送来的输入信号,经由组合后形成控制信号,对各部分操作进行控制。
可接受的信号有:(1)CS片选,低电平有效,由数据总线经由IO端口译码电路产生。
只有CS低电平时,CPU才能对8253进行读写操作。
(2)RD读信号,低电平有效,当RD位地电平时,表示CPU正在读取所选定的计数器的通道的内容。
(3)WR写信号,低电平有效。
当WR为低电平时,表示CPU正在将计数器初值写入所选中的通道口中,或者将控制字写入内部寄存器中。
(4)A1A2 端口选择信号,改变它的值,来选择8253内三个计数器通道。
如果8253和与8位数据总线的微机相连,只要将A1A0分别与地址总相联。
如果系统采用的是8086CPU,则数据总线为16位,传输数据时,总是将低8位数据送往偶地址,将高8位送往奇地址。
3计数器8253内部包含三个完全相同俄计数器定时器通道,对3个通道的操作,完全独立的。
每个通道都包含1个8位的控制字寄存器,1个16位的减寄存器,和一个锁存器,执行部件是一个16位的减法计数器。
每个通道工作时,对输入到CLK引脚上的脉冲按2进制或10 进制格式进行计数。
每当输入一个时钟脉冲,计数器减1,当计数器的值减为0时从,从OUT引脚输出一个脉冲信号。
GATE引脚上的门控制信号,决定他是否允许计数。
6.2硬件电路设计⑴各模块电路的设计译码电路原理图按键电路⑵系统总原理图七、软件设计7.1程序流程图系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程,通过编程可得到各种波形。
周期的改变可采用插入延时子程序的方法来实现。
主程序和几种常用波形子程序的流程图如图所示。
图 3 锯齿波发生子程序流程图图 4 三角波发生子程序流程图图 5 方波发生子程序流程图图 6 正弦波发生子程序流程图7.2源程序及其说明io4=800h ;0832的地址io3=600h ;8253的地址io2=400h ;8255的地址data segmentsin_wave db 200,195,181,159,131db 100,69,41,19,5,0,0 ;正弦波幅值LED DB 06H,5BH,4FH,66H ;共阴极段码表data endscode segmentassume cs:code,ds:datastart: mov ax,data ;建立DS段地址mov ds,axmov al,00010110b ;8253通道0,16位读写,工作方3方波发生器,bcd计数mov dx,io2+6out dx,al ;送控制字call jiansan:mov Bx,255 ;255=FFHSAN3: MOV CX,BXmov al,0mov dx,io4san1: out dx,al ;三角波形上升段call delayinc alloop san1mov cx,BXmov al,BLmov dx,io4san2: out dx,al ;三角波形下降段call delaydec alloop san2mov al,192mov dx,io2out dx,alcall jiansin: mov cx,11mov bx,0mov dx,io4lea si,sin_wavesin1: mov al,[si][bx] ;正弦波下降段out dx,alcall delay1inc bxloop sin1mov cx,11sin2: mov al,[si][bx] ;正弦波上升段call delay1dec bxloop sin2mov dx,io2MOV AL,170out dx,alcall jianjuchi:mov Bx,255juchi1: mov cx,bxmov al,blmov dx,io4juchi2: out dx,al ;下降沿call delaycall delaydec alloop juchi2mov al,151mov dx,io2out dx,alcall jianfang:mov Bx,255fang1: mov al,bl ;高电平段mov dx,io4out dx,alcall delay1MOV al,0 ;低电平段call delay1mov al,143mov dx,io2out dx,alcall jiandelay proc ;延时子程序一push axpush bxpush cxpush dxmov cx,50lp0: noploop lp0pop dxpop cxpop bxpop axretdelay endpdelay1 proc ;延时子程序二push axpush bxpush cxpush dxmov cx,1250lp1: noploop lp1pop dxpop cxpop bxpop axretdelay1 endpjian proc nearjian1: mov al,10001000B;c口高四位输入MOV DX,io3+6HOUT DX,AL ;送控制字MOV AL,0MOV DX,io3+4HOUT DX,AL ;c口低四位为0即行输出为0 nokey: in al,dx ;读c口高四位and al,0f0H ;屏蔽c口低四位cmp al,0f0Hjz nokey ;无键按下则循环call delay1 ;延时in al,dxshr al,1 ;列信息存于al低四位shr al,1shr al,1shr al,1mov bl,0 ;初始列变量BL为0mov cx,4jian2: shr al,1 ;逐列检测,找出为0信号jnc jian3inc blloop jian2jian3: mov al,10010001b;c口低四位输入mov dx,io3+6hout dx,al ;送控制字mov al,0mov dx,io3+4hout dx,al ;c口高四位为0即列输出为0in al,dxand al,0fh ;屏蔽高四位cmp al,0fhjz jian1 ;出错从头来mov bh,0 ;初始行变量为0mov cx,4jian4: shr al,1jnc jian5inc bh ;初始行变量BH为0loop jian4jian5: shl bh,1shl bh,1add bh,bl ;BH为键号MOV CH,BH ;保存键号在ch中MOV AL,BH ;数码管显示波行号LEA BX,LED ;1三角波2正弦波3锯齿波4方波XLATout dx,alMOV DX,IO3+2OUT DX,ALMOV DX,IO3IN AL,DXcmp ch,0jz sancmp ch,1jz sincmp ch,2jz juchicmp ch,3jz fangjmp jian1retjian endpcode endsend start八、调试方法与结果三角波正弦波锯齿波方波九、收获、体会经过一个星期的奋战,终于完成了一个还算可以的设计,看着自己的劳动成果,心里有种说不出的感觉。