|
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P1^1;
sbit CS = P1^2;
sbit SDA = P1^0;
uchar bdata dat_in_h;
uchar bdata dat_in_l;
sbit h_7 = dat_in_h^7;
sbit l_7 = dat_in_l^7;
void delayms(uint j)
{
uchar i=250;
for(;j>0;j--)
{while(--i);
i=249;
while(--i);
i=250;
}
}
/*******************************************************************************
*** 函 數(shù) 名: void Write_12Bits()
*** 功能描述: 一次向TLC中寫入12bit數(shù)據(jù);
/******************************************************************************/
void Write_12Bits(void)
{
uchar i;
SCL = 0; //置零SCL,為寫bit做準(zhǔn)備;
CS = 0;
for(i=0;i<2;i++)//循2次,發(fā)送高兩位;
{
if(h_7) //高位先發(fā);
{
SDA = 1; //將數(shù)據(jù)送出;
SCL = 1; //提升時(shí)鐘,寫操作在時(shí)鐘上升沿觸發(fā);
SCL = 0; //結(jié)束該位傳送,為下次寫作準(zhǔn)備;
}
else
{
SDA = 0;
SCL = 1;
SCL = 0;
}
dat_in_h <<= 1;
}
for(i=0;i<8;i++)//循環(huán)八次,發(fā)送低八位;
{
if(l_7)
{
SDA = 1; //將數(shù)據(jù)送出;
SCL = 1; //提升時(shí)鐘,寫操作在時(shí)鐘上升沿觸發(fā);
SCL = 0; //結(jié)束該位傳送,為下次寫作準(zhǔn)備;
}
else
{
SDA = 0;
SCL = 1;
SCL = 0;
}
dat_in_l <<= 1;
}
for(i=0;i<2;i++)//循環(huán)2次,發(fā)送兩個(gè)虛擬位;
{
SDA = 0;
SCL = 1;
SCL = 0;
}
CS = 1;
SCL = 0;
}
/*******************************************************************************
*** 函 數(shù) 名: void TLC5615_Start(uint dat_in)
*** 功能描述: 啟動(dòng)DAC轉(zhuǎn)換;
/******************************************************************************/
void TLC5615_Start(uint dat_in)
{
dat_in %= 1024;
dat_in_h = dat_in/256;
dat_in_l = dat_in%256;
dat_in_h <<= 6;
Write_12Bits();
}
void main()
{
while(1)
{
TLC5615_Start(0xffff);
delayms(1);
}
}
|
|