風速傳感器和單片機連接,風速傳感器測出風速后傳給單片機,由單片機獲取風速
這是傳感器說明:
這是完整的單片機程序:
- #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]里面的數代表什么?
求指點,哪一個是表示所測得的風速啊?
|