亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
ads117.h頭文件驅動
[打印本頁]
作者:
das
時間:
2015-4-18 03:38
標題:
ads117.h頭文件驅動
基于msp430單片機下的ads117.h驅動:
#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,比較模式關閉
#define Lsiwei1 0x03 //8sps,比較模式關閉
#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
/******************************
函數名:delay
功能:延時程序/////////////15us
********************************/
void delay1(void)
{
uchar i;
for(i = 0;i < 15;i++)
_NOP();
}
/*******************************************
函數名稱:start
功 能:完成IIC的起始條件操作
參 數:無
返回值 :無
********************************************/
void start(void)
{
SCL_H;
SDA_H;
delay1();
SDA_L;
delay1();
SCL_L;
delay1();
}
/*******************************************
函數名稱:stop
功 能:完成IIC的終止條件操作
參 數:無
返回值 :無
********************************************/
void stop(void)
{
SDA_L;
delay1();
SCL_H;
delay1();
SDA_H;
delay1();
}
/*******************************************
函數名稱:mack
功 能:完成IIC的主機應答操作
參 數:無
返回值 :無
********************************************/
void mack(void)
{
SDA_L;
_NOP(); _NOP();
SCL_H;
delay1();
_NOP();_NOP();
SCL_L;
SDA_H;
delay1();
}
/*******************************************
函數名稱:mnack
功 能:完成IIC的主機無應答操作
參 數:無
返回值 :無
********************************************/
void mnack(void)
{
SDA_H;
_NOP(); _NOP();
SCL_H;
delay1();
SCL_L;
_NOP(); _NOP();
SDA_L;
delay1();
}
/*******************************************
函數名稱:ack
功 能:檢查從機的應答操作
參 數:無
返回值 :從機是否有應答: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();
}
/*******************************************
函數名稱:write1
功 能:向IIC總線發送一個1
參 數:無
返回值 :無
********************************************/
void write1(void) //下降沿發送
{
SDA_H;
delay1();
SCL_H;
delay1();
SCL_L;
delay1();
}
/*******************************************
函數名稱:write0
功 能:向IIC總線發送一個0
參 數:無
返回值 :無
********************************************/
void write0(void) //下降沿發送
{
SDA_L;
delay1();
SCL_H;
delay1();
SCL_L;
delay1();
}
/*******************************************
函數名稱:write1byte
功 能:向IIC總線發送一個字節的數據
參 數:wdata--發送的數據
返回值 :無
********************************************/
void write1byte(uchar wdata)
{
uchar i;
for(i = 8;i > 0;i--)
{
if(wdata & 0x80)
write1();
else
write0();
wdata <<= 1;
}
SDA_H;
_NOP();
}
/*******************************************
函數名稱:read1byte
功 能:從IIC總線讀取一個字節
參 數:無
返回值 :讀取的數據
********************************************/
uchar read1byte(void)
{
uchar rdata = 0x00,i;
uchar flag;
for(i = 0;i < 8;i++)
{
SDA_H;
delay1();
SCL_H;
SDA_in; //設為輸入模式
delay1();
flag = SDA_val;
rdata <<= 1;
if(flag) rdata |= 0x01;
SDA_out ; //設為輸出模式,輸出高電平,空閑
SCL_L;
delay1();
}
return rdata;
}
/***********************************
函數名;Confige1115
功能:選擇通道模式,對ads1115進行初始化
參數:uchar channel通道編號
***************************************/
void Confige1115(uchar channel) //對地址,通道,采樣范圍,轉換速率
{
uchar a_channel;
switch (channel)
{
case 0:a_channel=0xC2;break;//通道0 ,1倍放大,連續模式
case 1:a_channel=0xD2;break;//通道1,1倍放大,連續模式
case 2:a_channel=0xE2;break;//通道2,1倍放大,連續模式
case 3:a_channel=0xF2;break;//通道3,1倍放大,連續模式
default: break;
}
start();
write1byte(address);//0x90 //先寫地址,,,由Datashit知,address接地時從機地址為0X90
ack();
write1byte(config);//0x01 //再寫高字節配置,,100 : AINP = AIN0 and AINN = GND,001 : FS = ±4.096V(1)
ack();
write1byte(a_channel); //選擇通道
ack();
// write1byte(Lsiwei1); //0xe3,8sps,比較模式關閉
write1byte(Lsiwei); //0xe3,860sps,比較模式關閉 //低字節配置,111 : 860SPS
ack();
stop();
}
/**************************************
函數名:read1115
功能:從ads1115中讀出采樣值
**************************************/
long int read1115()
{
uchar result_l,result_h; //結果為兩字節
long int result;
start();
write1byte(address);//地址0x90
ack();
write1byte(conversion);//寫入0x00,告訴ads1115下一步要從conversion register中讀數據 ???
ack();
stop();
delay_ms(5);
start();
write1byte(address+1);//要讀數據了 ????
ack();
result_h=read1byte(); //先讀高字節
mack();//主機應答
result_l=read1byte();
mack();//主機應答
stop();
result=result_h*256+result_l; //****很關鍵
return result;
}
/***********************************
函數名:go_1115
功能:進行一次采樣并得到采樣值
參數: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;//轉化為電壓值,單位為v
//有正有負,最高位為符號位,單位量值=32768/4.096 V-1
return result_v;
}
/*********************************
函數名:sample
參數:int a采樣次數,uchar tep通道選擇
tep=0為通道0和通道1的差分輸入
功能:進行a次采樣,且去掉最大最小值求平均
*************************************/
float sample(int a,uchar tep) //連續采樣, ,采樣算法
{ //去掉最大最小值求平均值
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個值之和
//一共采樣次數為5*10-2*10=30次
return c;
}
復制代碼
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1