实验三数/模、模/数转换实验 无82班王一舟981070 【实验三】数/模、模/数转换实验 实验目的 了解数模、模/数转换的基本原理,掌握ADC809和DACO832芯片的使用方法。 二、实验任务: 在实验箱上设计并连接ADCO809芯片的接线,按中断方式(利用EOC发中断申请)对单 通道模拟量进行AD转换。AD转换结果送入PC机后,再由PC机送至DAC0832进 行DA转换,结果送至双踪示波器,与原信号进行对比观察。 模拟信号源:由电位器中心抽头可以得到一个可调节的直流电压。电位器一端接地,另一端 接+5V。 三、实验电路 E 四、程序清单 ADC. ASM DATA SEGMENT MESG3 DB 'STARTI HEHE DB ODH OAH S OLDOA DD DATA ENDS SSEG SEGMENT PARA STACKSTACK DB 256 DUP(?) SSEG ENDS
实验三 数/模、模/数转换实验 无 82 班 王一舟 981070 1 【实验三】数/模、模/数转换实验 一、实验目的: 了解数/模、模/数转换的基本原理,掌握 ADC0809 和 DAC0832 芯片的使用方法。 二、实验任务: 在实验箱上设计并连接 ADC0809 芯片的接线,按中断方式(利用 EOC 发中断申请)对单 通道模拟量进行 A/D 转换。A/D 转换结果送入 PC 机后,再由 PC 机送至 DAC0832 进 行 D/A 转换,结果送至双踪示波器,与原信号进行对比观察。 模拟信号源:由电位器中心抽头可以得到一个可调节的直流电压。电位器一端接地,另一端 接+5V。 三、实验电路: 四、程序清单: ;ADC.ASM DATA SEGMENT MESG3 DB 'START! HE HE !' DB 0DH,0AH,'$' OLD0A DD ? DATA ENDS SSEG SEGMENT PARA STACK 'STACK' DB 256 DUP(?) SSEG ENDS
实验三数/模、模/数转换实验 无82班王一舟981070 CODE SEGMENT ASSUME CS: CODE. DS DATA. SS SSEG BEGIN PROC FAR MOVAHIH 有键输入 PUSH DS INT 16H MOVAX O JZ WAIT IN PUSHAX EXIT DOS 退出 MOVAX DATA CALL RESET MOV DS.AX RET CLI BEGIN ENDP CALL I8259 8259初始化 CALL RDOA 读旧向量 以下是中断服务程序执行ADDA转换功 CALL WROA 写新向量 能 MOV DX OFFSET MESG3 SERVICE PROC FAR MOV AH. O9H PUSH DS INT2IH PUSH AX ;保护现场 开中断 MOV DX. 230H 从230端口读 MOV DX. 230H IN AL, DX 模拟量 MOVAL. O ;送初值 MOV DX228H 将转换结果送 OUT DXAL 激活AD 228229端口 WAIT IN MOV DX. 229H OUT DXAL MOV AX. 350AH MOV DX. 230H 重新送新值给 INT2IH MOV AL,O ;230端口,等待 MOV WORD PTR OLDOA BX OUT DX. AL 下一次的输入 MOV WORD PTR OLDOA+2.ES QUIT RET MOV AL, 20H 送EOC中断 RDOA ENDP OUT 20H.AL ;结東命令 POPAX WROA PROC POP DS PUSH DS IRET MOV DX OFFSET SERVICE SERVICE ENDP MOVAX SEG SERVICE MOV DS.AX 18259 PROC MOVAX. 250AH IN AL, 21H INT2IH AND AL, 11111011B POP DS DUT2IH.AL RET WROA ENDP AND AL, 11111101B OUTOAIHAL RESET PROC RET PUSH DS 18259 ENDP MOV DX WORD PTR OLDOA MOV DS. WORD PTR OLDOA+2 RDOA PROC MOV AX. 250AH 2
实验三 数/模、模/数转换实验 无 82 班 王一舟 981070 2 CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEG BEGIN PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX CLI CALL I8259 ;8259 初始化 CALL RD0A ;读旧向量 CALL WR0A ;写新向量 MOV DX,OFFSET MESG3 MOV AH,09H INT 21H STI ;开中断 MOV DX,230H MOV AL,0 ;送初值 OUT DX,AL ;激活 AD WAIT_IN: MOV AH,1H ;有键输入 INT 16H JZ WAIT_IN EXIT_DOS: ;退出 CALL RESET RET BEGIN ENDP ;------------------------------------------------------- ;以下是中断服务程序,执行 AD DA 转换功 能 SERVICE PROC FAR PUSH DS PUSH AX ;保护现场 MOV DX,230H ;从 230 端口读 IN AL,DX ;模拟量 MOV DX,228H ;将转换结果送 OUT DX,AL ;228 229 端口 MOV DX,229H OUT DX,AL MOV DX,230H ;重新送新值给 MOV AL,0 ;230 端口,等待 OUT DX,AL ;下一次的输入 QUIT: MOV AL,20H ;送 EOC 中断 OUT 20H,AL ;结束命令 POP AX POP DS IRET SERVICE ENDP ;------------------------------------------------------- I8259 PROC IN AL,21H AND AL,11111011B OUT 21H,AL IN AL,0A1H AND AL,11111101B OUT 0A1H,AL RET I8259 ENDP ;------------------------------------------------------- RD0A PROC MOV AX,350AH INT 21H MOV WORD PTR OLD0A,BX MOV WORD PTR OLD0A+2,ES RET RD0A ENDP ;------------------------------------------------------ WR0A PROC PUSH DS MOV DX,OFFSET SERVICE MOV AX,SEG SERVICE MOV DS,AX MOV AX,250AH INT 21H POP DS RET WR0A ENDP ;------------------------------------------------------- RESET PROC PUSH DS MOV DX,WORD PTR OLD0A MOV DS,WORD PTR OLD0A+2 MOV AX,250AH
实验三数/模、模/数转换实验 无82班王一舟981070 INT2IH OUT.AL IN AL,OAIH ORAL,00000010B T RESET ENDP CODE ENDS END BEGIN 五.实验分析: 我决的本次实验特别简单好象比前两次的简单多了。主要就是8259的中段服务程序中 有AD读入和DA读出的部分,然后在主程序和中断程序结束时有一个230H端口的激活语 句。所以该实验程序一点也不难,关键在硬件连线,要注意IO口地址译码器的一个输出端 接电路的CS部分,EOC接总线的B4段,输入信号利用电位器发生。另外我还犯了一个 极愚蠢的错误:没有接ADC809的时钟信号,后来一直不知道哪儿错,查了半天也没查出 来,急的团团转。在老师的帮助下才知道这个问题。所以做实验不论是容易还是简单,都不 能轻视,更不能马虎,稍有没考虑到的错误,就会非常的麻烦
实验三 数/模、模/数转换实验 无 82 班 王一舟 981070 3 INT 21H IN AL,0A1H OR AL,00000010B OUT 0A1H,AL POP DS RET RESET ENDP ;------------------------------------------------------ CODE ENDS END BEGIN 五.实验分析: 我决的本次实验特别简单,好象比前两次的简单多了。主要就是 8259 的中段服务程序中 有 AD 读入和 DA 读出的部分,然后在主程序和中断程序结束时有一个 230H 端口的激活语 句。所以该实验程序一点也不难,关键在硬件连线,要注意 I/O 口地址译码器的一个输出端 接电路的 CS 部分,EOC 接总线的 B4 段,输入信号利用电位器发生。 另外我还犯了一个 极愚蠢的错误:没有接 ADC0809 的时钟信号,后来一直不知道哪儿错,查了半天也没查出 来,急的团团转。在老师的帮助下才知道这个问题。所以做实验不论是容易还是简单,都不 能轻视,更不能马虎,稍有没考虑到的错误,就会非常的麻烦