新聞中心

        MSP430串口收發(fā)程序

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

        程序功能:接收PC機(jī)十六進(jìn)制數(shù)據(jù)后回傳至PC機(jī)

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

        數(shù)據(jù)格式:十六進(jìn)制

        幀頭:FD

        幀尾: FE

        *******************************************************/

        #include <msp430x14x.h>

        unsigned char RecBuf[255]; //接收數(shù)據(jù)緩存

        unsigned char *SDat; //指向要發(fā)送的數(shù)據(jù)

        unsigned char Rindex; //接收數(shù)據(jù)計(jì)數(shù)

        unsigned char Tindex; //發(fā)送數(shù)據(jù)計(jì)數(shù)

        unsigned char SendLen; //發(fā)送數(shù)據(jù)長度

        /*************************************************

        函數(shù)名稱:ConfigUart0

        功 能:配置UART0,使用SMCLK,N.8.1, 9600

        無校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位,波特率9600

        參 數(shù):無

        返回值 :無

        **************************************************/

        void ConfigUart0()

        {

        P3SEL |= 0x30; // 選擇P3.4和P3.5做UART通信端口

        ME1 |= UTXE0 + URXE0; // 使能USART0的發(fā)送和接受

        UCTL0 |= CHAR; // 選擇8位字符

        UTCTL0 |= SSEL1; // UCLK = SMCLK

        UBR00 = 0xD0; // 波特率9600

        UBR10 = 0x00; //

        UMCTL0 = 0x40; // Modulation

        UCTL0 &= ~SWRST; // 初始化UART狀態(tài)機(jī)

        IE1 |= URXIE0 + UTXIE0; // 使能USART0的收發(fā)中斷

        }

        /********************主函數(shù)********************/

        void main(void)

        {

        unsigned int i;

        WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗

        BCSCTL1 &= ~XT2OFF; //使TX2有效,TX2上電默認(rèn)是關(guān)閉的

        do

        {

        IFG1 &= ~OFIFG; //清除振蕩器失效標(biāo)志

        for(i=0xff;i>0;i--); //延時(shí),待穩(wěn)定

        }

        while((IFG1 & OFIFG)!=0); //若振蕩器失效標(biāo)志有效

        BCSCTL2 |= SELM1; //使MCLK=XT2

        BCSCTL2 |= SELS+DIVS1; //SMCLK=XT2,4分頻,即2MHZ

        BoardConfig(0xb8); // 關(guān)閉數(shù)碼管、流水燈和電平轉(zhuǎn)換

        ConfigUart0(); //配置UART0

        _EINT(); //打開全局中斷

        while(1)

        {

        LPM1;

        }

        }

        /*******************************************

        函數(shù)名稱:UART0_RXISR

        功 能:UART0的接收中斷服務(wù)函數(shù),在這里喚醒

        CPU,使它退出低功耗模式

        參 數(shù):無

        返回值 :無

        ********************************************/

        #pragma vector = UART0RX_VECTOR

        __interrupt void UART0_RXISR(void)

        {

        RecBuf[Rindex++] = RXBUF0;

        if(RecBuf[Rindex-1]==0xfe) //接收完畢

        {

        SendLen = Rindex;

        Rindex=0;

        if(RecBuf[0]==0xfd) //幀頭正確

        {

        LPM1_EXIT;

        SDat = RecBuf;

        IFG1 |= UTXIFG0; // 設(shè)置中斷標(biāo)志,進(jìn)入發(fā)送中斷程序

        }

        }

        }

        /*******************************************

        函數(shù)名稱:UART0_TXISR

        功 能:UART0的發(fā)送中斷服務(wù)函數(shù)

        參 數(shù):無

        返回值 :無

        ********************************************/

        #pragma vector = UART0TX_VECTOR

        __interrupt void UART0_TXISR(void)

        {

        if(Tindex < SendLen)

        {

        TXBUF0 = *(SDat+Tindex);

        Tindex++;

        }

        else

        {

        Tindex=0;

        //LPM1;

        }

        }

        使用于MSP430F149



        關(guān)鍵詞: MSP430串口收

        評論


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

        關(guān)閉
        主站蜘蛛池模板: 阜阳市| 凤庆县| 张北县| 通化县| 科技| 恩施市| 昆山市| 明光市| 城口县| 墨竹工卡县| 鲁甸县| 砚山县| 宣汉县| 福泉市| 沙坪坝区| 瑞丽市| 凯里市| 临湘市| 微山县| 建平县| 巨鹿县| 航空| 元阳县| 新野县| 河北省| 万源市| 塔河县| 萨迦县| 枣庄市| 错那县| 仙居县| 洛扎县| 香港 | 札达县| 扎兰屯市| 图片| 安溪县| 三门峡市| 自治县| 聂荣县| 靖边县|