打印

TLC2543B的应用问题 求助!!!!

[复制链接]
1669|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lixitong|  楼主 | 2010-8-26 17:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我用TLC2543写的一个应用程序,使用流水灯来显示DA输出的程序,但它不工作,DA输出总是0,麻烦各位高手帮忙看看呀,不胜感激!!!
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

//********************************************************************************************
//           TLC2543控制位宏定义
//*********************************************************************************************
sbit AD_EOC=P1^0;
sbit AD_IO_CLOCK=P1^1;
sbit AD_DATA_IN=P1^2;
sbit AD_DATA_OUT=P1^3;
sbit AD_CS_2543=P1^4;

//************************************************************************************
//功能:延时函数
//************************************************************************************
delay(uchar t)
{
  uint i,j;
  for(i=0;i<t;i++)
   for(j=0;j<1000;j++);
}
void delay_us() // 固定延时6微秒
{
unsigned char n=0;
for(n=15;n>0;n--)
{
  _nop_();
}
}
//********************************************************************************************
//    AD转换程序
//********************************************************************************************
/*
  TLC2543的DATAINPUT的高8位控制字格式如下(低8位无效):
  D7 D6 D5 D4        D3 D2               D1                D0
  通道选择
  0000---AIN0      01---8BIT          0---MSB first       0---Unipolar
  0001---AIN1      10---12BIT         1---LSB first       1---Bipolar
  0010---AIN2      11---16BIT
  0011---AIN3
  0100---AIN4
  0101---AIN5
  0110---AIN6
  0111---AIN7
  1000---AIN8
  1001---AIN9
  1010---AIN10
*/
//chunnle 0-10 均为16 bits,MSB first, unipolar
static const uchar ad_chunnle_select[11]=
{
  0x0c,//AD chunnle 00 select
  0x1c,//AD chunnle 01 select
  0x2c,//AD chunnle 02 select
  0x3c,//AD chunnle 03 select
  0x4c,//AD chunnle 04 select
  0x5c,//AD chunnle 05 select
  0x6c,//AD chunnle 06 select
  0x7c,//AD chunnle 07 select
  0x8c,//AD chunnle 08 select
  0x9c,//AD chunnle 09 select
  0xac//AD chunnle 10 select
};
//TLC2543读出上一次AD值(12位精度),并开始下一次转换
uint ad2543work(uchar chunnle_select)
{

uint din;
uchar dout,i;
din=0;
dout=ad_chunnle_select[chunnle_select];        //选择控制命令
while(AD_EOC==0);
AD_IO_CLOCK=0;
AD_CS_2543=0;
for(i=0;i<16;i++)
{
  if(dout&0x80)
  {AD_DATA_IN=1;}                             //控制命令从MSB-LSB,向AD发数
  else
  {AD_DATA_IN=0;}
  AD_IO_CLOCK=1;
  dout<<=1;
  din<<=1;
  delay_us;
  if(AD_DATA_OUT==1)
  {din|=0x0001;}                              // 接收AD数据,从MSB-LSB
  AD_IO_CLOCK=0;
  delay_us;
}
AD_CS_2543=1;
return(din>>4);                                    //12位精度
}

//************************************************************************************
//功能:主程序
//************************************************************************************
main()
{
  uint kk=0x0000;  //存储A/D采集的数字量
while(1)
  {
   kk=ad2543work(0);        //采一次数据
   P0=~(kk>>4);     //P0=~(kk/128);    //取其高八位
   delay(10);       //延时一段时间
  }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

16

帖子

1

粉丝