在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > 詳細(xì)解讀:MSP430G2553單片機(jī)串口通信

            詳細(xì)解讀:MSP430G2553單片機(jī)串口通信

            作者: 時(shí)間:2017-10-14 來源:網(wǎng)絡(luò) 收藏

              MSP430的不同型號(hào),其串行通訊工作模式是一樣的。以為例進(jìn)行說明。是20個(gè)引腳的16位單片機(jī)。具有內(nèi)置的16位定時(shí)器、16k的FLASH和512B的RAM,以及一個(gè)通用型模擬比較器以及采用通用串行通信接口的內(nèi)置通信能力。此外還具有一個(gè)10位的模數(shù)(A/D)轉(zhuǎn)換器。這里我們?cè)敿?xì)說明串口通信。其引腳排布如圖1.1所示。其功能表如表1.1所示。

            本文引用地址:http://www.biyoush.com/article/201710/366362.htm

              串行通訊模塊主要由三個(gè)部分組成:波特率生成部分、發(fā)送控制器以及接收控制器。如圖1.2所示。

              

              

              

              一、UART模式

              在異步模式下,接收器自身實(shí)現(xiàn)幀的同步,外部的通訊設(shè)備并不使用這一時(shí)鐘。波特率的產(chǎn)生是在本地完成的。異步幀格式由1個(gè)起始位、7或8個(gè)數(shù)據(jù)位、校驗(yàn)位(奇/偶/無)、1個(gè)地址位、和1或2個(gè)停止位。一般最小幀為9個(gè)位,最大為13位。

             ?。ㄒ唬︰ART的初始化

              單片機(jī)工作的時(shí)鐘源來自內(nèi)部三個(gè)時(shí)鐘或者外部輸入時(shí)鐘,由SSEL1、SSEL0,以決定最終進(jìn)入模塊的時(shí)鐘信號(hào)BRCLK的頻率。所以配置串行通訊的第一步就是選擇時(shí)鐘。

              通過選擇時(shí)鐘源和波特率寄存器的數(shù)據(jù)來確定位周期。所以波特率的配置是串行通訊中最重要的一部分。波特率設(shè)置用三個(gè)寄存器實(shí)現(xiàn):UxBR0(選擇控制器0):波特率發(fā)生器分頻系數(shù)低8位。UxBR1(選擇控制器1):波特率發(fā)生器分頻系數(shù)高8位。UxMCTL

              數(shù)據(jù)傳輸?shù)母袷?,以及?shù)據(jù)傳輸?shù)哪J绞峭ㄟ^配置控制寄存器UCTL來進(jìn)行設(shè)置。

              接收控制部分和發(fā)送控制部分。首先需要串行口進(jìn)行配置、使能以及開啟中斷。串口接收數(shù)據(jù)一般采用中斷方式,發(fā)送數(shù)據(jù)采用主動(dòng)發(fā)送。當(dāng)接收到一個(gè)完整的數(shù)據(jù),產(chǎn)生一個(gè)信號(hào):URXIFG0=1(類似于51單片機(jī)的接收中斷標(biāo)志位),表示接收完整的數(shù)據(jù)。當(dāng)數(shù)據(jù)正在發(fā)送中,UTXIFG0=1,此時(shí)不能再發(fā)送數(shù)據(jù),必須等當(dāng)前數(shù)據(jù)發(fā)送完畢(UTXIFG0=0)才能進(jìn)行發(fā)送。

              二、SPI模式

              USTAR下的SPI模式有如下特點(diǎn):

              1、SPI模式支持3線和4線模式;

              2、支持主機(jī)與從機(jī)模式;

              3、接受和發(fā)送有各自獨(dú)立的發(fā)送移位寄存器和緩沖器;

              4、接受和發(fā)送都有獨(dú)立的中斷能力;

              5、移位時(shí)鐘的極性和相位可編程;

              6、字符長(zhǎng)度可以是7位或者8位。

              SPI工作在全雙工下,即主機(jī)發(fā)送的同時(shí)也接收數(shù)據(jù),傳輸?shù)乃俾视删幊虥Q定。4線SPI模式用附加數(shù)據(jù)線,允許從機(jī)數(shù)據(jù)的發(fā)送和接收。其信號(hào)如下: SIMO:從進(jìn)主出,主機(jī)模式下,數(shù)據(jù)輸出;從機(jī)模式下,數(shù)據(jù)輸入。SOMI:從出主進(jìn),主機(jī)模式下,數(shù)據(jù)輸入,從機(jī)模式下,數(shù)據(jù)輸出。UCLK:USART SPI模式時(shí)鐘,信號(hào)有主機(jī)輸出,從機(jī)輸入。CLK時(shí)鐘只能由主機(jī)提供。STE:從機(jī)模式發(fā)送接收允許控制腳,用于4線模式。

             ?。ㄒ唬㏒PI初始化

              SPI當(dāng)中不需要波特率調(diào)整,所以UxMCTL=0x0000,SPI的初始化及其復(fù)位和UART公用一套寄存器。

              在初始化或者重新配置USART的SPI時(shí),必須按照以下順序進(jìn)行:

              1、UxCTL寄存器的第0位SWRST置位;

              2、在SWRST置位的條件下,初始化所有的SPI寄存器,包括UxCTL寄存器;

              3、通過置位模塊使能寄存器MEx的URXEx和UTXEx位使能SPI的接受和發(fā)送使能模塊;

              4、通過軟件復(fù)位UxCTL寄存器的第0位SWRST;

              5、通過中斷使能寄存器IEx的URXIEx和UTXIEx來使能發(fā)送和接受中斷。

              三、寄存器及其功能

              

              (1)控制寄存器UxCTL

              控制寄存器內(nèi)的信息決定了USART的基本操作。如:選擇通信協(xié)議、通信模式和校驗(yàn)位。在SWRST復(fù)位使USART復(fù)位操作禁止前,各位應(yīng)根據(jù)選擇的模式進(jìn)行編程。

              

             ?。?)發(fā)送控制寄存器UxTCTL(未作說明的位未用)

              寄存器UxTCTL控制與發(fā)送操作相關(guān)的USART硬件。

              

             ?。?)接收控制寄存器URCTL

              URCTL 控制與接收操作相關(guān)的USART硬件并保存由最新寫入U(xiǎn)RXBUF的字符引起的出錯(cuò)狀況和喚醒條件。若FE、PE、OE、BRK、RXERR 或 RXWake 中的任何一位置位,通過接收下一個(gè)字符不能使其復(fù)位。它們的復(fù)位要通過訪問接收緩存URXBUF、USART的軟件復(fù)位SWRST、系統(tǒng)復(fù)位PUC或用指令修改。

              

              

             ?。?)波特率選擇寄存器和調(diào)制控制寄存器

              波特率產(chǎn)生器利用波特率選擇寄存器UxBR1和UxBR0,以及調(diào)整控制寄存器UxMCTL,來產(chǎn)生串行數(shù)據(jù)流的位定時(shí)。UxBR0、UxBR1這兩個(gè)寄存器是用于存放波特率分頻因子的整數(shù)部分,若波特率發(fā)生器的輸入頻率BRCLK不是所需波特率的整數(shù)倍,帶有小數(shù),則整數(shù)部分寫入U(xiǎn)xBR寄存器,小數(shù)部分則由調(diào)整寄存器UxMCT的內(nèi)容反映。波特率由以下公式計(jì)算:

              波特率=BRCLK/(UBR+(M7+M6+ …M0)/8)

              

              接收緩存存放移位寄存器最后接收的字符,可由用戶訪問,讀接收緩存可以復(fù)位接收時(shí)產(chǎn)生的各種錯(cuò)誤標(biāo)志、RXWAKE位和URXIFGx位。如果傳輸7位數(shù)據(jù),接收緩存內(nèi)容右對(duì)齊,最高位為0。當(dāng)收接和控制條件為真時(shí),接收緩存裝入當(dāng)前接收到的字符。

              

              發(fā)送緩存含有當(dāng)前要由發(fā)送器發(fā)送的數(shù)據(jù)。UTXIFG 標(biāo)志表示UTXBUF已準(zhǔn)備好接收下一個(gè)要發(fā)送的字符。將數(shù)據(jù)寫入U(xiǎn)TXBUF初始化發(fā)送功能。如果發(fā)送移位寄存器為空或即將為空,數(shù)據(jù)的發(fā)送立即開始。只有當(dāng)UTXBUF為空時(shí),數(shù)據(jù)才能寫入緩存,否則可能發(fā)送不可預(yù)料的字符。

              例子:

              #include“msp430G2553.h”

              #include “in430.h”

              void UartPutchar(unsigned char c);

              unsigned char UartGetchar();

              unsigned char temp=0;

              unsigned char number[2]={0};

              void main( void )

              {

              WDTCTL = WDTPW + WDTHOLD; // Stop WDT

              BCSCTL1 = CALBC1_1MHZ; // Set DCO

              DCOCTL = CALDCO_1MHZ;

              P1DIR|=BIT6;

              P1OUT=~BIT6;

              P1SEL = BIT1 + BIT2; // P1.1為 RXD, P1.2為TXD

              P1SEL2 = BIT1 + BIT2; // P1.1為 RXD, P1.2為TXD

              UCA0CTL1 |= UCSSEL_2; // 選擇時(shí)鐘BRCLK

              UCA0BR0 = 106; // 1MHz 9600

              UCA0BR1 = 0; // 1MHz 9600

              UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+.。.0)/8)

              UCA0CTL1 = ~UCSWRST;

              // 初始化順序:SWRST=1設(shè)置串口,然后設(shè)置SWRST=0,最后設(shè)置相應(yīng)中斷

              IE2 |= UCA0RXIE; // 使能接收中斷

              while(1)

              {

              //UartPutchar(9);

              // display_int(temp,0);

              __delay_cycles(10000);

              }

              }

              /**********************************UART接收中斷*************************/

              #pragma vector=USCIAB0RX_VECTOR

              __interrupt void USCI0RX_ISR(void)

              {

              //while (?。↖FG2UCA0TXIFG)); // 等待發(fā)送完成

              //UCA0TXBUF = UCA0RXBUF; // TX -》 RXed character

              temp=UCA0RXBUF;

              }

              /******************************UART發(fā)送字節(jié)函數(shù)*************************/

              void UartPutchar(unsigned char c)

              {

              while(?。↖FG2 UCA0TXIFG)); //待發(fā)送為空

              UCA0TXBUF=c;

              IFG2 =~UCA0RXIFG;

              }

              /*********************************UART接收字節(jié)數(shù)據(jù)******************/

              unsigned char UartGetchar()

              {

              unsigned char c;

              while(?。↖FG2 UCA0RXIFG)); //等待接收完成

              c=UCA0RXBUF;

              IFG2 =~UCA0TXIFG;

              return c;

              }

              /******智能控制工作室*******/



            評(píng)論


            相關(guān)推薦

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

            關(guān)閉