?? tlc0834.c
字號:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// H.C.H
// NNU(南京師范大學通信工程)
// TLC0834驅動程序TLC0834_II.c
// uchar adc_tlc0834(uchar channel);
// 函數說明:channel為通道的選擇:0……CH0 1……CH1 2……CH2 3……CH3
// 當error=0時,返回的值為有效值,當error=1時,返回值無效
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK=P1^0; //TLC0834---PIN12
sbit DI=P1^1; //TLC0834---PIN13
sbit DO=P1^2; //TLC0834---PIN10
sbit CS=P1^3; //TLC0834---PIN2
bit error=1;
uchar adc_tlc0834(uchar channel);
main()
{
uchar result;
result=adc_tlc0834(3);
while(1);
}
uchar adc_tlc0834(uchar channel)
{
uchar a[3];
uchar i,Temp1=0,Temp2=0;
if(channel==0) //CH0
{
a[0]=1;
a[1]=0;
a[2]=0;
}
else if(channel==1) //CH1
{
a[0]=1;
a[1]=1;
a[2]=0;
}
else if(channel==2) //CH2
{
a[0]=1;
a[1]=0;
a[2]=1;
}
else if(channel==3) //CH3
{
a[0]=1;
a[1]=1;
a[2]=1;
}
CS=1;
_nop_();_nop_();_nop_();_nop_();
CLK=0;
CS=0; //使AD通道打開
DI = 1; //Start bit=1
CLK = 1;
_nop_();
_nop_();
for(i=0;i<3;i++)
{
CLK = 0;
_nop_();
_nop_();
DI = a[i];
CLK = 1;
_nop_();
_nop_();
}
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
for(i=0;i<=6;i++)
{
CLK = 0; //時鐘為低電平
if(DO)
{ //如果采集到的位為1
Temp1=Temp1+1; //給臨時存儲Temp1加1
Temp1=Temp1<<1;
} //臨時存儲器左移一位
else
Temp1=Temp1<<1; //如果采集到的數位為0,臨時存儲器左移一位
_nop_();
_nop_();
_nop_();
_nop_();
CLK = 1;
} //時鐘為高電平,完成一個時鐘周期數據采集
CLK = 0;
if(DO) Temp1=Temp1+1;
if(DO) Temp2=0x80;
CLK = 1;
//采集數據校驗
for(i=0;i<=6;i++)
{
CLK=0;
if(DO){
Temp2=Temp2>>1;
Temp2=Temp2+0x80; }
else
Temp2=Temp2>>1;
CLK = 1;
}
CS = 1;
if(Temp1==Temp2) //判斷數據采集是否有效
{
error=0;
return Temp1;
}
else
{
error=1;
return 0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -