导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:谁有TLC0834的程序例程?发给我一份吧。在此[clair]

 *第5765篇: C51编程:谁有TLC0834的程序例程?发给我一份吧。在此先谢过了!clair@vip.sina.com

  
楼 主:clair 2002年10月28日14:54
 C51编程:谁有TLC0834的程序例程?发给我一份吧。在此先谢过了!clair@vip.sina.com
  
2楼:alan103 2003年6月24日13:49
 我昨天刚编的程序,没有仿真过,请参考,并指正
/************************************************************* 
文件名称:tlc0834.c
适用范围:模拟量信号的采集
*************************************************************/   

#include  <reg52.h>  
#include  <intrins.h>  

#define unsigned char uchar
#define unsigned int  uint

/* 常量定义,此部分以后要归到总头文件 */
/* AD转换的入口参数,仅低4位有意义,高4位恒0,低4位意义依次为:StartBit|SGL|ODD|SelectBit
其中起始位恒为1,这里不归入此字节 */
#define DIFFERENTIAL_0_1 0x08  //差分输入,CH0 + ,CH1 -,下三类似
#define DIFFERENTIAL_1_0 0x0a
#define DIFFERENTIAL_2_3 0x09
#define DIFFERENTIAL_3_2 0x0b

#define COMMEN_CHANNEL_0 0x0c  //单一通道采集,通道0相对于GND
#define COMMEN_CHANNEL_1 0x0e
#define COMMEN_CHANNEL_2 0x0d
#define COMMEN_CHANNEL_3 0x0f

/* 定义tlc0834的控制线 */
sbit AD_CLK  = 
sbit AD_DI   =
//sbit AD_SARS = //此管脚自动变高变低,不占用I/O口
sbit AD_DO   =
sbit AD_CS   =

/* 函数声明部分 */
uchar Gather(uchar ucDt);
uchar AD0834(void);


/*************************************************************
函数功能:该函数用来从tlc0834采集数据
应用范围:外部调用
入口参数:AD转换的入口参数,确定采集的通道和方式
出口参数:采集的数据
*************************************************************/
uchar Gather(uchar ucChnl)
{
 unsigned char ucDt = 0; 
 unsigned char ucDt1 = 0;
 ucDt = AD0834(ucChnl);  //采集一次
 if (ucDt)
  ucDt1 = ucDt;  //返回值不为0,有效
 delay(50);
 ucDt = AD0834(ucChnl);  
 while(ucDt1 != ucDt)
 {
  if(ucDt) 
   ucDt1 = ucDt;
  delay(50);
  ucDt = AD0834(ucChnl);
   
 }
 return(ucDt1); 
 
}


/*************************************************************
函数功能:该函数用来从tlc0834中得到一次采集的数据
应用范围:内部使用
入口参数:所要采集的通道和方式
出口参数:一次采集后的数据
*************************************************************/
uchar AD0834(uchar ucDt)
{
 unsigned char i,ucMask = 0x80;
 unsigned char ucMask1 = 0x08;
 unsigned char ucDt1 = 0;
 unsigned char ucDt2 = 0;
 AD_CS = 0;
 AD_CLK = 1;
 _nop_();_nop_();
 for(i = 0;i   < 4;i++)  //先输入采样的通道和方式
 {
  AD_CLK = 0;
  _nop_();_nop_(); 
  if(ucDt & ucMask1)
   DI = 1;
  else 
   DI = 0;
  AD_CLK = 1;
  ucMask >  >  = 1;  
 }
 AD_CLK = 0;   //空一个CLOCK,再去读数据
 _nop_();_nop_();
 AD_CLK = 1; 
 for(i = 0;i   < 7; i++)  //先读高7位到ucDt1
 {
  AD_CLK = 0;
  if(AD_DO) 
   ucDt1 |= ucMask;
  ucMask >  >  = 1;
  AD_CLK = 1;
 }
 AD_CLK = 0;
 if(AD_DO)
 {
  ucDt1 |= ucMask; //再读bit0到ucDt1  
  ucDt2 |= ucMask; //读bit0到ucDt2
 }
// AD_SARS = 0;
 AD_CLK = 1;
 for(i = 0;i   < 7; i++)
 {
  ucMask   <  <= 1;
  AD_CLK = 0;
  if(AD_DO) 
   ucDt1 |= ucMask;
  AD_CLK = 1;  
 }
 AD_CS = 1;
 if(ucDt1 == ucDt2)
  return(ucDt1);
 else
  return(0);
 
}


>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:初学者:设计过485总线通信的朋友请进

[下一篇主题]:硬件:请给位大虾给小弟介绍一下在深圳那里可以找到320x240的单色液晶屏,先谢了