风速传感器和单片机连接,风速传感器测出风速后传给单片机,由单片机获取风速
这是传感器说明:
这是完整的单片机程序:
- #include<stc12c5a.h>
- #include <stdio.h>
- #include <string.h>
- #include<stdlib.h>
- #include<math.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar num;//num数据采集计数,mode工作模式设置:水位调节模式1、数据采集模式2、待机模式3
- int i,j,k;
- int flag1,flag2,flagd,flagj;//串口通信标志位
- uint temp1[8]={0,0,0,0,0,0,0,0};//串口通信1接收字符串,temp1和new_value[8]重用,减小内存空间
- uchar time0,time1,time2,time3,time4,time5,time6,time7,time8,time9,time10,time11;// 01秒 23分 45时 67日 89月 1011年
- void init();// 初始化函数
- void UART_1Interrupt();//串口1接收字符串
- void UART_2Interrupt();//串口2接收字符串
- void delayms(uint);//延时函数
- void delay5ms();//延时函数
- void delay50us();//延时函数
- void delay5us();//延时函数
- uchar wind_speed[8]={0x11,0x03,0x00,0x00,0x00,0x04,0x46,0x99}; //风速
- uchar table[24]={0x64,0x19,0x12,0x31,0x23,0x59,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- //定义收发数组,收发通用减小内存。
- void main()
- {
- uchar hour,minute,second;//时分秒
- int flags;
- uchar test[3]={0x01,0x03,0x02};
- flag1=0;
- flag2=0;
- flags=0;
- flagd=0;//距离标志位,为1时接收到从机串口2距离指令并发送给传感器,为2时发送距离数据
- //到从机串口1
- flagj=0;//继电器标志位,为1时收到继电器指令
- init();
- while(1)
- {
- flags=0;
- flag1=0;
- flag2=0;
- for(i=0;i<80;i++) //11为table长度table[11]
- {
- table[i]=0x00;
- }
- /******发送风速传感器命令*******/
- if((flag1==0)&&(flags==0))
- {
-
- for(i=0;i<8;i++)
- {
- SBUF=wind_speed[i];
- while(!TI); //数据传送中,发送完一组指令TI置1,请求中断,响应中断后置0
- TI=0; //清除数据传送标志
- }
- delay(500); //delay(1000)用于22.1184Mhz,,delay(500)用于11.0592Mhz
- flags=1;
- }
- if((flag1==0)&&(flags==1))
- {
- flag1=1;
- wind_speed1[0]=0xAA;
- wind_speed1[1]=0xAA;
- }
- /******发送风向传感器命令*******/
- if((flag1==1)&&(flags==1))
- {
- for(i=0;i<8;i++)
- {
- SBUF=wind_direction[i];
- while(!TI); //等待数据传送
- TI=0; //清除数据传送标志
- }
- delay(500);
- flags=2;
- }
- if((flag1==1)&&(flags==2))
- {
- flag1=2;
- wind_direction1[0]=0xAA;
- wind_direction1[1]=0xAA;
- }
- if((flag1==2)&&(flags==2))
- {
- table[0]=0x64;//数据校验位
- table[1]=(((time10-0x30)<<4)&0xf0)+(time11-0x30);//时间,年月日时分秒
- table[2]=(((time8-0x30)<<4)&0xf0)+(time9-0x30);
- table[3]=(((time6-0x30)<<4)&0xf0)+(time7-0x30);
- table[4]=(((time4-0x30)<<4)&0xf0)+(time5-0x30);
- table[5]=(((time2-0x30)<<4)&0xf0)+(time3-0x30);
- table[6]=(((time0-0x30)<<4)&0xf0)+(time1-0x30);
-
- table[7]=wind_speed1[0];
- table[8]=wind_speed1[1];
- flag2=1;
- /**************监测船数据发送给从机*************/
- delay(500);
- for(i=0;i<24;i++)
- {
- S2BUF=table[i];
- while(!(S2CON&S2TI)); //若S2TI=0,在此等待
- S2CON&=~S2TI; //S2TI=0
- }
- delay(500);
- Relay=0;
- }
-
- }
- //WDT_CONTR = 0x3C;//看门狗1S
- }
- /********************************************/
- /*串口1数据接收函数
- /********************************************/
- void UART_1Interrupt() interrupt 4
- {
- //接收完缓冲数据RI置1,响应中断,响应中断后置0
- if(RI)
- {
- RI=0;
-
- //----------------风速----------------------
- if(flag1==0)
- {
- if(num==0)
- {
- if(SBUF==0x11) table[num++] = SBUF;
-
- }
- else
- {
- table[num++] = SBUF;
- if(num > 12)
- {
- num = 0;
- flag1=1;
- wind_speed1[0]=table[3];
- wind_speed1[1]=table[4];
- }
-
- }
- }
- }
- }
- /********************************************/
- /*系统初始化
- /********************************************/
- void init()
- {
- uint i;
- num=0;//接收传感器数据计数
- LCDA=0;
- CLK_DIV=0x00;//系统时钟,不分频
- /****************串口通信初始化*****************/
- /****************定时器1初始化******************/
- TMOD=0X20;//定时器1,工作方式2,8位自动重装;定时器0,16位定时器
- TH1=0xfa;//定时器装初值,[url=mailto:9600bps@22.1184MHz]9600bps@22.1184MHz[/url]
- TL1=0xfa;//定时器装初值,[url=mailto:9600bps@22.1184MHz]9600bps@22.1184MHz[/url]
-
- SCON=0x50;//模式1,8位数据,可接收,0x50
- PCON=0x00;
- TR1=1;//定时器1中断
- IP=0x10;//串口中断优先
- EA=1;//单片机总中断,用下面的EA=1
- ES=1;//中断控制位
- /***********独立波特率发生器初始化**************/
- S2CON = 0x50; //串口2工作在方式1 10位异步收发 0X50 S2REN=1允许接收 0x40为只发送不接收
- BRT = 0xfa; //独立波特率发生器初值FA //22.1184MHz用
-
- AUXR = 0x10; //BRTR=1 独立波特率发生器开始计数
- IE2 =0x01; //开串口2中断 ES2=1
- /**************外部时钟初始化******************/
- Ds1302Init();//第一次时初始化,调整好时间
- }
- /********************************************/
- /*延时函数
- /********************************************/
- void delayms(uint ms) //延时ms
- {
- uchar i;
- while(ms--)
- {
- for(i=0;i<120;i++);
- }
- }
- void delay5ms(void) //延迟5ms
- {
- unsigned char a,b;
- for(b=185;b>0;b--)
- for(a=12;a>0;a--);
- }
- void delay50us(void) //延迟50us
- {
- unsigned char a,b;
- for(b=9;b>0;b--)
- for(a=1;a>0;a--);
- }
- void delay5us(void) //延迟5us
- {
- _nop_(); //if Keil,require use intrins.h
- }
- void delay(uint z)//延时函数
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
复制代码 请问上面的程序里哪一个是代表测得的风速啊?是这个吗:
还有请问wind_speed[8]里面的八个数代表什么?,table[24]里面的数代表什么?
求指点,哪一个是表示所测得的风速啊?
|