收藏 分享(赏)

北理工微机实验四.docx

上传人:weiwoduzun 文档编号:4465492 上传时间:2018-12-29 格式:DOCX 页数:10 大小:252KB
下载 相关 举报
北理工微机实验四.docx_第1页
第1页 / 共10页
北理工微机实验四.docx_第2页
第2页 / 共10页
北理工微机实验四.docx_第3页
第3页 / 共10页
北理工微机实验四.docx_第4页
第4页 / 共10页
北理工微机实验四.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、实验 4 A/D和 D/A转换一、 实验目的1了解 A/D 转换的基本原理,掌握 ADC0809 芯片的使用方法。2了解 D/A 转换的基本原理,掌握 DAC0832 芯片的使用方法。3了解直流电机控制的基本方法。二、 实验内容与步骤(一)A/D 转换部分1. 接线: CS /0809 接 Y3 /IO 地址IN0 /0809 接 05V /直流信号EOC 接 总线的 IRQ2. 实验电路原理图如图 1.通过实验台左下角电位器 RW1 输出 0 5V 直流电压送入 ADC0809 通道 0(IN0),利用 debug 的输出命令启动 A/D 转换器,输入命令读取转换结果,验证输入电压与转换后数

2、字的关系。启动 IN0 开始转换: OUT 298H读取转换结果: IN 298H图 1 模数转换电路3. 用万用表测量 CLOCK、ADD-C、ADD-B、ADD-A 在实验系统上如何联系的?4. 编程按中断方式采集 IN0 输入的电压,在屏幕上显示出转换后的数据(用 16 进制数)。5. 考虑如果采用 IN7 输入的电压,启动开始转换和读取转换结果的地址应该是多少?6. 按查询方式采集 IN0 输入的电压,软硬件如何实现? 编程提示1. ADC0809 的 IN0 口地址为 298H.2. IN0 单极性输入电压与转换后的数字的关系为:其中,为输入电压,为参考电压,这里的参考电压为+5V

3、电源。3. 一次 A/D 转换的程序可以为:MOV DX , portOUT DX , AL;延时IN AL , DX(二)D/A 转换部分1. 接线: CS /0832 接 Y2 /IO 地址用万用表测量 WR2 和 XFER 在实验系统上如何联系的?2. 实验电路原理如图 2 所示:图 2 DAC0832电路原理图DAC0832 采用单缓冲方式,具有单双极性输入端 (图中的 Ua、Ub),利用 debug 输出命令(Out 290 数据)输出数据给 DAC0832,用万用表测量单极性输出端 Ua 及双极性输出端 Ub 的电压,验证数字与电压之间的线性关系。3. 编程产生以下波形(从 Ub

4、输出,用示波器观察)(1)锯齿波 (2 )正弦波 编程提示1. 8 位 D/A 转换器 DAC0832 的口地址为 290H,输入数据与输出电压的关系为:(UREF 表示参考电压 ,N 表示数数据) ,这里的参考电压为 PC 机的+5V 电源。2. 产生锯齿波只须将输出到 DAC0832 的数据由 0 循环递增。产生正弦波可根据正弦函数建一个下弦数字量表,取值范围为一个周期,表中数据个数在 16 个以上。3. 参考流程图设计(三)直流电机转速控制1. 按图 5 线路接线:图 5 直流电机连线在实验时,我们对实验进行了改进,考虑到拿 8255 去做,只有开关的几种状态,因此我们使用 ADC080

5、9 对电位器的采样值来控制电机转速,从而实现了电机速度的连续可调。CS /0832 接 Y2 /IO 地址UB /0832 接 直流电机 DJCS /0809 接 Y3 /IO 地址IN0 /0809 接 05V /直流信号EOC 接 总线的 IRQ三、程序代码及注释3.1 ADC0809程序;ADC0809DATAS SEGMENT ;数据段PORT_ADC EQU 298HSPACE DB 13,$INT_SEG DW ?;保存中断向量段基址的变量 INT_OFF DW ?;保存中断向量偏移量的变量INT_SOR DB ?;定义保存中断屏蔽字的变量DATAS ENDSSTACKS SEGM

6、ENT ;堆栈段STA DB 256 dup(?)TOP EQU SIZE STASTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSMAIN PROC FAR ;主函数MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AX MOV SP,TOP ;建立堆栈指针;初始化 0B 号中断向量PUSH ESPUSH BX ;保护MOV AL,0BH ;指定中断号,0BH 对应 IRQ3MOV AH,35H ;取该中断向量INT 21HMOV INT_SEG,ES ;保存向量段基址MOV INT_OFF,B

7、X ;保存向量偏移地址CLI ;中断允许标志位清零POP BXPOP ES;填写中断向量表PUSH DSMOV AX,SEG INTPMOV DS,AX;中断服务程序入口段基址送 DSMOV DX,OFFSET INTP;中断服务程序入口偏移量送 DXMOV AL,0BH ;IRQ3 中断类型号MOV AH 25H ;功能号INT 21HPOP DS IN AL,21HMOV INT_SOR,AL ;保存原中断屏蔽字AND AL,11110111B ;开放 IRQ3 的中断请求OUT 21H,ALSTI ;开中断 LO:MOV DX,PORT_ADCOUT DX,AL ;启动 ADHLTMOV

