单片机D/A转换实验

Posted 啥也不想,只想搞钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机D/A转换实验相关的知识,希望对你有一定的参考价值。

一、操作目的

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

二、操作内容

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

三、接线图

在这里插入图片描述

四、程序清单

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
	MOVX @R1,A                        ;关显示
	DJNZ R7,SSE1                      ;六位显示完了吗?
	DJNZ R5,SSE2                      ;五次显示完了吗?
	CLR RS1
	RET
DDFF:
	DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
	DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
DELYA: 
	PUSH 02H
DELYB:
 	PUSH 02H
DELYC:
 	PUSH 02H
DELYD:
 	DJNZ R2,DELYD
	LCALL SSEE                    ;调显示子程序
	POP 02H
	DJNZ R2,DELYC
	POP 02H
	DJNZ R2,DELYB
	POP 02H
	DJNZ R2,DELYA                 ;延时
	RET
	END

五、代码详解

/**********************************************************************************/
//设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;
	}
}

以上是关于单片机D/A转换实验的主要内容,如果未能解决你的问题,请参考以下文章

单片机A/D转换实验

单片机单片机知识点提纲5

单片机代码说明合集

模数转换(A/D)与数模转换(D/A)

简述ad,da转换器的基本定义和基本原理

A/D和D/A的学习