【单片机】D/A转换实验

一、操作目的

  • (1)了解D/A转换与单片机的接口方法;
  • (2)了解D/A转换芯片0832的性能及编程方法;
  • (3)了解单片机系统中扩展D/A转换芯片的基本方法;

二、操作内容

利用0832输出一个从0V开始逐渐升至5V再降至0V的可变电压。循环输出方波、三角波、锯齿波

三、接线图

【单片机】D/A转换实验_#define

四、程序清单

ORG 0000H
LJMP SE13
ORG 05E0H
SE13:
MOV SP,#53H
mov p2,#0ffh
MOV A,#81H
MOV DPTR,#0FF23H
MOVX @DPTR,A
MOV 7EH,#00H
MOV 7DH,#08H
MOV 7CH,#03H
MOV 7BH,#02H ;显示缓冲区初值
LO20:
MOV R6,#00H
LO21:
MOV DPTR,#0FF80H
MOV A,R6
MOVX @DPTR,A ;送0832转换
MOV R0,#79H
LCALL PTDS
LCALL SSEE ;显示
MOV R2,#08H
LCALL DELYA ;延时
INC R6 ;加1
CJNE R6,#0FFH,LO21 ;不到FF继续加
LO22:
MOV DPTR,#0FF80H
DEC R6
MOV A,R6 ;减1送0832转换
MOVX @DPTR,A
MOV R0,#79H
LCALL PTDS
LCALL SSEE ;显示
MOV R2,#08H
LCALL DELYA ;延时
CJNE R6,#00H,LO22 ;不为0继续减
SJMP LO20 ;循环
;ORG 0620H
PTDS:
MOV R1,A ;拆送显示缓冲区
LCALL PTDS1
MOV A,R1
SWAP A
PTDS1:
ANL A,#0FH
MOV @R0,A
INC R0
RET
ORG 0D50H
SSEE:
SETB RS1 ;换工作区
MOV R5,#05H
SSE2:
MOV 30H,#20H
MOV 31H,#7EH
MOV R7,#06H
SSE1:
MOV R1,#20H
MOV A,30H
CPL A
MOVX @R1,A ;字位送入
MOV R0,31H
MOV A,@R0
MOV DPTR,#DDFF
MOVC A,@A+DPTR ;取字形代码
MOV R1,#21H
MOVX @R1,A ;字形送入
MOV A,30H
RR A ;右移
MOV 30H,A
DEC 31H
MOV A,#0FFH

五、代码详解

/**********************************************************************************/
//设DAC0832的地址为OxFF80
#include <absacc.h>
#define uchar unsigned char
#define DAC0832 XBYTE[0xFF80]

void delay(void)
{
uchar i;
for (i = 0; i < 0xFF; i++)
{
;
}
}

void main()
{
uchar i;
uchar n = 1000;
while (1)
{
while (n > 0)
{
///锯齿波
for (i = 0; i < 0xFF; i++)
{
DAC0832 = i;
}
n--;
}
n = 1000;
while (n > 0)
{
///三角波
for (i = 0; i < 0xFF; i++)
{
DAC0832 = i;
}
for (i = 0xFF; i > 0; i--)
{
DAC0832 = i;
}
n--;
}
n = 1000;
while (n > 0)
{
///方波
DAC0832 = 0;
delay();
DAC0832 = 0xFF;
delay();
n--;
}
n = 1000;
}
}