硬件实验十三 D/A 转换实验
一、实验要求
利用DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器 观看。
二、实验目的
1、了解D/A转换的基本原理。
2、了解D/A转换芯片0832的性能及编程方法。 3、了解单片机系统中扩展D/A转换的基本方法。
三、实验电路及连线
用电压表或示波器探头接-5V~+5V输出,观察显示电压或波形。
四、实验说明
1、D/A转换是把数字量转换成模拟量的变换,实验台上D/A电路输出的是模拟电压 信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过查表来实现波 形显示。
2、产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要分 段来产生。
要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成 十六进制数填表。
D/A 转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256 点/周期。
3、8 位D/A转换器的输入数据与输出电压的关系为 U(0∽-5V)=Uref/256×N
U(-5V∽+5V)=2·Uref/256×N-5V (这里 Uref为+5V)
五、 实验框图
程序:
ORG 0000H START:
MOV R0,#0FEH MOV A,#00H LOOP:
MOVX @R0,A
INC A
CJNE A,#00H,LOOP UP:
MOVX @R0,A INC A JNZ UP DOWN: DEC A
MOVX @R0,A JNZ DOWN LOOP1:
MOV R2,#02H MOV R4,#0FFH SJMP LOOP3 LOOP2:
MOV @R0,A INC R2
DJNZ R4,LOOP3 AJMP START LOOP3: MOV A,R2 ADD A,#02H
MOVC A,@A+PC SJMP LOOP2
TAB: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 遇到的问题及解决方法
问题:转换出的三种波形出现叠加现象。 解决方法: 原程序:
MOV R0,#0FEH MOV R7,#00H MOV A,#00H LOOP:
MOVX @R0,A INC A
CJNE A,#00H,LOOP DJNZ R7,LOOP UP:
MOVX @R0,A INC A JNZ UP DOWN: DEC A
MOVX @R0,A JNZ DOWN DJNZ R7,UP LOOP1:
MOV R2,#02H MOV R4,#0FFH SJMP LOOP3 LOOP2:
MOV @R0,A INC R2
DJNZ R4,LOOP3 DJNZ R7,LOOP1 RET LOOP3:
MOV A,R2 ADD A,#02H
MOVC A,@A+PC SJMP LOOP2
分析此程序可以发现产生的三种波形方式为分时显示即先产生256个锯齿波然后产生256个三角波最后产生256个正弦波。理论上可以显示但实际上各种波形显示的时间非常短,上个波形的余晖尚未消失下一个的波形就显示出来以至于出现波形叠加。
程序应该改为将三种波同时显示然后循环,即将锯齿波、三角波、正弦波三个波连起来作为一个波,周期为三个波的周期之和。 改正后的程序: LOOP:
MOVX @R0,A INC A
CJNE A,#00H,LOOP UP:
MOVX @R0,A INC A JNZ UP DOWN: DEC A
MOVX @R0,A JNZ DOWN LOOP1:
MOV R2,#02H MOV R4,#0FFH SJMP LOOP3 LOOP2:
MOV @R0,A INC R2
DJNZ R4,LOOP3 AJMP START LOOP3: MOV A,R2 ADD A,#02H
MOVC A,@A+PC SJMP LOOP2