<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 詳細解讀:MSP430G2553單片機串口通信

詳細解讀:MSP430G2553單片機串口通信

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

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

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

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

  

  

  

  一、UART模式

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

 ?。ㄒ唬︰ART的初始化

  單片機工作的時(shí)鐘源來(lái)自?xún)炔咳齻€(gè)時(shí)鐘或者外部輸入時(shí)鐘,由SSEL1、SSEL0,以決定最終進(jìn)入模塊的時(shí)鐘信號BRCLK的頻率。所以配置串行通訊的第一步就是選擇時(shí)鐘。

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

  數據傳輸的格式,以及數據傳輸的模式是通過(guò)配置控制寄存器UCTL來(lái)進(jìn)行設置。

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

  二、SPI模式

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

  1、SPI模式支持3線(xiàn)和4線(xiàn)模式;

  2、支持主機與從機模式;

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

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

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

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

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

 ?。ㄒ唬㏒PI初始化

  SPI當中不需要波特率調整,所以UxMCTL=0x0000,SPI的初始化及其復位和UART公用一套寄存器。

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

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

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

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

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

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

  三、寄存器及其功能

  

 ?。?)控制寄存器UxCTL

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

  

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

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

  

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

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

  

  

 ?。?)波特率選擇寄存器和調制控制寄存器

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

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

  

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

  

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

  例子:

  #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為T(mén)XD

  P1SEL2 = BIT1 + BIT2; // P1.1為 RXD, P1.2為T(mén)XD

  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設置串口,然后設置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 (?。↖FG2UCA0TXIFG)); // 等待發(fā)送完成

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

  temp=UCA0RXBUF;

  }

  /******************************UART發(fā)送字節函數*************************/

  void UartPutchar(unsigned char c)

  {

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

  UCA0TXBUF=c;

  IFG2 =~UCA0RXIFG;

  }

  /*********************************UART接收字節數據******************/

  unsigned char UartGetchar()

  {

  unsigned char c;

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

  c=UCA0RXBUF;

  IFG2 =~UCA0TXIFG;

  return c;

  }

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



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>