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

📄 tlc5620.c

📁 该源码为DA芯片TLC5620的完美驱动
💻 C
字号:
/*************************************************************************************************
;  TLC5620 DAC转换实验程序
;  2004.10.28,Ver 1.0
;-------------------------------------------------------------------------------------------------
;  输出电压计算公式: VOUT(DACA|B|C|D)=REF*CODE/256*(1+RNG bit value)
;------------------------------------------------------------------------------------------------- 
;  该实验程序使用TLC5620中A、B、C、D四个通道中的前两个通道分别输出周期相等、幅度
;  均为3.3V的三角波和方波,5620的输出经过LM358双运方的反相跟随后增强了带负载能力
;  并且使得输出的信号电压位于-3.3V~0V之间,起到了模拟反相的作用。在程序中,RNG位
;  的置位使得输出幅度增加一倍。
*************************************************************************************************/

#include  <reg52.h>

typedef  unsigned char  byte;
typedef  unsigned int   word;

sbit  SCLA=P1^6;
sbit  SDAA=P1^7;
sbit  LOAD=P3^5;
sbit  LDAC=P3^4;

bit   bdata  mode_bit1=0;      //三角波幅度递增或递减标志变量,为0时上坡,为1下坡
bit   bdata  mode_bit2=0;      //方波幅度高低电平标志变量,为0时输出低电平,为1时输出高电平
byte  data   count1=0;         //三角波的半周期计数器
byte  data   count2=0;         //方波的半周期计数器
byte  data   vouta=0;          //三角波瞬态电压值存储变量
byte  data   voutb=0;          //方波高低电平电压值存储变量,其幅度与三角波幅度相等
word  data   config;           //送往DA转换器的配置参数。以全局变量出现,即作为行参,又作为实参

void  ini_cpuio(void);
void  dachang1(void);
void  dachang2(void);
void  dac5620(word config);

/************************************************************************************************/
void  main(void)
{
    ini_cpuio();               //初始化CPU的IO口
	while(1)                   //周期地进行转换,形成三角波和方波的周期信号
	{
	    dachang1();            //控制通道A输出三角波
	    dachang2();            //控制通道B输出方波,该方波与上面的三角波幅度相等、周期相同
	}
}
/************************************************************************************************/
void  ini_cpuio(void)          //CPU的IO口初始化函数
{
    SCLA=0;
	SDAA=0;
	LOAD=1;
	LDAC=1;
}
//================================================================================================
void  dachang1(void)           //周期三角波生成函数
{
    config=(word)vouta;
	config<<=5;
	config=config&0x1fff;
    config=config|0x2000;
	dac5620(config);
    count1++;
	if(count1<0xa2)            //判断三角波是否上升(或下降)到峰点(或谷点)
	{
	    if(!mode_bit1)         //判断处于上坡还是下坡状态以决定是继续上升还是继续下降
		    vouta++;
		else
		    vouta--;
	}
	else
	{
	    count1=0;
		mode_bit1=~mode_bit1;  //如果已经达到峰点(或谷点)则改变幅度递增或递减标志
	}
}
//================================================================================================
void  dachang2(void)           //周期方波生成函数
{
    config=(word)voutb;
	config<<=5;
	config=config&0x1fff;
    config=config|0x6000;
	dac5620(config);
    count2++;
	if(count2<0xa2)            //判断方波是否应该改变电平状态
	{
	    if(!mode_bit2)         //根据方波幅度高低电平标志变量决定是输出高电平还是低电平
		    voutb=0;
		else
		    voutb=0xa2;
	}
	else
	{
	    count2=0;
		mode_bit2=~mode_bit2;  //如果已经达到改变电平状态的时刻则改变方波幅度标志变量
	}
}

/*************************************************************************************************
;  函数名称:  dac5620
;  功能描述:  TI公司8位4通DAC芯片TLC5620的控制时序
;  形式参数:  config(无符号整型变量)
;  返回参数:  无
;  局部变量:  m、n
;  调用模块:  SENDBYTE
;  日 期:    2004-10-28
;  备  注:    使用11位连续传输控制模式,使用LDAC下降沿锁存数据输入
**************************************************************************************************/
void  dac5620(word config)
{
    byte  m=0;
	word  n;
	for(;m<0x0b;m++)
	{
	    SCLA=1;
		n=config;
		n=n&0x8000;
		SDAA=(bit)n;
		SCLA=0;
		config<<=1;
	}
	LOAD=0;
	LOAD=1;
	LDAC=0;
	LDAC=1;
}





    



⌨️ 快捷键说明

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