新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430的485通信程序(接收字符串指令)

        MSP430的485通信程序(接收字符串指令)

        作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
        /**************************************************************

        程序功能:通過RS485端口一次一次地收發(fā)數(shù)據(jù)
        ---------------------------------------------------------------
        測試說明:用示波器觀察RS485端口A、B信號線

        本文引用地址:http://www.104case.com/article/201611/316427.htm

        上的波形或者用RS485接收器接收發(fā)回
        的字符,在串口助手上顯示。
        ***************************************************************/
        #include <msp430x14x.h>

        #define DRE_out P3DIR |= BIT3 //連接485芯片的DE,RE端口的IO設(shè)置為輸出狀態(tài)
        #define DE P3OUT |= BIT3 //設(shè)置485芯片處于發(fā)送狀態(tài)
        #define RE P3OUT &= ~BIT3 //設(shè)置485芯片處于接收狀態(tài)
        typedef unsigned char uchar;

        unsigned char string[8] ;
        uchar RX_flag;

        void Set_UART1(void);
        void PutString0(uchar *ptr);
        void Send1Char(uchar sendchar);
        void PutString(uchar *ptr);


        /****************主函數(shù)****************/
        void main(void)
        {
        unsigned int i;

        WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
        P6DIR |= BIT2;P6OUT |= BIT2; //關(guān)閉電平轉(zhuǎn)換
        DRE_out;
        RE;
        Set_UART1();
        _EINT();

        while (1)
        {
        while( IFG2 & URXIFG1 ); //等待收到test命令字符
        if(RX_flag==1)
        {
        RX_flag=0;
        if(string[1]==a)
        {
        DE;
        for(i=0;i<3200;i++);
        PutString0("a11.5522.33e ");
        Send1Char(n);
        for(i=0;i<3200;i++);
        RE;
        //LPM3;
        }
        }

        }

        }
        /*******************************************
        函數(shù)名稱:Set_UART1
        功 能:設(shè)置MCU的UART1對應(yīng)的寄存器
        參 數(shù):無
        返回值 :無
        ********************************************/
        void Set_UART1(void)
        {
        P3SEL |= 0xC0; //將P3.6,P3.7選做UART1的通信端口
        ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
        UCTL1 |= CHAR; //選擇8-bit字符
        UTCTL1 |= SSEL0; //驅(qū)動時鐘選擇ACLK
        UBR01 = 0x03; //波特率9600
        UBR11 = 0x00;
        UMCTL1 = 0x4a; //調(diào)整
        UCTL1 &= ~SWRST; //初始化UART狀態(tài)機
        IE2 |= URXIE1 ; // 中斷允許寄存器設(shè)置,接收中斷允許
        }


        //串口接收中斷,接收字符串指令.
        #pragma vector=USART1RX_VECTOR
        __interrupt void usart1_rx (void)
        {
        static uchar rxcount = 0;
        // LPM3_EXIT;
        if(RXBUF1 == e)
        {
        RX_flag =1;
        rxcount = 0;
        }
        else
        {
        string[rxcount++] = RXBUF1;
        }
        }

        /*******************************************
        函數(shù)名稱:Send1Char
        功 能:向PC機發(fā)送一個字符
        參 數(shù):sendchar--要發(fā)送的字符
        返回值 :無
        ********************************************/
        void Send1Char(uchar sendchar)
        {
        while (!(IFG2 & UTXIFG1)); //等待發(fā)送寄存器為空
        TXBUF1 = sendchar;

        }
        /*******************************************
        函數(shù)名稱:PutSting
        功 能:向PC機發(fā)送字符串并換行指令
        參 數(shù):ptr--指向發(fā)送字符串的指針
        返回值 :無
        ********************************************/
        void PutString(uchar *ptr)
        {
        while(*ptr !=

        主站蜘蛛池模板: 鹰潭市| 卓资县| 遂昌县| 长岛县| 根河市| 神池县| 永定县| 前郭尔| 永泰县| 新安县| 泰安市| 恩施市| 宾阳县| 广西| 板桥市| 武强县| 五台县| 澎湖县| 施甸县| 枣阳市| 凤城市| 丰原市| 荆门市| 鸡西市| 中宁县| 重庆市| 绥滨县| 大理市| 逊克县| 赤壁市| 海城市| 阳信县| 贡觉县| 阿尔山市| 潮州市| 华亭县| 崇礼县| 桦南县| 靖宇县| 扎赉特旗| 阿尔山市|