⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 串行ADTLV2543和DATLV5618的接口程序
💻 C
字号:
/*=========================================================================================*/
/*张刚--修改于2005年11月18日*/

/*本模块实现
	1.12位AD转换电路TLC2543的A/D转换
	2.12位DA转换电路TLV5618的D/A转换*/
/*=========================================================================================*/
#pragma ot(4,size)
#include <77e58.h>
#include <intrins.h>
#include <constdef.h>
#include <sys.h>
#include <x25045.h>

sbit CLOCK=P1^7;		//---TLC2543时钟---//
sbit D_IN=P1^6;		//---TLC2543 命令输入---//
sbit D_OUT=P1^5;		//---TLC2543 转换输出---//
sbit CS1=P1^4;			//---tlc2543  cs---//
//sbit CS2=P3^2;			//---tlv5618 CS---//

#define NOP5() {_nop_();_nop_();_nop_();_nop_();_nop_();}
#define NOP10() {NOP5();NOP5();}

/*------单通道转换-------------*/
uint Tlc2543S(uchar cPort)//从TLC2543读取采样值,形参port是采样的通道号
{	
	uint   iTransData=0;
	uchar  cTemp;

	WatchDog();
	CS1=1;
	CLOCK=0;
	cPort<<=4;
	CS1=0;
	for (cTemp=0;cTemp<8;cTemp++) //Write Access and Parameter to 2543
	{
		D_IN=(bit)(cPort&0x80);
		cPort<<=1;
		CLOCK=1;
		NOP5();
		CLOCK=0;
		NOP5();
	}
	NOP10();
	for (cTemp=0;cTemp<4;cTemp++) //Fill with 4 CLOCK
	{
		CLOCK=1;
		NOP5();
		CLOCK=0;
		NOP5();
	}
	CS1=1;				
	NOP10();
	CS1=0;
	for (cTemp=0;cTemp<12;cTemp++)
	{
		iTransData<<=1;
		if (D_OUT)
			iTransData|=D_OUT;
		CLOCK=1;
		NOP5();
		CLOCK=0;
		NOP5();
	}
	CS1=1;
	NOP10();
				
	return (iTransData);
}


//---DA转换---//
void tlc5618(uint iData,uchar cChannel)  
{
	uchar cTemp;
	uint iAd_Out=0;

	WatchDog();
Out573(7,TRUE);
 	CLOCK=1;
	
	if (cChannel)
   	iAd_Out|=0x0004;
	else
		iAd_Out|=0x000c;
	iAd_Out<<=12;
	iAd_Out|=iData;

Out573(7,FALSE);
	for (cTemp=0;cTemp<16;cTemp++)  
	{
		if (iAd_Out&0x8000) 
			D_IN=1;
		else 
			D_IN=0;
		NOP5();
      CLOCK=0;
   	iAd_Out<<=1;
      CLOCK=1;
   }
Out573(7,TRUE);

	return;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -