单片机DA转换实验报告

更新时间:2024-05-18 22:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验九 D/A实验报告

㈠ 实验目的

1. 2. 3. 4.

掌握单片机与D/A的接口及编程方法;

通过D/A动态波形输出进一步理解D/A的工作原理; 结合实验六中的A/D来检验软硬件的正确性。 进一步了解单片机系统地址分配概念。

㈡ 实验器材

1. 2. 3. 4. 5.

G6W仿真器 MCS—51实验板 PC机 信号发生器 示波器

一台 一台 一台 一台 一台

㈢ 实验内容及要求

DAC0832是内含双锁存器且可与单片机8051直接接口的8位D/A,从实验板的电原理图可见,当0832管脚ILE为高,CS2为低时,8051对0832写入待转换的8位数字量,当对0832写入任意数(WR、CS2都为低)时,8051启动D/A转换。

把具有一定规律变化的数据连续送到0832,可用示波器在运放741输出端看到一定规律的动态波形。

将实验六中A/D所存数据直接送到0832,在D/A输出端也可用示波器观察到还原后的A/D输入端信号。

注意:在实验前,应先检查DAC0832的参考电压是否正确。

(要求DAC0832的参考电压值为Vref = -5V,用万用表观察 DAC0832芯片的8脚电压值。若不对,可调节实验板上的电位器W3来改变D/A的参考电压值。)

㈣ 实验步骤

1. 接ILE至高电平(+5V),根据CS2与高位地址线的连接情况,确定0832

在系统中的地址。

2. 将微机与伟福仿真系统及51实验板相连接。

3. 编写双向锯齿波或三角波输出的D/A程序,利用伟福仿真系统及计算机

汇编成目标码,运行并调试程序,用示波器观察实验结果。

4. 编写送A/D数据至D/A转换程序,并将在实验六中所编写A/D采样程

序与之连接组合,运用伟福仿真系统及计算机汇编成目标码,运行并调试程序,用示波器观察对照A/D输入端和D/A输出端的波形。

㈤ 实验框图

寄存器置转换初值 开 始 开 始 调A/D转换子程序采样N个数据

㈥ 思考题

1. 在实验步骤4中,对比了A/D输入端和D/A输出端的波形,它们有什么

不同?为什么?

A/D输出端是正弦波形,而D/A输出端是一段直流加一段正弦波形。 2. D/A的转换时间对动态输出波形有何影响? D/A的转换时间会使动态波形产生一段直流空档。

3. D/A参考电源极性与D/A转换输出结果有什么关系?

A/D+D/A程序流程图 N个数据是否送完? 否 产生双向锯齿波的程序流程图 数据地址加1 送D/A 键盘调用D/A并置初值 寄存器数加1 取数据 送D/A 是 输入的数字均视为正数即二进制数的所有位都为数值位。根据电路形式或参考电压的极性不同,输出电压或为0V到正满度值,或为0V到负满度值, 这种工作方式称为单极性输出方式。采用单极性输出方式时,数字输出量采用自然二进制码。

实验一代码: ORG 0000H AJMP MAIN ORG 0050H MAIN:

MOV DPTR,#0DFFFH ;寄存器置转换初值 MOV A, #00H

J: MOVX @DPTR,A ;送D/A

INC A ;寄存器数加1 AJMP J 实验二: ORG 0000H LJMP START

ORG 0013H ;中断入口地址 LJMP INT_1 ORG 0040H

START: ;AD转换 MOV SP,#60H

MOV R7,#0FFH ;读取数据个数初始化 MOV R1,#0B0H ;存放数据地址 MOV R0,#00H

MOV DPTR,#7FFFH ;选中A_D芯片 MOV A,#00H ;送通道号 MOVX @DPTR,A ;启动 A_D SETB IT1 ;开中断 SETB EA SETB EX1 AA:

;MOV A,R7 ;JZ MAIN

;SJMP AA ;等待中断

CJNE R7, #00H, $ ;判断数据是否传送完毕 CLR EA ;关中断 LJMP MAIN INT_1:

MOVX A,@DPTR ;读 A_D 数据 MOV DPH,R1 MOV DPL,R0

MOVX @DPTR,A ;送A_D数据

INC R0 ;存放数据地址加一 DEC R7 ;读取数据个数减一 MOV DPTR,#7FFFH MOV A,#00H

MOVX @DPTR,A ;启动 A_D RETI

MAIN: ;DA转换

MOV R7,#0FFH ;需转换的数据个数 ;MOV DPTR,#0EFFFH ;设置DA口地址

;MOV A,#00H ;输入数字量到A(初值为00H) ;MOVX @DPTR,A

MOV R0,#0B0H ;设置需读取数据地址 MOV R1,#00H NEXT:

MOV DPH,R0 ;将读取数据地址送入DPTR MOV DPL,R1

MOVX A,@DPTR ;将数据读到A中 MOV DPTR,#0EFFFH

MOVX @DPTR,A ;将数据送往DA口 INC R1 ;读取数据地址加一

DJNZ R7,NEXT ;数据未读完,转向NEXT继续读取 SJMP START

本次实验比较大的问题是在判断FF个数据经过A/D转换之后,要跳入MAIN程序进行D/A转换,我们本身的程序是在中断程序中间判断R7是否为0,然后为0的话跳到MIAN程序执行,当时没有意识到是从中断程序中跳转出去后还是中断程序的一部分,所以导致程序不能实时采样。

后来我们采用了下面红色的代码,将判断语句放到中断外来执行,但是我们忽略了一点,如果判断等待过程中中断来临,可能会没有机会,而且这段代码中没有关中断。所以最后我们采用了后三行语句来判断数据是否转换完并跳转。 AA:

;MOV A,R7 ;JZ MAIN

;SJMP AA ;等待中断

CJNE R7, #00H, $ CLR EA LJMP MAIN

本文来源:https://www.bwwdw.com/article/tw17.html

Top