<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        MSP430單片機串口通信詳解

        作者:未知   來源:不詳   點擊數:  更新時間:2014年08月31日   【字體:
        #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;                     // 選擇時鐘BRCLK
          UCA0BR0 = 106;                            // 1MHz 9600
          UCA0BR1 = 0;                              // 1MHz 9600
          UCA0MCTL = UCBRS2 + UCBRS0;               // 波特率=BRCLK/(UBR+(M7+...0)/8)
          UCA0CTL1 &= ~UCSWRST;  
          // 初始化順序:SWRST=1設置串口,然后設置SWRST=0,最后設置相應中斷
          IE2 |= UCA0RXIE;                          // 使能接收中斷
         while(1)
          { 
           //UartPutchar(9);
           // display_int(temp,0);
            __delay_cycles(10000);
          }
        }
        /**********************************UART接收中斷*************************/
        #pragma vector=USCIAB0RX_VECTOR
        __interrupt void USCI0RX_ISR(void)
        {
          //while (!(IFG2&UCA0TXIFG));                // 等待發送完成
          //UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
          temp=UCA0RXBUF;
        }
         
        /******************************UART發送字節函數*************************/
        void UartPutchar(unsigned char c)
        {
         while(!(IFG2 & UCA0TXIFG));  //待發送為空
         UCA0TXBUF=c;
         IFG2 &=~UCA0RXIFG;
        }
        /*********************************UART接收字節數據******************/
        unsigned char UartGetchar()
        {
          unsigned char c;
          while(!(IFG2 & UCA0RXIFG)); //等待接收完成
          c=UCA0RXBUF;
          IFG2 &=~UCA0TXIFG;
          return c;
        }
        /******智能控制工作室*******/
           MSP430g2553串口通信
        MSP430的不同型號,其串行通訊工作模式是一樣的。以MSP430G2553為例進行說明。MSP430G2553是20個引腳的16位單片機。具有內置的16位定時器、16k的FLASH和512B的RAM,以及一個通用型模擬比較器以及采用通用串行通信接口的內置通信能力。此外還具有一個10位的模數(A/D)轉換器。其引腳排布如圖1.1所示。其功能表如表1.1所示。
        串行通訊模塊主要由三個部分組成:波特率生成部分、發送控制器以及接收控制器。如圖1.2所示。
        一、UART模式
        在異步模式下,接收器自身實現幀的同步,外部的通訊設備并不使用這一時鐘。波特率的產生是在本地完成的。異步幀格式由1個起始位、7或8個數據位、校驗位(奇/偶/無)、1個地址位、和1或2個停止位。一般最小幀為9個位,最大為13位。
        (一)UART的初始化
        單片機工作的時鐘源來自內部三個時鐘或者外部輸入時鐘,由SSEL1、SSEL0,以決定最終進入模塊的時鐘信號BRCLK的頻率。所以配置串行通訊的第一步就是選擇時鐘。
        通過選擇時鐘源和波特率寄存器的數據來確定位周期。所以波特率的配置是串行通訊中最重要的一部分。波特率設置用三個寄存器實現:UxBR0(選擇控制器0):波特率發生器分頻系數低8位。UxBR1(選擇控制器1):波特率發生器分頻系數高8位。UxMCTL
        數據傳輸的格式,以及數據傳輸的模式是通過配置控制寄存器UCTL來進行設置。
        接收控制部分和發送控制部分。首先需要串行口進行配置、使能以及開啟中斷。串口接收數據一般采用中斷方式,發送數據采用主動發送。當接收到一個完整的數據,產生一個信號URXIFG0=1(類似于51單片機的接收中斷標志位),表示接收完整的數據。當數據正在發送中,UTXIFG0=1,此時不能再發送數據,必須等當前數據發送完畢(UTXIFG0=0才能進行發送。
        二、SPI模式
           USTAR下的SPI模式有如下特點
        1、SPI模式支持3線和4線模式;
        2、支持主機與從機模式;
        3、接受和發送有各自獨立的發送移位寄存器和緩沖器;
        4、接受和發送都有獨立的中斷能力;
         5、移位時鐘的極性和相位可編程;
        6、字符長度可以是7位或者8位。
        SPI工作在全雙工下,即主機發送的同時也接收數據,傳輸的速率由編程決定。4SPI模式用附加數據線,允許從機數據的發送和接收。其信號如下: SIMO:從進主出,主機模式下,數據輸出;從機模式下,數據輸入。SOMI:從出主進,主機模式下,數據輸入,從機模式下,數據輸出。UCLKUSART SPI模式時鐘,信號有主機輸出,從機輸入。CLK時鐘只能由主機提供。STE:從機模式發送接收允許控制腳,用于4線模式。
        (一)SPI初始化
        SPI當中不需要波特率調整,所以UxMCTL=0x0000,SPI的初始化及其復位和UART公用一套寄存器。
        在初始化或者重新配置USART的SPI時,必須按照以下順序進行:
        1、UxCTL寄存器的第0位SWRST置位;
        2、在SWRST置位的條件下,初始化所有的SPI寄存器,包括UxCTL寄存器;
        3、通過置位模塊使能寄存器MEx的URXEx和UTXEx位使能SPI的接受和發送使能模塊;
        4、通過軟件復位UxCTL寄存器的第0位SWRST;
        5、通過中斷使能寄存器IEx的URXIEx和UTXIEx來使能發送和接受中斷。
        }
        三、寄存器及其功能
        通信模塊寄存器如下:
        3.1  USART0的寄存器
        寄存器
        縮寫
        讀寫類型
        地址
        初始狀態
        控制寄存器
        U0CTL
        讀/寫
        070H
        PUC后001H
        發送控制寄存器
        U0TCTL
        讀/寫
        71H
        PUC后001H
        接收控制寄存器
        U0RCTL
        讀/寫
        72H
        PUC后000H
        波特率調整控制寄存器
        U0MCTL
        讀/寫
        73H
        不變
        波特率控制寄存器0
        U0BR0
        讀/寫
        74H
        不變
        波特率控制寄存器1
        U0BR1
        讀/寫
        75H
        不變
        接收緩沖器
        U0RXBUF
        76H
        不變
        發送緩沖器
        U0TXBUF
        讀/寫
        77H
        不變
        SFR 模塊使能寄存器1
        ME1
        讀/寫
        004H
        PUC后000H
        SFR 模塊使能寄存器1
        IE1
        讀/寫
        000H
        PUC后000H
        SFR 模塊使能寄存器1
        IFG1
        讀/寫
        002H
        PUC后082H
        1)控制寄存器UxCTL
        控制寄存器內的信息決定了USART的基本操作。如:選擇通信協議、通信模式和校驗位。在SWRST復位使USART復位操作禁止前,各位應根據選擇的模式進行編程。
        表3.2  發送控制寄存器UxCTL
        含義
        使用
        7(PENA)
        校驗允許位
        0:校驗禁止
        1:校驗允許
        6(PEV)
        奇偶校驗位
        0:奇校驗
        1:偶校驗
        5(SP)
        停止位選擇
        0:1位停止位
        1:2位停止位
        4(CHAR)
        字符長度
        0:7位
        1:8位
        3(LISTEN)
        反饋選擇
        (選擇是否發送數據由內部反饋給接收器)
        0:無反饋
        1:有反饋
        2(SYNC)
        USART模塊的模式選擇
        0:UART模式(異步)
        1:SPI模式(同步)
        1(MM)
        多機模式選擇位
        0:線路空閑多機協議
        1:地址位多機協議
        0(SWRST)
        控制位(上電置位)
        0:USART禁止
        1:USART允許
        (2)發送控制寄存器UxTCTL(未作說明的位未用)
        寄存器UxTCTL控制與發送操作相關的USART硬件。
        表3.3  發送控制寄存器UxTCTL
        含義
        使用
        7(CKPH)
        時鐘相位控制位
        0:正常UCLK時鐘
        1:UCLK時鐘延遲半個周期
        6(CKPL)
        時鐘極性控制位
        0:UCLKI信號與UCLK信號極性相同
        1:UCLKI信號與UCLK信號極性相反
        5(SSEL1)
        時鐘源選擇
        (確定波特率發生器的時鐘源)
        00:外部時鐘UCLKI
        01:輔助時鐘ACLK
        10:系統時鐘MCLK
        11:子系統時鐘SMCLK
        4(SSEL0)
        1(STC)
        發送控制位
        0:SPI為4線模式
        1:SPI為3線模式
        0(TXEPT)
        發送器空標志,在異步模式與同步模式時是不一樣的
        0:正在傳輸數據或者發送緩沖器(UTXBUF)有數據
        1:表示發送移位寄存器和UTXBUF空或者SWRST=1
        (3)接收控制寄存器URCTL
        URCTL 控制與接收操作相關的USART硬件并保存由最新寫入URXBUF的字符引起的出錯狀況和喚醒條件。若FE、PE、OE、BRK、RXERR 或 RXWake 的任何一位置位,通過接收下一個字符不能使其復位。它們的復位要通過訪問接收緩存URXBUF、USART的軟件復位SWRST、系統復位PUC或用指令修改。
        表3.4  接收控制寄存器URCTL
        含義
        使用
        7(FE)
        幀錯誤標志位
        0:無幀錯誤
        1:有幀錯誤
        6(PE)
        校驗錯誤標志位
        0:校驗正確
        1:校驗錯誤
        5(OE)
        溢出標志位
        0:無溢出
        1:有溢出
        4(BRK)
        打斷檢測位
        0:未打斷
        1:打斷
        3(URXEIE)
        接收出錯中斷允許位
        0:禁止中斷,不接收出錯字符,不改變URXIFG標志
        1:允許中斷,接收出錯字符,置位URXIFG標志
        2(URXWIE)
        接收喚醒中斷允許位
        0:接收的所有字符都能夠置位URXIFG
        1:只有接收到地址字符才置位URXIFG
        1(RXWake)
        接收喚醒檢測位
        0:未被喚醒,接收到的字符是數據
        1:喚醒,接收的字符是地址
        0(RXERR)
        接收錯誤標志位
        0:未接收到錯誤
        1:接收到錯誤
        在各種條件下URXEIE和URXWIE對URXIFG的影響:
        URXEIE
        URXWIE
        字符出錯
        地址字符
        接收字符后的標志位URXIFG
        0
        X
        1
        X
        不變
        0
        0
        0
        X
        置位
        0
        1
        0
        0
        不變
        0
        1
        0
        1
        置位
        1
        0
        X
        X
        置位( 接收所 有字符)
        1
        1
        X
        0
        不變
        1
        1
        X
        1
        置位
        (4)波特率選擇寄存器和調制控制寄存器
        波特率產生器利用波特率選擇寄存器UxBR1和UxBR0,以及調整控制寄存器UxMCTL,來產生串行數據流的位定時。UxBR0、UxBR1這兩個寄存器是用于存放波特率分頻因子的整數部分,若波特率發生器的輸入頻率BRCLK不是所需波特率的整數倍,帶有小數,則整數部分寫入UxBR寄存器,小數部分則由調整寄存器UxMCT的內容反映。波特率由以下公式計算:
        波特率=BRCLK/(UBR+(M7+M6+ …M0)/8)
        寄存器各位如下:
         位
        寄存器
        7
        6
        5
        4
        3
        2
        1
        0
        UxBR0
        UxBR1
        UxMCT
        M7
        M6
        M5
        M4
        M3
        M2
        M1
        M0
        (5)接收數據緩存URXBUF
        7
        6
        5
        4
        3
        2
        1
        0
         
        接收緩存存放移位寄存器最后接收的字符,可由用戶訪問,讀接收緩存可以復位接收時產生的各種錯誤標志、RXWAKE位和URXIFGx位。如果傳輸7位數據,接收緩存內容右對齊,最高位為0。當收接和控制條件為真時,接收緩存裝入當前接收到的字符。
        條件
        結果
        URXEIE
        URXWIE
        裝入URXBUF
        PE
        FE
        BRK
        0
        1
        無差錯地址字符
        0
        0
        0
        1
        1
        所有地址字符
        X
        X
        X
        0
        0
        無差錯字符
        0
        0
        0
        1
        0
        所有字符
        X
        X
        X
        (6)發送數據緩存UTXBUF
        7
        6
        5
        4
        3
        2
        1
        0
         
        發送緩存含有當前要由發送器發送的數據。UTXIFG 標志表示UTXBUF已準備好接收下一個要發送的字符。將數據寫入UTXBUF初始化發送功能。如果發送移位寄存器為空或即將為空,數據的發送立即開始。只有當UTXBUF為空時,數據才能寫入緩存,否則可能發送不可預料的字符。
         
        表1.1  MSP430G2553引腳功能表
        引腳號
        引腳名
        引腳功能描述
        1
        DVCC
        接電源
        2
        DVSS
        接地
        3
        P1.0
        通用I/O口、ADC10模擬輸入A0(1) 、Comparator_A+,CA0輸入、TIMER _A時鐘信號TACLK輸入、ACLK信號輸出
        4
        P1.1/RXD
        通用I/O 口、Timer0_A,捕捉:CCI0A輸入,比較:Out0輸出/ BSL發送、UART模式中USCI_A0接收數據輸入、SPI模式中USCI_A0受控器數據輸出/主控器輸入、ADC10模擬輸入A1 、Comparator_A+,CA1輸入
        5
        P1.2/TXD
        通用I/O 口、Timer0_A,捕獲:CCI1A輸入,比較:Out1輸出、UART模式中USCI_A0發送數據輸出、SPI 模式中USCI_A0受控器數據輸入/主控器輸出、ADC10模擬輸入A2、Comparator_A+,CA2輸入
        6
        P1.3
        通用I/O 口、ADC10,轉換時鐘輸出(1)、ADC10模擬輸入A3、ADC10負基準電壓、Comparator_A+,CA3輸入、Comparator_A+,輸出
        7
        P1.5
        通用I/O 口、Timer0_A,比較:Out0輸出/ BSL接收、USCI_B0時鐘輸入/輸出、USCI_A0受控器發送使能、ADC10模擬輸入A5、Comparator_A+,CA5輸入、JTAG測試模式選擇輸入終端
        8
        P2.0
        通用I/O 口、Timer1_A,捕獲:CCI0A輸入,比較:Out0輸出
        9
        P2.1
        通用I/O 口、Timer1_A,捕獲:CCI1A輸入,比較:Out1輸出
        10
        P2.2
        通用I/O 口、Timer1_A,捕獲:CCI1B輸入,比較:Out1輸出
        11
        P2.3
        通用I/O 口、Timer1_A,捕獲:CCI0B輸入,比較:Out0輸出
        12
        P2.4
        通用I/O 口、Timer1_A,捕獲:CCI2A輸入,比較:Out2輸出
        13
        P2.5
        通用I/O 口、Timer1_A,捕獲:CCI2B輸入,比較:Out2輸出
        14
        P1.6
        通用I/O 口、Timer0_A,比較:Out1輸出、、ADC10模擬輸入A6、Comparator_A+,CA6輸入、SPI模式中USCI_B0受控器輸出/主控器輸入、I2C 模式中的USCI_B0SCLI2C 時鐘、JTAG測試數據輸入或測試時鐘輸入
        15
        P1.7
        通用I/O 口、ADC10模擬輸入A7、Comparator_A+,CA7輸入、Comparator_A+,輸出、SPI模式中的USCI_B0受控器輸入/主控器輸出、I2C 模式中的USCI_B0SDAI2C 數據輸入、JTAG測試數據輸出終端或測試數據輸入
        16
        RST
        復位、不可屏蔽中斷輸入、編程及測試期間的兩線制(Spy-Bi-Wire) 測試數據輸入/輸出
        17
        TEST
        為端口1上JTAG引腳選擇測試模式、器件保護熔絲連接至TEST、編程及測試期間的Spy-Bi-Wire測試時鐘輸入
        18
        P2.6/XOUT
        晶體振蕩器的輸出終端、通用I/O 口
        19
        P2.7/XIN
        晶體振蕩器的輸入終端、通用I/O 口、Timer0_A,比較:Out1輸出
        20
        DVSS
        接地
         
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