实验七 DA与AD转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七D/A与A/D转换
专业:微电子学姓名:
【实验目的】
1.学习D/A转换的基本原理和D/A转换芯片DAC0832的性能及编程方法。
2.了解单片机系统中扩展D/A转换芯片的基本方法。
3.学习A/D芯片ADC0809的转换性能及编程方法。
4.了解A/D转换芯片与写单片机的接口方法。
5.通过实验掌握单片机进行数据采集的方法。
【实验原理】
1.D/A 转换是把数字量转换成模拟量的变换,从D/A 输出的是模拟信号。
实验程序一是通
过在D/A的输入端送入有一定规律的数字量,在输出端产生锯齿波、三角波、正弦波的波形,通过示波器观察来直观地了解D/A的转换功能。
产生锯齿波、三角波只需由A存放的数字量(送入D/A的输入寄存器)的增减来控制;要产生正弦波,较简单的方法是造一张正弦数字量的表,取值范围为一个周期,采样点愈多,精度愈高。
如果电压幅值为M,D/A 转换器的位数是N 位,那么其精度计算公式为:M/(2N-1)。
图6-1 D/A转换逻辑
例如,D/A转换器的位数是8位,电压幅值为5V,则转换精度为,
5/(28-1)= 0.0196(V)
在EL-8051-III实验台上DAC0832与单片机的连接图6-1所示。
由图可以看出,输入寄存器占偶地址端口(A0=0),DAC 寄存器占较高的奇地址端口(A0=1)。
两个寄存器均对数据独立进行锁存。
要把一个数据通过0832输出,要经两次锁存。
典型的程序如下:
MOV DPTR, #PORT
MOV A , #DATA
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
其中,第二次写入是一个虚拟写的过程,其目的是产生一个/WR信号,启动D/A。
2.A/D转换是把模拟量转变为数字量的变换。
A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。
本实验用的是ADC0809属逐次逼近法A/D转换器,是八位的A/D转换器。
每采集一次需100us。
实验电路如下图:
图6-2 A/D转换逻辑
ADC0809 的START 端为A/D转换启动信号,ALE 端为通道选择地址的锁存信号。
实验电路中将二者相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需两条指令:MOV DPTR, #PORT
MOVX @DPTR,A
A中是什么内容是不重要的,这是一次虚拟写,其目的是产生一个/WR信号。
A/D 转换期间EOC脚(A/D 转换结束信号输出端口)为低电平,一旦转换结束时输出高电平。
如果我们把EOC脚接至一个反相器的输入端,反相器的输出端就得到一个负跳变的触发信号,它正好可以用来作为8051的外中断源的边缘触发信号。
在一个数据转换完毕后,我们向ENABLE 脚送一个高电平,用以打开三态数据锁存器,就可以读出数据,因此可以使用如下指令读取A/D转换结果:
MOV DPTR, #PORT
MOV A, @DPTR
【实验内容】
1.利用DAC0832编程产生锯齿波、三角波、正弦波。
三种波形轮流显示。
连线方法:0832的CS0832接CS0。
输出DAOUT接示波器探头,示波器探头地线接实验板地线。
程序清单见D61.ASM。
2.A/D转换实验:用中断方法来读取AN0的输入模拟电压,通过P1口输出到LED上显示。
运行程序后,读出LED上显示的数据(灯亮表示1,化为十六进制数)。
用万用表测量AN0 的输入模拟电压,与读出的LED 上显示的数据
进行比较。
连线方法:,
1、0809的片选信号CS0809接CS0。
2、电位器的输出信号AN0 接ADC0809的ADIN0。
3、EOC接CPU板的INT0。
4、P1.0-P1.7连L1-L8。
程序清单见D62.ASM。
3.用查EOC电位法作上述测量,调节电位器的值进行连续不断地测量(数据不用存储),测量的数据在LED数码管上显示(两位16 进制数)。
编写程序上机运行。
然后,修改程序用中断法再作测量,再运行程序。
【实验程序与实验现象】
程序一
实验程序及注释:
;D61.asm
ORG 4000H
LJMP MAIN
ORG 401BH
LJMP DELAY
PORT EQU 0CFA0H
ORG 4100H
MAIN: MOV TMOD, #10H ; 定时器1工作在定时方式,方式1
SETB EA
SETB ET1
MOV TL1, #0AFH
MOV TH1, #3CH ; 置定时0.1S的初值
SETB TR1
DISP: MOV R1, #50H
LCALL PRG1 ; 调用产生锯齿波子程序
MOV R1, #50H
LCALL PRG2 ; 调用产生三角波子程序
MOV R1, #50H
LCALL PRG3 ; 调用产生正弦波子程序
LJMP DISP
DELAY: CLR TR1 ; 中断服务程序
MOV TL1, #0AFH
MOV TH1, #3CH
DEC R1
SETB TR1
RETI
;
PRG1: MOV A, #00H ; 产生锯齿波子程序开始. LOOP: MOV DPTR, #PORT ; 输入寄存器端口地址#PORT MOVX @DPTR, A ; 送出数据
INC DPTR ; DAC寄存器端口地址#PORT+1
MOVX @DPTR, A ; 启动转换
INC A ; 数据加1
CJNE R1, #00H, LOOP ; 计数值减到00H了么?
RET ; 没有则继续产生锯齿波.
;
PRG2: MOV A, #00H ; 产生三角波子程序
LP1: MOV DPTR, #PORT ; 上升部分
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC A
CJNE A, #0FFH, LP1
MOV R2,A
LP2: MOV DPTR, #PORT ; 下降部分
MOV A, R2
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
DJNZ R2, LP2
CJNE R1, #00H, LP1
RET
PRG3: MOV R2, #02H ; 产生正弦波子程序
MOV R4, #0FFH ; 一个正弦周期的数据个数
SJMP SUBDATA
LP3: MOV DPTR, #PORT
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
INC R2
DJNZ R4, SUBDATA
MOV R4, #0FFH
MOV R2, #02H
CJNE R1, #00H, SUBDATA
RET
SUBDATA: MOV A, R2
MOVC A,@A+PC
SJMP LP3
DATA0: ; 产生正弦波的数据(256 个)
DB 80H,83H,86H,89H,8DH,90H,93H,96H
DB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H
DB 0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8H
DB 0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H
DB 0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5H
DB 0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH
DB 0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH
DB 0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6H
DB 0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH
DB 0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAH
DB 0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7H
DB 0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1H
DB 0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H
DB 96H,93H,90H,8DH,89H,86H,83H,80H
DB 80H,7CH,79H,76H,72H,6FH,6CH,69H
DB 66H,63H,60H,5DH,5AH,57H,55H,51H
DB 4EH,4CH,48H,45H,43H,40H,3DH,3AH
DB 38H,35H,33H,30H,2EH,2BH,29H,27H
DB 25H,22H,20H,1EH,1CH,1AH,18H,16H
DB 15H,13H,11H,10H,0EH,0DH,0BH,0AH
DB 09H,8H,7H,6H,5H,4H,3H,2H
DB 02H,1H,0H,0H,0H,0H,0H,0H
DB 00H,0H,0H,0H,0H,0H,1H,2H
DB 02H,3H,4H,5H,6H,7H,8H,9H
DB 0AH,0BH,0DH,0EH,10H,11H,13H,15H
DB 16H,18H,1AH,1CH,1EH,20H,22H,25H
DB 27H,29H,2BH,2EH,30H,33H,35H,38H
DB 3AH,3DH,40H,43H,45H,48H,4CH,4EH
DB 51H,51H,55H,57H,5AH,5DH,60H,63H
DB 69H,6CH,6FH,72H,76H,79H,7CH,80H
END
实验结果记录:
连接示波器后,在示波器上轮流显示锯齿波、三角波、正弦波三中波形。
实验分析:
实验结果与实验要求完全符合。
实验达到预期效果,实验成功。
程序二:
实验程序与注释:
;D62.ASM
ORG 4000H ;设置程序起始地址
LJMP MAIN ;跳转到MAIN
ORG 4003H ;设置中断端口地址
LJMP INTX0 ;跳转到中断程序INTX0
PORT EQU 0CFA0H ;将PORT等值为0CFA0H
ORG 4050H ;设置主程序起始地址
MAIN: MOV R0, #50H ;将50H送到R0
MOV P3, #0FFH ;将FFH送P3
SETB EA ;将EA置一
SETB EX0 ;将EX0置一
SETB IT0 ;将IT0置一
START: MOV DPTR, #PORT;将PORT值送DPTR单元
MOV A, #0 ;将0送到累加器A
MOVX @DPTR, A ;将累加器A的值送DPTR指向的单元
ACALL DEL ;调用子程序DEL
SJMP START ;跳转到START
INTX0: CLR EA ;将EA单元清零
MOVX A,@DPTR ;将DPTR指向的单元的值送累加器A,取出转换的数据
CPL A ;将累加器A的值取反
MOV P1,A ;将累加器A的值送P1
MOV @R0, A ;将累加器A的值送R0寄存器指向的单元
SETB EA ;将EA单元置一
EXIT: RETI ;返回
;
DEL: MOV R7, #15 ;将十进制数15送R7,实现1.5秒延迟
DEL1: MOV R6, #130 ;将十进制数130送R6
DEL2: MOV R5, #200 ;将十进制数200送R5
DEL3: DJNZ R5, DEL3 ;令R5减一,若减一后不为零,跳转到DEL3
DJNZ R6, DEL2 ;令R6减一,若减一后不为零,跳转到DEL2
DJNZ R7, DEL1 ;令R7减一,若减一后不为零,跳转到DEL1
RET ;返回程序
END ;程序结束
实验结果:
旋转控制模拟电压大小的旋钮,8个LED灯的亮暗会变化,表示相应的模拟电压值。
其中部分结果如下:
程序三:
实验程序:
ORG 4000H
LJMP MAIN
ORG 4003H
LJMP INTX0
ORG 400BH
LJMP T0INT
ORG 4070H PORT1 EQU 0CFA0H PORT2 EQU 0CFA8H MAIN: ACALL START2
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV TMOD,#01H MOV TH0,#0F6H MOV TL0,#3CH
SETB EA
SETB EX0
SETB ET0
SETB IT0
SETB PX0
SETB TR0
START: MOV DPTR,#PORT1 MOVX @DPTR,A
ACALL DELAY
SJMP START INTX0: PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR,#PORT1 MOVX A,@DPTR
ACALL GET_CHAR POP DPL
POP DPH
POP ACC
RETI
GET_CHAR:MOV 52H,A
ACALL CHANGE MOV 51H,A
MOV A,52H
SWAP A
ACALL CHANGE
MOV 52H,A
RET
CHANGE:MOV DPTR,#TABLE
ANL A,#0FH
MOVC A,@A+DPTR
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
T0INT:MOV TH0,#0F6H
MOV TL0,#3CH
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR,#PORT2
MOV P1,#0FFH
MOV A,@R0
MOVX @DPTR,A
INC R0
MOV P1,R1
MOV A,R1
RL A
MOV R1,A
DJNZ R2,RETURN
ACALL START2
RETURN:POP DPL
POP DPH
POP ACC
RETI
START2:MOV R1,#11111110B
MOV R2,#6
MOV R0,#51H
RET
DELAY: MOV R7,#5
DE1: MOV R6,#200
DE2: MOV R5,#7EH
DE3: DJNZ R5,DE3
DJNZ R6,DE2
DJNZ R7,DE1
RET
END
实验结果:
对于实验内容三,用中断法修改程序如下:ORG 4000H
LJMP MAIN
ORG 400BH
LJMP T0INT
ORG 4070H
PORT1 EQU 0CFA0H
PORT2 EQU 0CFA8H
MAIN: ACALL START2
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
MOV 56H,#00H
MOV 57H,#00H
MOV TMOD,#01H
MOV TH0,#0F6H
MOV TL0,#3CH
SETB EA
SETB ET0
SETB TR0
START: MOV DPTR,#PORT1
MOVX @DPTR,A
J_EOC: MOV A,P3
ANL A,#00000100B
JZ J_EOC
MOVX A,@DPTR
ACALL GET_CHAR
ACALL DELAY
SJMP START
GET_CHAR:MOV 52H,A
ACALL CHANGE
MOV 51H,A
MOV A,52H
SWAP A
ACALL CHANGE
MOV 52H,A
RET
CHANGE:MOV DPTR,#TABLE
ANL A,#0FH
MOVC A,@A+DPTR
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
T0INT:MOV TH0,#0F6H
MOV TL0,#3CH
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR,#PORT2
MOV P1,#0FFH
MOV A,@R0
MOVX @DPTR,A
INC R0
MOV P1,R1
MOV A,R1
RL A
MOV R1,A
DJNZ R2,RETURN
ACALL START2
RETURN:POP DPL
POP DPH
POP ACC
RETI
START2:MOV R1,#11111110B
MOV R2,#6
MOV R0,#51H
RET
DELAY: MOV R7,#10
DE1: MOV R6,#200
DE2: MOV R5,#7EH
DE3: DJNZ R5,DE3
DJNZ R6,DE2
DJNZ R7,DE1
RET
END
经运行后亦能达到实验内容三的要求,程序可行。