⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 senser.txt

📁 凭借它在手机技术领域的地位、在射频半导体工艺方面的广泛知识
💻 TXT
字号:
#include "GPS_ADC.h"
int sensorRH_DataBuf[sensorRH_SIZE];
int sensorT_DataBuf[sensorT_SIZE];
void initmeasure(void)
{
IOWR_ALTERA_AVALON_PIO_DIRECTION(measuredata_BASE,1)//设置方向为输出方向;
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1);    //data端置为高;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);     //sck端置为低;
///////////////////////以上初始状态的情形;

IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);
usleep(10000);
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,0); 
//usleep(10000);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
//usleep(10000);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);
usleep(10000);
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1); 
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
}
////////////////////////////////////////////////////////////

void sensor_Waiting_completed(void)
{
    unsigned int completed;
    completed=1;
    IOWR_ALTERA_AVALON_PIO_DIRECTION(measuredata_BASE,0)//设置方向为输入方向;
    while(completed)
      {    
      completed=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE); 
      }
}
///////////////////////////////////////////////////////////
void measureRH(void)
{
unsigned int flag1;
unsigned int flag2;
unsigned int flag3;
int cnt;


initmeasure();

IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,0); //initmeasure()中置方向为输出方向;
for(cnt=0;cnt<5;cnt++)
{
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第1~5个上升沿;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
}

/////////////////////////////////////////////前五个上升沿时,数据段均为0;


/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第二个上升沿;0
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第三个上升沿;0
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第四个上升沿;0
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第五个上升沿;0*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////



IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
usleep(10);//SCK下降沿之后 ,数据才能发生改变。
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1); 
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第六个上升沿;1
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,0); 
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第七个上升沿;0
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1);
usleep(10);//保证sck的最大频率,不能超过10MHZ; 
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第八个上升沿;1
/////////////////////////////////////////////////湿度测量命令发送完毕;

IOWR_ALTERA_AVALON_PIO_DIRECTION(measuredata_BASE,0)      //设置方向为输入方向;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);           //第八个下降沿;
flag1=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE); //flag1此时应该为低。
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);           //第九个上升沿;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);           //第九个下降沿;
flag2=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE); //flag2此时应该为高。
///////////////////////////////////////////////////////////若flag1=0,flag2=1则表示传感器已接收到命令;

sensor_Waiting_completed()//////等待测量完毕;

for(cnt=0;cnt<4;cnt++)
{
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第15~12个上升沿;
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第15~12个下降沿;
}
//////////////////////////产生4个时钟脉冲;因为湿度的有效位为12位;

for(cnt=0;cnt<4;cnt++)
{
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第11~8个上升沿;
usleep(10);//保证sck的最大频率,不能超过10MHZ;
sensorRH_DataBuf[sensorRH_SIZE-cnt]=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第11~8个下降沿;
}
/////////////////////////读完一个字节;

IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
flag3=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
//////////////////////读完一个字节后,把data拉为低作为标志;

for(cnt=0;cnt<8;cnt++)
{
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第7~0个上升沿;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
sensorRH_DataBuf[sensorRH_SIZE-4-cnt]=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第7~0个下降沿;
}
//////////////////////////////////////////////////////第二个字节测量完毕;
IOWR_ALTERA_AVALON_PIO_DIRECTION(measuredata_BASE,1)//设置方向为输出方向;
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1);
usleep(10000);                                     //保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);
/////////////////////////////////////////////////////测量完LSB后,通过置DATA位为高来中止通信。 
}
/////////////////////////////////////////////////////////////////////////////////////
第二个函数;
/////////////////////////////////////////////////////////////////////////////////////

void measureT(void)
{
unsigned int flag1';
unsigned int flag2';
unsigned int flag3';
int cnt;
initmeasure();

IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,0); 
for(cnt=0;cnt<6;cnt++)
{
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第1~5个上升沿;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
}
///////前6个上升沿时,数据段均为0;
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1); 
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);

/////////////////////////////////////////////湿度测量命令发送完毕;
IOWR_ALTERA_AVALON_PIO_DIRECTION(measuredata_BASE,0)//设置方向为输入方向;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第八个下降沿;
flag1'=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);flag1'此时应该为低。
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第九个上升沿;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第九个下降沿;
flag2'=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);//flag2'此时应该为高。
//////////////////////////////////若flag1'=0,flag2'=1则表示传感器已接收到命令;
sensor_Waiting_completed()//////等待测量完毕;
for(cnt=0;cnt<2;cnt++)
{
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第15~14个上升沿;
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第15~14个下降沿;
}
//////////////////////////产生2个时钟脉冲;因为湿度的有效位为14位;
for(cnt=0;cnt<6;cnt++)
{
usleep(10);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第13~8个上升沿;
usleep(10);//保证sck的最大频率,不能超过10MHZ;
sensorRH_DataBuf[sensorRH_SIZE-cnt]=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第13~8个下降沿;
}
/////////////////////////到此就读完一个字节;
 

IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
flag3'=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);
//////////////////////读完一个字节后,把data拉为低作为标志;


for(cnt=0;cnt<8;cnt++)
{
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);//第7~0个上升沿;
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
sensorRH_DataBuf[sensorRH_SIZE-4-cnt]=IORD_ALTERA_AVALON_PIO_DATA(measuredata_BASE_BASE);
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,0);//第7~0个下降沿;
}
/////////////////////第二个字节测量完毕;

IOWR_ALTERA_AVALON_PIO_DIRECTION(measuredata_BASE,1)//设置方向为输出方向;
IOWR_ALTERA_AVALON_PIO_DATA(measuredata_BASE,1);
usleep(10000);//保证sck的最大频率,不能超过10MHZ;
IOWR_ALTERA_AVALON_PIO_DATA(measuresck_BASE,1);
////////////////////测量完LSB后,通过置DATA位为高来中止通信。 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -