实验14 D/A转换实验
2013-05-28 10:19阅读:
一、实验目的:
1. 了解D/A转换的基本原理。
1. 了解D/A转换芯片0832的性能及编程方法。
2. 了解单片机系统中扩展D/A转换的基本方法。
二、实验设备:
CPU挂箱、8031CPU模块
三、实验内容:
利用DAC0832,编制程序产生方波、锯齿波、三角波。三种波显示根据P1口的低三位确定,P1.0=0时产生方波,p1.1=0时产生锯齿波,P1.2=0时产生三角波。
四、实验原理:
D/A转换是把数字量转换成模拟量的变换,从D/A输出的是模拟电压信号。产生方波只需要输出交替输出0和1并保持一段时间即可,产生锯齿波和三角波只需由A存放的数字量的增减来控。取值范围为一个周期,采样点越多,精度就越高。
本实验中,输入寄存器占偶地址端口,DAC寄存器占较高的奇地址端口。两个寄存器均对数据独立进行锁存。因而要把一个数据通过0832输出,要经两次锁存。典型程序段如下:
MOV
DPTR,#PORT
MOV
A,#DATA
MOVX @DPTR,A
INC
DPTR
MOVX
@DPTR,A
其中第二次I/O写是一个虚拟写过程,其目的只是产生一个WR信号。启动D/A。
五、实验介绍
通过语句
MOV A,P1
ANL
A,#01H
JZ
PRG1
MOV
A,P1
ANL
A,#02H
JZ
PRG2
MOV
A,P1
ANL
A,#04H
JZ
PRG3
不断检测P1.0、P1.1、P1.2口是否为0,从而跳转到不同的子程序处。其实三个口是有一定的优先级的,优先级顺序为P1.0>P1.1>P1.2。
方波显示子程序:
PRG1
设置B=0FFH作为计时,输出0和1的计时时间为B,每输出一
个周期判定一次P1的低三位是否有新的输入
锯齿波显示子程序:PRG2
初始A=00H,子循环一次A+1,直至A=0FFH,完成一个周期
的输出,每输出一个周期判定一次P1的低三位是否有新的输
入
三角波显示子程序:PRG3
通过A=00H每次加1,直到A=0FFH,输出三角波前半周期,然
后每次A减1,直至A回到00H,输出三角波后半周期,此刻
完成一个周期,
每输出一个周期判定一次P1的低三位是否有
新的输入
注:各个子程序未设置定时时间,即是如果输入状态没有改变,系统会一直输出。
六、实验源程序
PORT EQU 0CFA0H ;CSO的地址
CSEG AT 4000H
LJMP START
CSEG AT 4100H
START:MOV A,#00H
MOV
DPTR,#PORT+1
L1: PUSH ACC
MOV
A,P1
ANL
A,#01H
;第八位不变,其他置零
JZ
PRG1
;若A=0,即是第八位为0,输出方波
MOV
A,P1
ANL
A,#02H
;第七位不变,其他位置零
JZ
PRG2
;若A=0,即是第七位为0,输出锯齿波
MOV
A,P1
ANL
A,#04H
;第六位不变,其他位置零
JZ
PRG3
;若A=0,即是第六位为0,输出三角波
POP
ACC
JMP L1
PRG1: POP ACC
;方波产生子程序
LOOP0: MOV B,#0FFH
LOOP1: MOV DPTR,#PORT
;DAC输入寄存器端口地址
MOVX @DPTR,A
;送出数据
INC DPTR
;加一,为DAC寄存器端口地址
MOVX @DPTR,A
;启动转换
DJNZ B,LOOP1
;计数值B减到00H了吗?没有则继续
CPL A
;对输出值A取反
JMP L1
;循环一个周期后跳转至L1,继续判定
RET
PRG2: POP ACC
;锯齿波产生子程序
LOOP2: MOV DPTR,#PORT
;DAC输入寄存器端口地址
MOVX @DPTR,A
;送出数据
INC DPTR
;加一,为DAC寄存器端口地址
MOVX @DPTR,A
;启动转换
INC A
;数据加一
CJNE A,#0FFH,LOOP2;输出是否发到最大值,没有继续+1
MOV A,#00H
;达到最大值,给输出赋值00H
JMP L1
;循环一个周期后跳转至L1,继续判定
RET
PRG3: POP ACC
;三角波产生子程序
LOOP3: MOV DPTR,#PORT
;LP1循环产生三角波前半周期
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC A
CJNE A,#0FFH,LOOP3 ;数据为FFH吗?不等则转LOOP3
MOV B,#0FFH ;通过B给A赋初值,不用也行,因为此时A已经等于0FFH了
LOOP4: MOV DPTR,#PORT
;LP2循环产生三角波后半周期
MOV A,B
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
DJNZ B,LOOP4
JMP L1 ;循环一个周期后跳转至L1,继续判定
RET
END
备注:8051实验