新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于MSP430的無線傳輸協(xié)議

        基于MSP430的無線傳輸協(xié)議

        作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
        該協(xié)議基于在同一塊MSP430上用串口1發(fā)射,串口0接收,使用兩塊無線收發(fā)的NRF401模塊。

        初始化串口0,用于接收

        void init_UART0(void)
        {
        UCTL0 &= ~SWRST;
        UCTL0 |=CHAR;//0X10;
        UBR00 = 0x03;
        UBR10 = 0x00;
        UMCTL0 = 0x4A;
        UTCTL0 = SSEL0;//0X10;
        ME1 |= UTXE0+URXE0 ; //enable the UART0
        IE1 |=URXIE0;
        P3SEL|=BIT4+BIT5;
        P3DIR|=BIT4;
        Clinet_Receive;
        }

        初始化串口1,用于發(fā)送

        void init_UART1()
        {
        UCTL1 &= ~SWRST;
        UCTL1 |=CHAR;//0X10;
        UBR01 = 0x03;
        UBR11 = 0x00;
        UMCTL1 = 0x4A;
        UTCTL1 = SSEL0; //
        ME2 |= URXE1+UTXE1 ; //enable the UART1
        IE2 |=URXIE1;
        P3SEL|=BIT6+BIT7;
        P3DIR|=BIT6+BIT7;
        Host_Transmit;
        }

        初始化NRF401發(fā)射模塊

        void init_NRF401_TR(void)
        {
        Host_PowerUp; //上電到發(fā)射狀態(tài)避免輻射和干擾
        NRF401_CS;
        delayms(5);
        Host_Transmit; //設(shè)置串口無線模塊為發(fā)射模式
        delayms(1); //延時4毫秒}

        初始化NRF401接收模塊

        void init_NRF401_RE(void)
        {
        Host_PowerUp; //上電到發(fā)射狀態(tài)避免輻射和干擾
        NRF401_CS;
        Host_Receive; //設(shè)置串口無線模塊為發(fā)射模式
        delayms(5); //延時4毫秒}

        發(fā)射模塊發(fā)送數(shù)據(jù)


        __monitor void uart_H2C(unsigned char id,unsigned char cmd) //Host to Host transmit mode{

        unsigned int crc=0;
        unsigned char uart_Host_Tbuf[UART_BUF_SIZE]; //發(fā)送緩沖區(qū)
        pro[0]=id;
        pro[1]=cmd;
        crc=cal_crc(pro,2); //計算校驗碼

        uart_Host_Tbuf[0]=0x11; //先導(dǎo)字段,容易丟失
        uart_Host_Tbuf[1]=0x55; //抗干擾字節(jié)
        uart_Host_Tbuf[2]=0xAA; //幀開始字節(jié)
        uart_Host_Tbuf[3]=id;
        uart_Host_Tbuf[4]=cmd;
        uart_Host_Tbuf[5]=(char)(crc/256); //循環(huán)冗余校驗高8位
        uart_Host_Tbuf[6]=(char)(crc%256); //循環(huán)冗余校驗低8位
        uart_Host_Tbuf[7]=0x77; //結(jié)束標志
        uart_Host_Tnum=8; //發(fā)送幀長度,3個先導(dǎo)字節(jié)+2data+2個校驗字節(jié)+1個結(jié)束字
        Host_Transmit;
        delayms(5);
        uart_Puts(uart_Host_Tbuf,uart_Host_Tnum,1); //發(fā)送數(shù)據(jù)}

        通過實驗,發(fā)現(xiàn)在發(fā)送是延時片刻數(shù)據(jù)接收誤碼率低

        __monitor void uart_Puts(unsigned char *str,unsigned char length,unsigned char uart_id)
        //輸出多數(shù)據(jù)函數(shù)
        {
        while (length!=0)
        {
        if(uart_id==0)
        uart0_putchar(*str++ ); //通過串口發(fā)送數(shù)據(jù)
        else
        {
        uart1_putchar(*str++ ); //通過串口發(fā)送數(shù)據(jù)
        delay(255);
        }
        length--;

        }

        }

        void uart1_putchar(char c) //串口1發(fā)送一個字符{
        TXBUF1 = c;
        while((UTCTL1&0x01)==0);
        }

        接收通過中斷處理:
        #pragma vector = UART0RX_VECTOR //下位機先進行數(shù)據(jù)接收__interrupt void Uart0rx_IRS(void)
        {
        int j=0;
        _DINT();

        if(flag0==0)
        {
        if(RXBUF0==0xFF)
        {
        flag0=1;
        }
        }
        if(flag0==1)
        {
        if(RXBUF0==DeviceID) //設(shè)備碼驗證
        {
        flag1=1;
        uart_Client_RPos=0;
        }

        }

        if(flag0==1&&flag1==1)
        {

        uart_Client_Rbuf[uart_Client_RPos]=RXBUF0;
        uart_Client_Rnum++; //接收數(shù)據(jù)計數(shù)器加1
        uart_Client_RPos++; //移動接收緩沖區(qū)指針
        if(uart_Client_Rbuf[uart_Client_RPos-1]==V) //幀結(jié)束字符
        {
        flag0=0;
        flag1=0; //幀起始標志清除
        for(;j //轉(zhuǎn)移接收到的數(shù)據(jù)
        printf("UART0:%s",Data);


        Clinet_Transmit; //設(shè)置為發(fā)送模式
        delay(3000); //延時3m秒

        }//for
        } //if
        _EINT();

        }//__interrupt


        關(guān)鍵詞: MSP430無線傳輸協(xié)

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 洪泽县| 罗源县| 南宁市| 桑植县| 吴堡县| 年辖:市辖区| 漯河市| 邻水| 洞头县| 昭苏县| 铜山县| 鞍山市| 广水市| 伊通| 赣州市| 简阳市| 改则县| 南涧| 共和县| 曲靖市| 房山区| 墨玉县| 贵南县| 聊城市| 太仓市| 临沧市| 南岸区| 桦甸市| 马公市| 开江县| 柏乡县| 六枝特区| 溧阳市| 浏阳市| 师宗县| 花莲市| 阜宁县| 泰顺县| 大丰市| 正镶白旗| 焦作市|