📄 tlc2543.c
字号:
//========================================================================
//TLC2543.c开始
//=========================================================================
//============================================================
//日期:2007.03.04
//作者:张丰盛
//审核:张丰盛
//============================================================
//============================================================
extern unsigned int *P_IOB_Data;
extern unsigned int *P_IOA_Data;
#define PORT 0 //1为IOA,0为IOB
#define Set_TLC2543_DIN 0x0001 //DATA INPUT
#define Clear_TLC2543_DIN 0xfffe
#define Set_TLC2543_CLK 0x0002 //I/O CLK
#define Clear_TLC2543_CLK 0xfffc
#define Set_TLC2543_CS 0x0004 //CS
#define Clear_TLC2543_CS 0xfffb
#define Set_TLC2543_DOUT 0x0008 //DOUT
#define Clear_TLC2543_DOUT 0xfff7
//============================================================
//============================================================
//函数名称:unsigned int drive_TLC2543(unsigned int channal)
//函数功能:应用TLC2543进行12位的A/D转换 12位输出,高位在前
//输入参数:转换的通道号
//输出参数:A/D转换的结果
//日期:2007.03.04
//============================================================
#if PORT //TLC2543接在IOA口
unsigned int drive_TLC2543(unsigned int channal)
{
unsigned int i;
unsigned int ioa;
unsigned int result;
ioa=*P_IOA_Data; //CLK=0
ioa=ioa&Clear_TLC2543_CLK;
*P_IOA_Data=ioa;
ioa=*P_IOA_Data; //CS=0
ioa=ioa&Clear_TLC2543_CS;
*P_IOA_Data=ioa;
channal=channal<<12;
for(i=12;i>0;i--) //写入通道号给TLC2543
{
ioa=*P_IOA_Data;
if(channal&0x8000)
ioa=ioa|Set_TLC2543_DIN;
else
ioa=ioa&Clear_TLC2543_DIN;
*P_IOA_Data=ioa;
ioa=*P_IOA_Data; //CLK=1
ioa=ioa|Set_TLC2543_CS;
*P_IOA_Data=ioa;
ioa=*P_IOA_Data;
if(ioa&Set_TLC2543_DOUT)
result=result|0x0001;
result=result<<1;
ioa=*P_IOA_Data; //CLK=0
ioa=ioa&Clear_TLC2543_CS;
*P_IOA_Data=ioa;
channal=channal<<1;
}
return 200;
}
#else //TLC2543接在IOB口
unsigned int drive_TLC2543(unsigned int channal)
{
unsigned int i;
unsigned int iob;
unsigned int result=0;
iob=*P_IOB_Data; //CLK=0
iob=iob&Clear_TLC2543_CLK;
*P_IOB_Data=iob;
iob=*P_IOB_Data; //CS=0
iob=iob&Clear_TLC2543_CS;
*P_IOB_Data=iob;
channal=channal<<12;
for(i=12;i>0;i--) //写入通道号给TLC2543
{
iob=*P_IOB_Data;
if(channal&0x8000)
iob=iob|Set_TLC2543_DIN;
else
iob=iob&Clear_TLC2543_DIN;
*P_IOB_Data=iob;
iob=*P_IOB_Data; //CLK=1
iob=iob|Set_TLC2543_CLK;
*P_IOB_Data=iob;
iob=*P_IOB_Data;
if(iob&Set_TLC2543_DOUT)
result=result|0x0001;
result=result<<1;
iob=*P_IOB_Data; //CLK=0
iob=iob&Clear_TLC2543_CLK;
*P_IOB_Data=iob;
channal=channal<<1;
}
result=result>>1;
iob=*P_IOB_Data; //CS=1
iob=iob|Set_TLC2543_CS;
*P_IOB_Data=iob;
return result;
}
#endif
//============================================================
//=============================================================================
//TLC2543.c结束
//=============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -