欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
ads117.h頭文件驅(qū)動(dòng)
[打印本頁(yè)]
作者:
das
時(shí)間:
2015-4-18 03:38
標(biāo)題:
ads117.h頭文件驅(qū)動(dòng)
基于msp430單片機(jī)下的ads117.h驅(qū)動(dòng):
#define SCL_H P2OUT |= BIT4
#define SCL_L P2OUT &= ~BIT4
#define SDA_H P2OUT |= BIT3
#define SDA_L P2OUT &= ~BIT3
#define address 0x90
#define config 0x01
#define conversion 0x00
#define Lsiwei 0xE3 //860sps,比較模式關(guān)閉
#define Lsiwei1 0x03 //8sps,比較模式關(guān)閉
#define channel_0 0 //表示選擇通道0和通道1的差分輸入
#define channel_1 1 //表示選擇通道1
#define channel_2 2 //表示選擇通道2
#define channel_3 3 //表示選擇通道3
#define SDA_in P2DIR &= ~BIT3 //SDA改成輸入模式
#define SDA_out P2DIR |= BIT3 //SDA變回輸出模式
#define SDA_val P2IN&BIT3 //SDA的位值
#define TRUE 1
#define FALSE 0
/******************************
函數(shù)名:delay
功能:延時(shí)程序/////////////15us
********************************/
void delay1(void)
{
uchar i;
for(i = 0;i < 15;i++)
_NOP();
}
/*******************************************
函數(shù)名稱(chēng):start
功 能:完成IIC的起始條件操作
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void start(void)
{
SCL_H;
SDA_H;
delay1();
SDA_L;
delay1();
SCL_L;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):stop
功 能:完成IIC的終止條件操作
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void stop(void)
{
SDA_L;
delay1();
SCL_H;
delay1();
SDA_H;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):mack
功 能:完成IIC的主機(jī)應(yīng)答操作
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void mack(void)
{
SDA_L;
_NOP(); _NOP();
SCL_H;
delay1();
_NOP();_NOP();
SCL_L;
SDA_H;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):mnack
功 能:完成IIC的主機(jī)無(wú)應(yīng)答操作
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void mnack(void)
{
SDA_H;
_NOP(); _NOP();
SCL_H;
delay1();
SCL_L;
_NOP(); _NOP();
SDA_L;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):ack
功 能:檢查從機(jī)的應(yīng)答操作
參 數(shù):無(wú)
返回值 :從機(jī)是否有應(yīng)答:1--wu,0--you
********************************************/
void ack()
{
uchar i;
i=0;
SDA_in;
SCL_H;
delay1();
while((P2IN&BIT1)&&(i<250)) i++;
SDA_out;
SCL_L;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):write1
功 能:向IIC總線發(fā)送一個(gè)1
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void write1(void) //下降沿發(fā)送
{
SDA_H;
delay1();
SCL_H;
delay1();
SCL_L;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):write0
功 能:向IIC總線發(fā)送一個(gè)0
參 數(shù):無(wú)
返回值 :無(wú)
********************************************/
void write0(void) //下降沿發(fā)送
{
SDA_L;
delay1();
SCL_H;
delay1();
SCL_L;
delay1();
}
/*******************************************
函數(shù)名稱(chēng):write1byte
功 能:向IIC總線發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
參 數(shù):wdata--發(fā)送的數(shù)據(jù)
返回值 :無(wú)
********************************************/
void write1byte(uchar wdata)
{
uchar i;
for(i = 8;i > 0;i--)
{
if(wdata & 0x80)
write1();
else
write0();
wdata <<= 1;
}
SDA_H;
_NOP();
}
/*******************************************
函數(shù)名稱(chēng):read1byte
功 能:從IIC總線讀取一個(gè)字節(jié)
參 數(shù):無(wú)
返回值 :讀取的數(shù)據(jù)
********************************************/
uchar read1byte(void)
{
uchar rdata = 0x00,i;
uchar flag;
for(i = 0;i < 8;i++)
{
SDA_H;
delay1();
SCL_H;
SDA_in; //設(shè)為輸入模式
delay1();
flag = SDA_val;
rdata <<= 1;
if(flag) rdata |= 0x01;
SDA_out ; //設(shè)為輸出模式,輸出高電平,空閑
SCL_L;
delay1();
}
return rdata;
}
/***********************************
函數(shù)名;Confige1115
功能:選擇通道模式,對(duì)ads1115進(jìn)行初始化
參數(shù):uchar channel通道編號(hào)
***************************************/
void Confige1115(uchar channel) //對(duì)地址,通道,采樣范圍,轉(zhuǎn)換速率
{
uchar a_channel;
switch (channel)
{
case 0:a_channel=0xC2;break;//通道0 ,1倍放大,連續(xù)模式
case 1:a_channel=0xD2;break;//通道1,1倍放大,連續(xù)模式
case 2:a_channel=0xE2;break;//通道2,1倍放大,連續(xù)模式
case 3:a_channel=0xF2;break;//通道3,1倍放大,連續(xù)模式
default: break;
}
start();
write1byte(address);//0x90 //先寫(xiě)地址,,,由Datashit知,address接地時(shí)從機(jī)地址為0X90
ack();
write1byte(config);//0x01 //再寫(xiě)高字節(jié)配置,,100 : AINP = AIN0 and AINN = GND,001 : FS = ±4.096V(1)
ack();
write1byte(a_channel); //選擇通道
ack();
// write1byte(Lsiwei1); //0xe3,8sps,比較模式關(guān)閉
write1byte(Lsiwei); //0xe3,860sps,比較模式關(guān)閉 //低字節(jié)配置,111 : 860SPS
ack();
stop();
}
/**************************************
函數(shù)名:read1115
功能:從ads1115中讀出采樣值
**************************************/
long int read1115()
{
uchar result_l,result_h; //結(jié)果為兩字節(jié)
long int result;
start();
write1byte(address);//地址0x90
ack();
write1byte(conversion);//寫(xiě)入0x00,告訴ads1115下一步要從conversion register中讀數(shù)據(jù) ???
ack();
stop();
delay_ms(5);
start();
write1byte(address+1);//要讀數(shù)據(jù)了 ????
ack();
result_h=read1byte(); //先讀高字節(jié)
mack();//主機(jī)應(yīng)答
result_l=read1byte();
mack();//主機(jī)應(yīng)答
stop();
result=result_h*256+result_l; //****很關(guān)鍵
return result;
}
/***********************************
函數(shù)名:go_1115
功能:進(jìn)行一次采樣并得到采樣值
參數(shù):uchar temp 通道選擇
*********************************/
float go_1115(uchar temp)
{
long int result_gd;
float result_v;
Confige1115(temp);
delay_ms(5);
result_gd=read1115();
delay_ms(5);
result_v=result_gd/7999.755859;//轉(zhuǎn)化為電壓值,單位為v
//有正有負(fù),最高位為符號(hào)位,單位量值=32768/4.096 V-1
return result_v;
}
/*********************************
函數(shù)名:sample
參數(shù):int a采樣次數(shù),uchar tep通道選擇
tep=0為通道0和通道1的差分輸入
功能:進(jìn)行a次采樣,且去掉最大最小值求平均
*************************************/
float sample(int a,uchar tep) //連續(xù)采樣, ,采樣算法
{ //去掉最大最小值求平均值
int i,j;
float max,min,v_out,c=0;
max=min=go_1115(tep);
for(i=0;i<=9;i++)
{
for(j=0;j<=4;j++)
{
v_out=go_1115(tep);
if(v_out>max) //找出最值
{max=v_out;}
if(v_out<min)
{min=v_out;}
c=c+v_out;//全部加,到最后減掉最值
}
if(j<=5)
c=c-max-min; //去掉最大最小
}
c=c/30;
//每5次采樣為一組,每次保留每組中的除去最大最小值的3個(gè)值之和
//一共采樣次數(shù)為5*10-2*10=30次
return c;
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1