📄 ad.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 + -