?? 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 + -