8、 CX, 0FFFFHLOOP $JMP LOEND_PRO:MOV AX,INT_SEG ;恢复中断向量MOV DS,AXMOV DX,INT_OFFMOV AL,0BHMOV AH,25HINT 21HMOV AL,INT_SOROUT 21H,ALSTIMOV AH,4CHINT 21H ;结束程序MAIN ENDPINTP PROCMOV DX,PORT_ADCIN AL,DX ;读 ADC 数据CALL DISPLAY ;显示;OUT DX,AL ;启动下一次 ADC 转换MOV AL,20H ;EOI 结束OUT 20H,ALIRETINTP ENDPDISPLAY PROCMOV

9、 AH,0MOV CL,4SHL AX,CL ;AH 中高 4bitSHR AL,CL ;AL 中低 4bitPUSH AXMOV AL,AHCMP AL,10 ;AL10JB DISP1JMP DISP2DISP1: ;显示高 4bitADD AL,30H ;30H-39HMOV DL,AL ;显示MOV AH,2INT 21HJMP DISP_NEXTDISP2:SUB AL,10ADD AL,41H ;41H-AMOV DL,AL ;显示MOV AH,2INT 21HDISP_NEXT:POP AXCMP AL,10JB DISP3JMP DISP4DISP3: ADD AL,30H ;

10、0-9MOV DL,AL ;显示MOV AH,2INT 21HJMP DISP_ENDDISP4:SUB AL,10ADD AL,41HMOV DL,ALMOV AH,2INT 21HDISP_END:MOV DL,48H ;显示MOV AH,2INT 21HLEA DX,SPACE ;回车换行MOV AH,9INT 21HRETDISPLAY ENDP CODES ENDSEND MAIN3.2 DAC0832程序;DAC0832DATAS SEGMENT ;数据段PORT_DAC EQU 290HLEN DB 32DATA_SIN DB 80h, 96h, 0aeh, 0c5h, 0d8h

11、, 0e9h, 0f5h,0fdh ;正弦表DB 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hDB 80h,66h,4eh,38h,25h,15h,09h,04hDB 00h,04h,09h,15h,25h,38h,4eh,66hDATA_JUCHI DB 0H,1H,2H,3H,4H,5H,6H,7H;锯齿波DB 8H,9H,0AH,0BH,0CH,0DH,0EH,0FHDB 10H,0FH,0EH,0DH,0CH,0BH,0AH,9HDB 8H,7H,6H,5H,4H,3H,2H,1HDATAS ENDSSTACKS SEGMENT ;堆栈段STA DB 2

12、56 dup(?)TOP EQU SIZE STASTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSMAIN PROC FAR ;主函数MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AX MOV SP,TOP ;建立堆栈指针MOV DX,PORT_DACINIT_LO: MOV BH,LEN;LEA SI,DATA_SINLEA SI,DATA_JUCHISEND_LO: MOV AL,SIMOV CL,3SHL AL,CLOUT DX,AL ;向 DA 送数据INC SIDEC BHCMP

13、BH,0 ;一个周期已完成JZ INIT_LOMOV AH,1 ;检测按键INT 16HJZ SEND_LOMOV AH,4CH ;结束INT 21HMAIN ENDPCODES ENDSEND MAIN3.3 利用 AD采样值调速直流电机(PWM);PWM_motorDATAS SEGMENT ;数据段PORT_ADC EQU 298HPORT_DAC EQU 290HDUTY DB 0 ;保存 AD 采样数据SPACE DB 13,$INT_SEG DW ? ;保存中断向量段基址的变量 INT_OFF DW ? ;保存中断向量偏移量的变量INT_SOR DB ? ;定义保存中断屏蔽字的变量

14、DATAS ENDSSTACKS SEGMENT ;堆栈段STA DB 256 dup(?)TOP EQU SIZE STASTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSMAIN PROC FAR ;主函数MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AX MOV SP,TOP ;建立堆栈指针PUSH ES ;初始化 0B 号中断向量PUSH BX ;保护MOV AL,0BH ;指定中断号,0BH 对应IRQ3MOV AH,35H ;取该中断向量INT 21HMOV INT_SEG,ES

15、;保存向量段基址MOV INT_OFF,BX ;保存向量偏移地址CLI ;中断允许标志位清零POP BXPOP ES;填写中断向量表PUSH DSMOV AX,SEG INTPMOV DS,AX;中断服务程序入口段基址送 DSMOV DX,OFFSET INTP;中断服务程序入口偏移量送 DXMOV AL,0BH ;IRQ3 中断类型号MOV AH,25H ;功能号INT 21HPOP DS IN AL,21HMOV INT_SOR,AL ;保存原中断屏蔽字AND AL,11110111B ;开放 IRQ3 的中断请求OUT 21H,ALSTI ;开中断 MOV DX,PORT_ADCOUT

