1、波形发生器实验微机原理波形发生器实验-微机原理一、实验目的(1) 学习掌握D/A转换原理及接口设计方法。 (2) 掌握DAC0832芯片的使用方法。 (3) 掌握微机扩展D/A接口和波形发生器的方法。二、实验原理 1DAC0832芯片的原理DAC0832是双列直插式8位D/A转换器。D/A转换器是一种将数字量转换成模拟量的器件,其特点是:接收、保持和转换的数字信息,不存在随温度、时间漂移的问题,其电路抗干扰性较好。大多数的D/A转换器接口设计主要围绕D/A集成芯片的使用及配置响应的外围电路。DAC0832是8位芯片,采用CMOS工艺和R-2RT形电阻解码网络,转换结果为一对差动电流Iout1和
2、Iout2输出。DAC0832可处于三种不同的工作方式:DAC0832引脚如图2-1所示。主要性能参数如表2-1示, 表一DAC0832性能参数性能参数 参数值 分辨率 8 位 单电源 +5V- +15V 参考电压 +10V- -10V 转换时间 1Us 满刻度误差 1LSB 数据输入电平 与TTL电平兼容 其中 DAC0832可处于三种不同的工作方式: (1)直通方式 :当ILE接高电平,、和都接数字地时,DAC处于直通方式,8位数字量一旦到达DI7DI0输入端,就立即加到8位D/A转换器,被转换成模拟量。例如在构成波形发生器的场合,就要用到这种方式,即把要产生基本波形的数据存在ROM中,连
3、续取出送到DAC去转换成电压信号。 (2)单缓冲方式 :只要把两个寄存器中的任何一个接成直通方式,而用另一个锁存器数据,DAC就可处于单缓冲工作方式。一般的做法是将和都接地,使DAC寄存器处于直通方式,另外把ILE接高电平,接端口地址译码信号,接CPU的信号,这样就可以通过一条MOVX指令,选中该端口,使和有效,启动D/A转换。(3)双缓冲方式 :主要在以下两种情况下需要用双缓冲方式的D/A转换。在需要同步进行D/A转换的多路DAC系统中,采用双缓冲方式,可以在不同的时刻把要转换的数据打入各DAC的输入寄存器,然后由一个转换命令同时启动多个DAC转换。先用3条输出指令选择3个端口,分别将数据写
4、入各DAC的输入寄存器,当数据准备就绪后,再执行一次写操作,使变低同时选通3个D/A的DAC寄存器,实现同步转换。2.波形发生器原理要求能输出方波、锯齿波、三角波和正弦波,下面分别详述每一种波形是如何实现:方波:首先赋给AL 00H,然后执行OUT指令输出,然后延时一段,再赋给AL 0FFH,执行OUT指令输出,同样延时一段时间,这一直循环下去,就可以得到方波。利用键盘菜单选择,按键1时,就有方波产生。三角波:首先赋给AL 00H,然后执行OUT指令输出,在执行INC自动增1,直到AL是否加满,未满则继续,已满,AL置全“1”,然后输出数据减1,然后判断AL是否减到“0”,不为0则继续,这样一
5、直循环下去,就可得到连续的三角波。利用键盘菜单选择,按键2就有三角波产生。锯齿波:首先赋给AL 00H,然后执行OUT指令输出,在执行INC自动增1,直到AL是否加满,未满则继续,已满,就可以继续判断是否有键按下,这样一直循环下去,就可得到连续的三角波。利用键盘菜单选择,按键3就可看到三角波。正弦波Y=ASIN(X):首先利用正弦函数算出各个点,一共取了64个点,存放在内存(SIN)中,用AL指向内存首址,取第一个数,然后输出,接着内存地址加1,延时一段时间,再取下一个数,这样一直下去,直到读完64个数,并依次输出每一个点,就可得到正弦波。利用键盘菜单选择,按键4就有正弦波产生。最后按键5可退
6、出程序。 图2-5正弦波 三、实验内容设计实验线路并编写程序,实现数字信号到模拟信号的转换,输入数字量由程序给出。要求产生方波、三角波、锯齿波和正弦波,并用示波器观察输出模拟信号的波形。四、主要仪器设备PC微机一台、TD-PIT+ 实验系统一套、示波器一台。 五、实验操作方法和步骤1确认从PC机引出的两根扁平电缆已经连接在实验平台上。2首先运行CHECK程序,查看I/O空间始地址。3利用查出的地址编写程序,然后编译链接。4参考图4所示连接实验线路。5运行程序,用示波器观察输出模拟信号波形是否正确。六、实验原理图设计七、软件流程图 六、实验记录与处理(程序)程序功能:采用DAC0832芯片产生0
7、5V的方波、三角波、锯齿波及正弦波并显示转换的数字量。参考程序如下所示:IOY0 EQU 0DA00H ;片选IOY0对应的端口始地址DA0832 EQU IOY0+00H*4 ;DA0832的端口地址DANUM EQU 0FFH STACK1 SEGMENT STACK DW 256 DUP(?)STACK1 ENDSDATA SEGMENTSTR1 DB 1. Triangle Square Wave ,0ah,0dh,$ ;定义显示的字符串 方波STR2 DB 2. Triangle Delta Wave ,0ah,0dh,$ ;定义显示的字符串 三角波STR3 DB 3. Triang
8、le Sawtooth Wave ,0ah,0dh,$ ;定义显示的字符串 锯齿波STR4 DB 4. Triangle Sine Wave ,0ah,0dh,$ ;定义显示的字符串 正弦波STR5 DB 5. Exit ,0ah,0dh,$ ;定义显示的字符串 正弦波FLAG DB 0SIN DB 00H,02H,05H,09H,0FH,15H,1DH,25H DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
9、 DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH DB 0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH DB 25H,1DH,15H,0Fh,09H,05H,02H,00HDATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX MOV AX,STACK1 MOV SS,AX MOV DX,OFFSET STR1 ;显示字符串1 MOV AH,
10、9 INT 21H MOV DX,OFFSET STR2 ;显示字符串2 MOV AH,9 INT 21H MOV DX,OFFSET STR3 ;显示字符串3 MOV AH,9 INT 21H MOV DX,OFFSET STR4 ;显示字符串4 MOV AH,9 INT 21H MOV DX,OFFSET STR5 ;显示字符串5 MOV AH,9 INT 21HLOOP1: MOV AH,1 ;判断是否有按键按下 INT 16H JZ LOOP2 ;无按键则跳回继续循环,有则退出 MOV AH,0 ;读键盘 INT 16H CMP AL,31H JZ SQUARE CMP AL,32H
11、JZ DELTA CMP AL,33H JZ SAWTOOTH CMP AL,34H JNZ L05 JMP SINEL05: CMP AL,35H JNZ LOOP2 JMP QUITLOOP2: CMP FLAG,1 JZ SQUARE CMP FLAG,2 JZ DELTA CMP FLAG,3 JZ SAWTOOTH CMP FLAG,4 JZ SINE JMP LOOP1 SQUARE: MOV FLAG,1 MOV DX,DA0832 ;写00H,输出低电平 MOV AL,00H OUT DX,AL MOV CX,DANUML03: CALL DALLY LOOP L03 MOV
12、DX,DA0832 ;写0FH,输出高电平 MOV AL,DANUM OUT DX,AL MOV CX,DANUML04: CALL DALLY LOOP L04 JMP LOOP1DELTA: MOV FLAG,2 MOV AL,00H ;D/A转换起始值UP1: MOV DX,DA0832 ;启动D/A转换 OUT DX,AL CALL DALLY INC AL CMP AL,DANUM JNE UP1DOWN1: MOV DX,DA0832 OUT DX,AL CALL DALLY DEC AL CMP AL,00H JNE DOWN1 JMP LOOP1SAWTOOTH: MOV FL
13、AG,3 MOV AL,00H ;D/A转换起始值L01: MOV DX,DA0832 ;启动D/A转换 OUT DX,AL CALL DALLY INC AL CMP AL,DANUM JNE L01 JMP LOOP1SINE: MOV FLAG,4 MOV SI,OFFSET SIN ;SI指向SIN MOV CL,64 ;数据数为64个L02: MOV AL,SI MOV DX,DA0832 ;输入0832数据口 OUT DX,AL CALL DALLY INC SI ;指向下一个数据 DEC CL ;数据数减1 JNZ L02 JMP LOOP1 QUIT: MOV AX,4C00H
14、 ;返回到DOS INT 21HDALLY PROC NEAR ;软件延时子程序 PUSH CX PUSH AX MOV CX,0010HD1: MOV AX,0100HD2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RETDALLY ENDPCODE ENDS END START七、实验结果和思考题1实验结果 编译运行程序后,在操作界面中,输入1-4任意一个数字,将在示波器上产生相应的波形,再次输入一个数字(1-4)后,再次生成相应波形。其中输入数字1,将生成方波;数字2产生三角波;数字3产生锯齿波;数字4生成正弦波。退出运行界面,按数字5。 方波 锯齿波 三
15、角波2思考题(1)按键检测和输入是如何实现的?答:LOOP1: MOV AH,1 ;判断是否有按键按下 INT 16H JZ LOOP2 ;无按键则跳回继续循环,有则退出 MOV AH,0 ;读键盘 INT 16H CMP AL,31H JZ SQUARE CMP AL,32H JZ DELTA CMP AL,33H JZ SAWTOOTH CMP AL,34H JNZ L05 JMP SINEL05: CMP AL,35H JNZ LOOP2 JMP QUITLOOP2: CMP FLAG,1 JZ SQUARE CMP FLAG,2 JZ DELTA CMP FLAG,3 JZ SAWTO
16、OTH CMP FLAG,4 JZ SINE JMP LOOP1 分析:以上程序段是检测按键和输入的代码,程序核心即是调用16号DOS中断来检测按键是否按下;通过CMP指令进一步判断是哪一个键被压下。(2)如何获得正弦波的输出数据表?答:已知:数字量0FFH对应的模拟量为。正弦波的一个周期有360度,又要求用64个点的数字量来转化为模拟量,故有:360/64=5.625度。且有第一个点对应的数字量为00H。首先求第二个点对应的数字量 因为第十六点对应的数字量与模拟量刚好达到正弦波的波峰值,所以有,求出x等于02H。据此,可算出其它点的峰值,即可得出正弦波的输出数据表。(3)画出DAC0832完整的硬件原理图。(4)画出产生锯齿波和正弦波的程序流程图。答:(见图2)D/A转换实验程序流程图产生锯齿波、产生正弦波。