求助:ADC模块TLC2543如何使用?

2019-07-20 19:53发布

打算用TLC2543来做为外接的AD采样,不过不是很清楚到底应该怎样设置,有没有用过这块芯片的呀?过来指点一二
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
HenryYam
2019-07-21 04:30
以下是多年前用TLC2543C时参考的别人的代码(我的代码暂时没有找到):

/*我用KEILC调试2543的程序,
单步step into执行能够得到正确的结果,
但是step over执行时结果却总是0fff,
但根据执行时间来看,应该进入了子程序,为什么结果出不来呢?
在坛子上搜索时,发现madswan也遇到过这种情况,恳求各位大侠解惑
(2543控制口与MCU都接了反相器以增强驱动)
源程序如下:        */
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
//2543控制脚定义
sbit CLOCK=P1^4; //2543时钟
sbit D_IN=P1^5; //2543输入
sbit D_OUT=P1^7; //2543输出
sbit D_CS=P1^6; //2543片选

#define uint unsigned int
#define uchar unsigned char

/***************************
名称:delay
功能:延时模块
输入参数:n要延时的周期数
输出参数:无
****************************/

void delay(uchar n)
{
   uchar k;
   for(k=0;k<n;k++)
    {
          _nop_();
        }
}
/************************
名称:read2543
功能:TLC2543驱动模块
输入参数:port通道号
输出参数:AD转换值
************************/

uint read2543(uchar port)
{uchar data i;
uint ad_data;
ad_data=0;
port<<=4;
CLOCK=0;
D_CS=0;
D_IN=1;
D_OUT=1;
D_CS=1;
delay(5);  //延迟20us
for(i=0;i<12;i++)
{
  if((port&0x80)!=0)
    {D_IN=0;}
  else
    {D_IN=1;}
CLOCK=0;
port<<=1;
CLOCK=1;
}
D_CS=0;
delay(5);
D_CS=1;
delay(5);
for(i=0;i<12;i++)
{
  if(D_OUT==0){ad_data|=0x01;}
CLOCK=0;
CLOCK=1;
ad_data=ad_data<<1;
}
ad_data=ad_data>>1;
return(ad_data);
}

你参考一下吧。

一周热门 更多>