📄 senser.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 + -