16、DX,AL ;启动 ADMOV BL, 0LO: MOV AL, 0FFHMOV AH, DUTY;AND AH, (0FFH - 111B)CMP BL, AHJB SKIP_ZEROMOV AL, 128SKIP_ZERO:MOV DX,PORT_DACOUT DX,AL ;向 DA 送数INC BL;MOV CX,10 ;延时;LOOP $JMP LOEND_PRO:MOV AX,INT_SEG ;恢复中断向量MOV DS,AXMOV DX,INT_OFFMOV AL,0BHMOV AH,25HINT 21HMOV AL,INT_SOROUT 21H,ALSTIMOV AH,4CHINT

17、 21H ;结束程序MAIN ENDPINTP PROCPUSH DXPUSH CXPUSH AXMOV DX,PORT_ADCIN AL,DX ;读 ADC 数据MOV DUTY, AL ;SAVE THE SAMPLED DUTYCALL DISPLAY ;显示MOV DX,PORT_ADCOUT DX,AL ;启动下一次 ADC 转换MOV AL,20H ;EOI 结束OUT 20H,ALPOP AXPOP CXPOP DXIRETINTP ENDPDISPLAY PROCMOV AH,0MOV CL,4SHL AX,CL ;AH 中高 4bitSHR AL,CL ;AL 中低 4bit

18、PUSH AXMOV AL,AHCMP AL,10 ;AL10JB DISP1JMP DISP2DISP1: ;显示高 4bitADD AL,30H ;30H-39HMOV DL,AL ;显示MOV AH,2INT 21HJMP DISP_NEXTDISP2:SUB AL,10ADD AL,41H ;41H-AMOV DL,AL ;显示MOV AH,2INT 21HDISP_NEXT:POP AXCMP AL,10JB DISP3JMP DISP4DISP3: ADD AL,30H ;0-9MOV DL,AL ;显示MOV AH,2INT 21HJMP DISP_ENDDISP4:SUB AL

19、,10ADD AL,41HMOV DL,ALMOV AH,2INT 21HDISP_END:MOV DL,48H ;显示MOV AH,2INT 21HLEA DX,SPACE ;回车换行MOV AH,9INT 21HRETDISPLAY ENDP CODES ENDSEND MAIN四、实验结果及分析1)对 ADC0809 芯片进行正确连线,然后用实验板上的逻辑笔测量 CLOCK、ADD-C、 ADD-B、ADD-A,发现其电平均为低电平,因此在实验系统上这三条线均为低电平,选中的是 ADC0809 的通道 IN0.运行 ADC0809 的中断程序,拧动电位器,以 16 进制,显示 AD 转换

20、的结果:采样值以 16 进制显示,如图,此时显示为 5EH.2)运行 DAC0832 的程序,将示波器接在 Ub 脚,在示波器上可以看到完整的正弦波。然后将正弦表换成锯齿波表,可以在示波器上看到锯齿波,除此之外,我们还做了三角波和 PWM 波的输出,为以下的直流电机调速做准备。示波器的输出波形如下图所示:3)直流电机在实验时,我们对实验进行了改进,考虑到拿 8255 去做,只有开关的几种状态,因此我们使用 ADC0809 对电位器的采样值来控制电机转速,从而实现了电机速度的连续可调。我们通过拧动电位器来改变 ADC 的采样值,通过 ADC 的采样值(0255)来控制输出PWM 波形的占空比。五

21、、心得体会在本次实验的内容为对 ADC0809 和 DAC0832 的编程,以及直流电机的调速控制,整体上来说,实验比较简单,进行比较顺利。 在 ADC0809 中断程序设计中,遇到了一些问题,运行程序后发现屏幕上并没有显示任何字符。对程序进行分析和调试,推测可能发生的问题,首先判断是否进入中断,检查中断初始化和写中断向量表的程序段,均未发现问题,在中断服务程序里设置断点,然后运行程序,发现程序在断点处停止,经检查发现,中断服务程序中忘记发送 EOI 结束符,改正后 AD 的中断程序运行正常,将字符以 16 进制显示。在 DAC0832 的实验里,用 Matlab 生成一个 32 个数据的正弦

22、表,然后根据 DDS 的基本原理将正弦表输出,在示波器上可以看到正弦波。至于锯齿波,我们开始想的是,利用一个计数器 CX 将计数值递增,然后递减,输出即可。后来发现输出的锯齿波淹没在噪声里,分析原因为信噪比太低,因此对每个输出的数据 AL 进行左移 4 位操作,相当于对其进行放大,从而得到了较好的锯齿波的波形,之后我们分别进行了三角波和方波的输出,并且可以产生占空比可调的 PWM 波,从而对直流电机进行控制。在进行直流电机实验时,我们没有拘泥于讲义,考虑到拿 8255 去做,只有开关的几种状态,因此我们使用 ADC0809 对电位器的采样值来控制电机转速,从而实现了电机速度的连续可调,我们通过电机调速的程序成功的将 ADC 和 DAC 的控制集中到了一个程序中,更好的理解了 AD 和 DA 的工作过程,深化了课上所学的理论基础。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 中学实验

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报