TLC549单片机程序

电子常识

2647人已加入

描述

  TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,采用了CMOS工艺,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转换速率为 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。

  TLC549均有片内系统时钟,该时钟与I/O CLOCK是独立工作的,无须特殊的速度或相位匹配。其工作时序如图2所示。 当CS为高时,数据输出(DATA OUT)端处于高阻状态,此时I/O CLOCK不起作用。这种CS控制作用允许在同时使用多片TLC549时,共用I/O CLOCK,以减少多路(片)A/D并用时的I/O控制端口。

  TLC549 单片机程序

  #include 《TLC549.h》

  #include 《Mydefine.h》

  //------------------------------------------------------------------------

  #define N 8

  unsigned char count;//滤波函数的计数值

  /*unsigned char bdata dat; //dat是可位寻址的变量

  sbit dat7=dat^7;

  sbit dat6=dat^6;

  sbit dat5=dat^5;

  sbit dat4=dat^4;

  sbit dat3=dat^3;

  sbit dat2=dat^2;

  sbit dat1=dat^1;

  sbit dat0=dat^0; //取出dat的各个位*/

  //------------------------------------------------------------------------

  unsigned char TLC549_ReadByte(void)

  { //读一个字节函数

  unsigned char value=0,i=0;

  TLC549_DOUT=1;//51单片机读数据时得先把管脚置1

  for(i=0;i《8;i++)

  {

  if(TLC549_DOUT==1)

  value|=(0x80》》i);//获取数据线的位放到相应位上

  //(有1时写1,无1时保持0)

  TLC549_CLK=1;

  TLC549_CLK=0;

  delayus(50);//根据datasheet,下降沿产生后,

  //400ns后新的位被写到数据线上,所以这里进行延时

  }

  return value;

  }

  unsigned char TLC549_GetValue(void)

  {

  unsigned char ConvertValue;

  TLC549_CS=0; //打开片选

  ConvertValue=TLC549_ReadByte(); //读取转换后的8位AD值

  TLC549_CS=1; //关闭片选

  delayus(50); //等待转换结束 最长17us

  return ConvertValue; //返回转换结果

  }

  unsigned char TLC549_Filter() //滤波函数

  {

  char count,i,j;

  unsigned char value_buf[N],temp;

  int sum=0;

  for (count=0;count《N;count++)

  {

  value_buf[count] = TLC549_GetValue();

  delayus(300);

  }

  for (j=0;j《N-1;j++)

  {

  for (i=0;i《N-j;i++)

  {

  if ( value_buf[j]》value_buf[i+j] )

  {

  temp = value_buf[j];

  value_buf[j] = value_buf[i+j];

  value_buf[i+j] = temp;

  }

  }

  }

  for(count=1;count《N-1;count++)

  sum += value_buf[count];

  return (unsigned char)(sum/(N-2));

  }

  unsigned char AD_Convert(void)

  {

  unsigned char AD_Value;

  AD_Value=TLC549_Filter();

  return AD_Value;

  }

  /*

  //滤波函数:算数平均滤波

  /* A、方法:

  连续取N个采样值进行算术平均运算

  N值较大时:信号平滑度较高,但灵敏度较低

  N值较小时:信号平滑度较低,但灵敏度较高

  N值的选取:一般流量,N=12;压力:N=4

  B、优点:

  适用于对一般具有随机干扰的信号进行滤波

  这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动

  C、缺点:

  对于测量速度较慢或要求数据计算速度较快的实时控制不适用

  比较浪费RAM

  unsigned char TLC549_Filter(void)

  {

  unsigned int sum=0;

  for(count=0;count《N;count++)

  { //连续采8个数据,相加,放到sum中

  sum+=TLC549_GetValue();

  delayus(300);

  }

  return (unsigned char)(sum》》3);//求平均值,左移三位相当于除以8

  } */

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分