📄 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 + -