在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > msp430串口數(shù)據(jù)收發(fā)的討論

            msp430串口數(shù)據(jù)收發(fā)的討論

            作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
            在做串口通信看<MSP430系列16位超低功耗單片機(jī)原理與應(yīng)用> 沈建華編著 一書中感到書中有些控制字沒(méi)有列出,編寫程序時(shí)容易忘記寫.出現(xiàn)不必要的錯(cuò)誤. ME2 IE2 IFG2 (或ME1 IE1 IFG1)下面的本程序用的是USART1.要從.H的頭文件里找上面三個(gè)特殊功能寄存器的用法.

            #define IE2_ (0x0001) /* Interrupt Enable 2 */

            本文引用地址:http://www.biyoush.com/article/201611/316415.htm

            DEFC( IE2 , IE2_)

            #define U1IE IE2 /* UART1 Interrupt Enable Register */

            #define URXIE1 (0x10)

            #define UTXIE1 (0x20)

            #define IFG2_ (0x0003) /* Interrupt Flag 2 */

            DEFC( IFG2 , IFG2_)

            #define U1IFG IFG2 /* UART1 Interrupt Flag Register */

            #define URXIFG1 (0x10)

            #define UTXIFG1 (0x20)

            #define ME2_ (0x0005) /* Module Enable 2 */

            DEFC( ME2 , ME2_)

            #define U1ME ME2 /* UART1 Module Enable Register */

            #define URXE1 (0x10)

            #define UTXE1 (0x20)

            #define USPIE1 (0x10)

            430的波特率的使用很有特點(diǎn).: 時(shí)鐘源可通過(guò)UTCTL<0 1>中的SSEL1 SSEL0 選擇外部時(shí)鐘 UCLK1 ACLK SMCLK SMCLK 對(duì)于波特率的計(jì)算: 比如時(shí)鐘750KHz,波特率115200,750000/115200=6.51 小數(shù)0.51*8=4.08 那么UxMCTL就可以為0xAA或者0x55(4個(gè)1均勻分布)關(guān)波特率=BRCLK/(UBR+(M7+M6+M5+M4+M3+M2+M1+M0)/8) 是反過(guò)來(lái)的運(yùn)算. 本程序中用ACLK :32768HZ 32768/9600=3.4133... 那么UBR就是3 再用 0.4133*8=3.3064 取整數(shù) 3 在波特率調(diào)整控制器中UMCTL中的M7~M0 任意修改3個(gè)位并且不能緊靠在一起.同時(shí)UMCTL的值要求不能少于0x03

            #include "msp430x16x.h"

            void Delay(unsigned char m);

            void ComInit(void);

            unsigned char Usart_Tx_Data[30]={"You are the best ! cheer on! "};

            void InitSystemClock(void) // 初始化系統(tǒng)時(shí)鐘

            {

            unsigned char i;

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

            BCSCTL1=0x00; //Set 430 clk 開啟XT2,DOC的標(biāo)稱頻率為最低 且不分頻;XT1為低速晶體(32.768K)

            BCSCTL2=SELM_2+SELS; //選擇MCLK SCLK的時(shí)鐘源為高速時(shí)鐘 不分頻,均為8M

            do

            {

            IFG1&=~OFIFG;

            for(i=0xff;i>0;i--);

            }

            while ((IFG1&OFIFG)!=0);

            //P5DIR=0XFF;

            //P5OUT|=BIT7;

            //P5IN=0X80;

            //P5SEL|=BIT4+BIT5+BIT6;//將MCLK SCLK ACLK分別輸出至P5.4 5 6口

            }

            void main(void)

            {

            int i;

            InitSystemClock(); // 初始化系統(tǒng)時(shí)鐘

            ComInit();

            //InitLCD();

            //P1DIR=0x00;

            //P1IE=0xff;

            _EINT();

            while(1)

            {

            Delay(100);

            }

            /*

            while(1)

            {

            for(i=0;i<30;i++)

            {

            TXBUF1=Usart_Tx_Data[i];

            while((UTCTL1&0X01)==0);

            Delay(100);

            }

            } */

            }

            void Delay(unsigned char m)

            {

            unsigned char i;

            while(m--)

            {

            for(i=0;i<0xff;i++);

            }

            }

            void ComInit(void) //串口初始化

            {

            UCTL1|=SWRST;

            UCTL1 = CHAR; // 8-bit 字符 無(wú)校驗(yàn) 1位停止位 UART模式 無(wú)反饋 線路空閑多機(jī)模式

            /*******************波特率為1200*******************/

            /* UTCTL1=SSEL0; //選擇ACLK為波特率發(fā)生器時(shí)鐘源(32.768K), UCLKI與UCLK極性相同

            UBR01 = 0x1B; // 波特率設(shè)置寄存器 波特率為1200

            UBR11 = 0x00; // // 波特率設(shè)置寄存器

            UMCTL1 = 0x11; //波特率 調(diào)整寄存器

            */

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

            /*******************波特率為2400*******************/

            /* UTCTL1=SSEL0; //選擇ACLK為波特率發(fā)生器時(shí)鐘源(32.768K), UCLKI與UCLK極性相同

            UBR01 = 0x0D; // 波特率設(shè)置寄存器 波特率為2400

            UBR11 = 0x00; // // 波特率設(shè)置寄存器

            UMCTL1 = 0x6D; //波特率 調(diào)整寄存器

            */

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

            /*******************波特率為9600*******************/

            UTCTL1=SSEL0; //選擇ACLK為波特率發(fā)生器時(shí)鐘源(32.768K), UCLKI與UCLK極性相同

            UBR01 = 0x03; // 波特率設(shè)置寄存器

            UBR11 = 0x00; // // 波特率設(shè)置寄存器

            UMCTL1 = 0x4A; //波特率 調(diào)整寄存器

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

            /*******************波特率為19200*******************

            UTCTL1=SSEL0+SSEL1; //選擇SMCLK為波特率發(fā)生器時(shí)鐘源(8M), UCLKI與UCLK極性相同

            UBR01 = 0xA0; // 波特率設(shè)置寄存器 8M 下波特率為19200

            UBR11 = 0x01; // // 波特率設(shè)置寄存器

            UMCTL1 = 0x6d; //波特率 調(diào)整寄存器

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

            /*******************波特率為115200*******************

            UTCTL1=SSEL0+SSEL1; //選擇SMCLK為波特率發(fā)生器時(shí)鐘源(8M), UCLKI與UCLK極性相同

            UBR01 = 0x45; // 波特率設(shè)置寄存器 SMCLK為8M下波特率為115200

            UBR11 = 0x00; // // 波特率設(shè)置寄存器

            UMCTL1 = 0x55; //波特率 調(diào)整寄存器

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

            ME2|= UTXE1 + URXE1; // 使能 USART1 TXD/RXD

            IE2|= URXIE1+UTXIE1; // 使能 USART1 接收和發(fā)送 中斷

            UCTL1&=~SWRST;

            P3SEL |= BIT6+BIT7; // P3.6,7 = USART1 TXD/RXD 選擇第二功能

            }

            #pragma vector=UART1RX_VECTOR

            __interrupt void OnRecieve(void) //將接收到的字符顯示到串口輸出

            {

            while((IFG2&URXIFG1)==0); //選擇的是USART1

            TXBUF1=RXBUF1;

            while((UTCTL1&0X01)==0);

            Delay(1);

            }

            //本程序包括自動(dòng)發(fā)送數(shù)組里的數(shù)據(jù)或?qū)⒔邮盏降臄?shù)據(jù)再?gòu)男掳l(fā)回.多添加一條語(yǔ)句實(shí)現(xiàn)功能.

            while((UTCTL1&0X01)==0); 將接收到的數(shù)據(jù)發(fā)送完才能退出中斷. 少這一句 在串口調(diào)試助手中能看到TX加1 RX也加1 接收數(shù)據(jù)區(qū)卻沒(méi)有顯示. 原因就是數(shù)據(jù)沒(méi)有發(fā)送完就退出了中斷.

            //此程序只要修改頭文件就可運(yùn)行. 其實(shí)還有很多的更為復(fù)雜的應(yīng)用.歡迎交流! ^_^

            其實(shí)在任何一種單片機(jī)先看懂官方或者網(wǎng)上的一些程序,再在這些程序基礎(chǔ)上添加自己想要實(shí)現(xiàn)的功能,這是實(shí)現(xiàn)編程的最好也是最快方式,但是,不要認(rèn)為這就可以了,不但要看懂理寫程序人的意思,將程序變成適應(yīng)自己修改的程序,并完全正確.要一個(gè)學(xué)習(xí)的過(guò)程和時(shí)間.



            評(píng)論


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

            關(guān)閉