⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.a51

📁 TLC5620串行DAC 用51实现。调试通过
💻 A51
字号:
;*************************************************************************
;	main.A51
;	TLC5620串行DAC例程:产生正弦波
;*************************************************************************


;*************************************************************************
;定义I/O端口
;*************************************************************************
DAT	BIT	P1.4	;串行数据
CLK	BIT	P1.5	;串行时钟,下降沿有效
LDAC	BIT	P1.6	;DAC更新锁存控制,下降沿有效
LOAD	BIT	P1.7	;串行数据装载,下降沿有效


;*************************************************************************
;复位和中断向量入口
;*************************************************************************
;复位入口
	ORG	0x0000
	LJMP	PreMain


;*************************************************************************
;程序段:PreMain
;功能:进入主程序之前的初始化操作
;*************************************************************************
PreMain:
	MOV	SP, #0x2F
	LJMP	main


;*************************************************************************
;函数:Dac()
;功能:发送数据至TLC5620串行DAC
;参数:
;	addr:DAC通道地址,取值0~3,对应通道A~D
;	rng:附加的范围位,rng=0时,Vo不会超过Vref,rng=1时,Vo变为2倍
;	dat:8位DAC数据
;公式:
;	rng=0时,Vo=Vref*(dat/256)
;	rng=1时,Vo=Vref*(dat/256)*2
;*************************************************************************
;void Dac(unsigned char addr, bit rng, unsigned char dat)
;addr = R7
;rng = 0x20.0
;dat = R6
Dac:
;{
;	unsigned char n;
;//发送通道地址
;	n = 2;
	MOV	R1, #2
;	do
	MOV	A, R7
Dac_do1:
;	{
;		DAT = (bit)(addr & 0x02);
;		addr <<= 1;
		MOV	C, ACC.1
		MOV	DAT, C
		ADD	A, ACC
;		CLK = 0;
;		CLK = 1;
		CLR	CLK
		SETB	CLK
;	} while ( --n != 0 );
	DJNZ	R1, Dac_do1
;//发送RNG位
;	DAT = rng;
;	CLK = 0;
;	CLK = 1;
	MOV	C, 0x20.0
	MOV	DAT, C
	CLR	CLK
	SETB	CLK
;//发送8位DAC数据
;	n = 8;
	MOV	R1, #8
	MOV	A, R6
;	do
Dac_do2:
;	{
;		DAT = (bit)(dat & 0x80);
;		dat <<= 1;
		MOV	C, ACC.7
		MOV	DAT, C
		ADD	A, ACC
;		CLK = 0;
;		CLK = 1;
		CLR	CLK
		SETB	CLK
;	} while ( --n != 0 );
	DJNZ	R1, Dac_do2
;//装载数据
;	LOAD = 0;
;	LOAD = 1;
	CLR	LOAD
	SETB	LOAD
;//数据锁存到DAC转换器
;	LDAC = 0;
;	LDAC = 1;
	CLR	LDAC
	SETB	LDAC
;}
	RET


;*************************************************************************
;函数:Delay()
;功能:延时1ms~256ms
;参数:
;	t>0时,延时(t)ms
;	t=0时,延时256ms
;*************************************************************************
;void Delay(unsigned char t)
;t = R7
Delay:
;{
;	do
Delay_do:
;	{
;		TH0 = 0xFC;
;		TL0 = 0x66;
;		TR0 = 1;
;		while ( !TF0 );
;		TR0 = 0;
;		TF0 = 0;
		MOV	TH0, #0xFC
		MOV	TL0, #0x66
		SETB	TR0
		JNB	TF0, $
		CLR	TR0
		CLR	TF0
;	} while ( --t != 0 );
	DJNZ	R7, Delay_do
;}
	RET


;*************************************************************************
;函数:SinWave()
;功能:利用TLC5620串行DAC在通道B产生正弦波
;说明:请用示波器观察SmartSOPC实验箱D5区的DACB通道
;*************************************************************************
;void SinWave()
SinWave:
;{
;	code unsigned char SinTab[] =
;	{
;	        128,147,167,185,202,218,231,241,249,253,
;	        255,253,249,241,231,218,202,185,167,147,
;	        127,108,88,70,53,37,24,14,6,2,
;	        0,2,6,14,24,37,53,70,88,108
;	};
;	unsigned char n;
;	分配:n = R2
;	for (;;)
SinWave_for1:
;	{
;		for ( n=0; n<40; n++ )
		MOV	R2, #0
SinWave_for2:
;		{
;			Dac(1,0,SinTab[n]);
			MOV	A, R2
			MOV	DPTR, #SinTab
			MOVC	A, @A+DPTR
			MOV	R6, A
			CLR	0x20.0
			MOV	R7, #1
			LCALL	Dac
;			Delay(5);
			MOV	R7, #5
			LCALL	Delay
;		}
		INC	R2
		CJNE	R2, #40, SinWave_for2
;	}
	SJMP	SinWave_for1
;}
	RET
SinTab:
	DB        128,147,167,185,202,218,231,241,249,253
	DB        255,253,249,241,231,218,202,185,167,147
	DB        127,108,88,70,53,37,24,14,6,2
	DB        0,2,6,14,24,37,53,70,88,108


;*************************************************************************
;函数:void main()
;功能:主函数
;*************************************************************************
;void main()
main:
;{
;	TMOD &= 0xF0;
;	TMOD |= 0x01;
	ANL	TMOD, #0xF0
	ORL	TMOD, #0x01
;	DAT = 1;
;	CLK = 1;
;	LDAC = 1;
;	LOAD = 1;
	SETB	DAT
	SETB	CLK
	SETB	LDAC
	SETB	LOAD
;	SinWave();
	LCALL	SinWave
;	for (;;);
	SJMP	$
;}


;*************************************************************************
;程序结束
;*************************************************************************
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -