实验九D/A实验报告
㈠实验目的
1.掌握单片机与D/A的接口及编程方法;
2.通过D/A动态波形输出进一步理解D/A的工作原理;
3.结合实验六中的A/D来检验软硬件的正确性。
4.进一步了解单片机系统地址分配概念。
㈡实验器材
1.G6W仿真器一台
2.MCS—51实验板一台
3.PC机一台
4.信号发生器一台
5.示波器一台
㈢实验内容及要求
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输出端的波形。
㈤ 实验框图
㈥ 思考题
1. 在实验步骤4中,对比了A/D 输入端和D/A 输出端的波形,它们有什么不同?为什么?
A/D 输出端是正弦波形,而D/A 输出端是一段直流加一段正弦波形。
2. D/A 的转换时间对动态输出波形有何影响?
D/A 的转换时间会使动态波形产生一段直流空档。
3. D/A 参考电源极性与D/A 转换输出结果有什么关系? 开 始 寄存器置转换初值 送D/A 寄存器数加1 产生双向锯齿波的程序流程图 取数据 送D/A 键盘调用D/A 并置初值 开 始 调A/D 转换子程序采样N 个数据 数据地址加1 否 是
N 个数据是否送完? A/D+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