《北京XX大学微机原理实验报告四.doc》由会员分享,可在线阅读,更多相关《北京XX大学微机原理实验报告四.doc(14页珍藏版)》请在三一办公上搜索。
1、 本科实验报告 实验名称: A/D和D/A转换 课程名称:实验时间:任课教师:实验地点:实验教师:实验类型: 原理验证 综合设计 自主创新学生姓名:学号/班级:组 号:学 院:同组搭档:专 业:成 绩: 实验四 A/D和D/A转换一、 实验目的1、了解A/D 转换的基本原理,掌握ADC0809 的使用方法。2、了解D/A 转换的基本原理,掌握DAC0832 芯片的使用方法。3、了解直流电机控制的基本方法。二、 实验内容与步骤(一)A/D 转换部分1、接线:2、实验电路原理图下图通过实验台左下角电位器RW1 输出05直流电压送入ADC0809 通道0(IN0),利用debug 的输出命令启动/转
2、换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。启动IN0开始转换: Out 298H读取转换结果: In 298H3、用万用表测量 CLOCK、ADD-C、ADD-B、ADD-A 在实验系统上如何联系的。4、编程按中断方式采集 IN0 输入的电压,在屏幕上显示出转换后的数据(用16 进制数)。5、考虑如果采用 IN7 输入的电压,启动开始转换和读取转换结果的地址应该是多少。6、按查询方式采集 IN0 输入的电压,软硬件如何实现。编程方案1、ADC0809 的IN0 口地址为298H。2、IN0 单极性输入电压与转换后数字的关系为: 其中Ui 为输入电压,UREF 为参考电压,这里
3、的参考电压为电源。3、一次A/D 转换的程序可以为MOV DX, PortOUT DX,AL ;启动转换;延时IN AL,DX ;读取转换结果放在AL 中(二) D/A 转换部分1、接线:CS /0832 接 Y2 /IO 地址用万用表测量 WR2 和XFER 在实验系统上如何联系的。2、实验电路原理如图2,DAC0832 采用单缓冲方式,具有单双极性输出端(图中的Ua、Ub),利用debug 输出命令(Out 290 数据)输出数据给DAC0832,用万用表测量单极性输出端Ua 及双极性输出端Ub 的电压,验证数字与电压之间的线性关系。3、编程产生以下波形(从Ub 输出,用示波器观察)(1)
4、锯齿波(2)正弦波 编程方案1、8 位D/A 转换器DAC0832 的口地址为290H,输入数据与输出电压的关系为: (UREF 表示参考电压,N 表示数据),这里的参考电压为电源。2、产生锯齿波只须将输出到DAC0832 的数据由0 循环递增。产生正弦波可根据正弦函数建一个下弦数字量表,取值范围为一个周期,表中数据个数在16 个以上。3、流程图: (三) 直流电机转速控制1、按图 5 线路接线:CS /0832 接 Y2 /IO 地址UB /0832 接 直流电机DJCS /8255 接 Y1 /IO 地址PC7PC0 /8255 接 K7K0 /逻辑电平开关2、编程利用DAC0832 输出
5、一串脉冲,经放大后驱动小直流电机,利用开关K0K5 控制改变输出脉冲的电平及持续时间,达到使电机加速,减速之目的。 实验原理简述小直流电机的转速是由 Ub 输出脉冲的占空比来决定的,正向占空比越大转速越快,反之越慢。见图6 例: 在本实验中,模拟量输出 Ub 为双极性,当输入数字量小于80H 时输出为负,输入等于80H 时为0V,输入大于80H 时输出为正。因而本实验中,DAC0832 输入数字量只有2 个(80H和FFH),通过不同的延迟时间达到改变小电机转速的目的。程序框图 编程方案通过给 DAC0832 输入80H 时,Ub 为0V,给DAC0832 输入FFH 时,Ub 为5V,来控制
6、加给小电机的脉冲电平,通过控制两段延迟时间,来控制占空比。例如,我们给两段延迟系数都为0400h,来得到占空比接近于1 的脉冲。 三、实验代码及注释1、AD转换DATA SEGMENTINT0B DW 2 DUP(?)IMR DB ?P_AD DW 298HTAB DB 0123456789ABCDEFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC PAR MOV AX,DATA MOV DS,AX CLI ;关闭中断为修改中断向量表准备 PUSH ES ;保护ES和BX中的向量,防止程序出错 PUSH BX MOV AH,35H ;
7、读取0B中断向量。35H是INT21H中读取中断向量表的中断类型号 MOV AL,0BH ;使用的是0B中断,所以就读取0B中断,以上两步都是为了保护原有的0B中断 INT 21H MOV INT0B,ES ;将得到的中断向量储存起来,方便后面的恢复 MOV INT0B+2,BX POP BX POP ES PUSH DS ;保护原有的DS和DX PUSH DX MOV DX,OFFSET ADPRO PUSH BX MOV BX,SEG ADPRO ;seg是段地址 MOV DS,BX ;将段地址给DS POP BX MOV AX,250BH INT 21H POP DX POP DS IN
8、 AL,21H ;从8259中读取屏蔽字 MOV IMR,AL ;将读取的屏蔽字储存起来,为了后面的恢复 AND AL,0F7H OUT 21H,AL ;将新的屏蔽字写入到8259中 NEXT: MOV DX,P_AD MOV AL,0 OUT DX,AL ;输出到ad0809 PUSH CX ;延时等待AD转换,并检测是否有按键 MOV CX,100 ;循环100次 LOOP $ POP CX STI ;开中断,进行AD转换 MOV AH,1 INT 16H JZ NEXT CLI ;关闭中断 MOV AL,IMR ;将之前的8259的屏蔽字恢复 OUT 21H,AL ;将原屏蔽字输出到82
9、59中 PUSH DX PUSH DS MOV DX,INT0B ;将原有的0B中断向量的段地址恢复到DS中 MOV DS,DX MOV DX,INT0B+2 ;将原有的0B中断向量的偏移量恢复到DX中 MOV AX,250BH ;和之前一样,写入0B中断向量表 INT 21H POP DS POP DX MOV AX,4C00H ;结束程序 INT 21H MAIN ENDP ADPRO PROC FAR PUSH AX PUSH DX MOV DX,P_AD ;读入AD转换结果 IN AL,DX LEA BX,TAB MOV AH,0 PUSH AX SHR AX, AND AX,0FH;
10、 MOV SI,AX; MOV DL,BX+SI ;将对应的字母的ASCII的码值给DL MOV AH,2 ;显示16进制的高位的字母表示 INT 21H POP AX AND AL,0FH; MOV SI,AX; ;后面与高位的显示一样 MOV DL,BX+SI MOV AH,2 INT 21H MOV DL,0DH ;输出回车 MOV AH,2 INT 21H MOV DL,0AH ;输出换行 MOV AH,2 INT 21H MOV DX,50 DELAY: ;延时的时间是50*65536个指令周期 MOV CX,0 LOOP $ ;与之前的延时相同 DEC DX CMP DX,0 JN
11、Z DELAY MOV AL,20H ;中断子程序结尾要告知8259,中断子程序结束了 OUT 20H,AL POP DX POP AX IRET ADPRO ENDPCODE ENDS END MAIN 2、DA转换DATA segment PORT8255 EQU 288h DAPROT DW 290HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV DX,PORT8255+3 MOV AL,10001001BOUT DX,ALNEXT:MOV DX,DAPROT MOV
12、AL,80HOUT DX,ALMOV AH,1INT 16HJNZ DONE ;有输入则DA转换结束MOV DX,PORT8255+2 IN AL,DX ;读入PC0-PC7的状态MOV AH,0 ;使AH的高位置0,方便与BX进行加减运算MOV BX,400HADD AX,AX ;将输入的数扩大4倍ADD AX,AX PUSH AXSUB BX,AX ;占空比为1,则0V延时为0,所以相减GOSUB: MOV CX,0 LOOP $ ;本指令跳转到本指令起到延时作用CMP BX,0JNZ GOSUBMOV DX,DAPROT ;是0832输出+5V的电压MOV AL,0FFH OUT DX,
13、AL ;输出到0832MOV BX,0H ;为输出+5V的延时准备POP AX ;得到之前进行了4倍扩大后的8255C口的值ADD BX,AX ;作为延时控制使用GOADD:MOV CX,0 ;与之前对于0V输出的操作延时一样LOOP $CMP BX,0JNZ GOADDJMP NEXT ;继续下一次的DA转换过程DONE:MOV AH,4CHINT 21HMAIN ENDPCODE ENDS END MAIN 3、DA转换之锯齿波DATA SEGMENTDAPROT DW 290HDATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC F
14、AR MOV AX,DATA MOV DS,AX MOV DX,DAPROT MOV AL,0 ;用于转换的DA的数字大小 NEXT: OUT DX,AL ;向DA送数据 ADD AL,5 ;每次加5 CMP AL,255 JNE GO MOV AL,0GO: MOV CX,50000 ;延时50000个指令周期 LOOP $ MOV AH,1 INT 16H JZ NEXT MOV AH,4CH INT 21HMAIN ENDPCODE ENDS END MAIN4、DA转换之正弦波DATA SEGMENTDAPROT DW 290HSIN_DATA DB 80H,96H,0AEH,0C5H
15、,0D8H,0E9H,0F5H,0FDH DB 0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,96H DB 80H,66H,4EH,38H,25H,15H,09H,04H DB 00H,04H,09H,15H,25H,38H,4EH,66H DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV DX,DAPROT BEGIN: MOV BH,32 LEA SI,SIN_DATA NEXT: MOV AL,SI OUT DX,AL INC SI DEC BH
16、MOV CX,10000 LOOP $ CMP BH,0 JZ BEGIN MOV AH,1 INT 16H JZ NEXT MOV AH,4CH INT 21HMAIN ENDPCODE ENDS END MAIN四、实验结果1、实验时,转动旋钮,观察程序运行时数字的变化,并用万用表检测板子的电压值。当数字为16进制的B6即2进制的182时,电压值为3.49V。3.492565=178.688,与182基本相同。当数字为16进制的32即2进制的50时,电压值为0.96V。0.962565=49.152,与50基本相同。2、DA转换时,示波器上显示出的锯齿波和正弦波的图形分别如下: 五、实验心得与体会这次实验是关于模/数转换的,在以前的基础上,又借助了示波器和万用表来测量实验数据及结果。通过这次实验,我了解了A/D、D/A 转换的基本原理,掌握了ADC0809 、DAC0832芯片的使用方法,了解直流电机控制的基本方法。