给你写的launchpad430--UART

来源:互联网 发布:php 商城分销系统源码 编辑:程序博客网 时间:2024/05/08 19:28

技术说明


因此我们在设计电路的时候,只需要连接这两个引脚到MAX3232电平转换芯片上就可以进行通信。
在通信之前我们应做一些设置,例如管脚、时钟等。


波特率设置技巧
查看datasheet:可以在chapter15找到下表

                                                                         图1

例如:我们设置SMCLK、MCLK = 1MHz,UARTA输入时钟为SMCLK,波特率 = 115200,开启读中断。

管脚设置

查看数据手册,连接UARTA的管脚是P1.1,P1.2
  P1SEL  = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD  P1SEL2 = BIT1 + BIT2;

时钟及波特率设置

查看数据手册,找到设置波特率的表格,如上图1所示:
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK  UCA0BR0 = 8;                              // 1MHz 115200  UCA0BR1 = 0;                              // 1MHz 115200  UCA0MCTL = UCBRS2 + UCBRS1;               // Modulation UCBRSx = 6

初始化及中断设置

  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

完整例程

#include <msp430.h>int main(void){  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT  if (CALBC1_1MHZ==0xFF)                    // If calibration constant erased  {    while(1);                               // do not load, trap CPU!!  }  DCOCTL = 0;                               // Select lowest DCOx and MODx settings  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO  DCOCTL  = CALDCO_1MHZ;    // 以上是前一篇所介绍  P1SEL  = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD  P1SEL2 = BIT1 + BIT2;    UCA0CTL1 |= UCSSEL_2;                     // SMCLK  UCA0BR0 = 8;                              // 1MHz 115200  UCA0BR1 = 0;                              // 1MHz 115200  UCA0MCTL = UCBRS2 + UCBRS1;               // Modulation UCBRSx = 6    UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled}// Echo back RXed character, confirm TX buffer is ready first#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character}

函数扩展

编写个发送字符的函数
void SendChar(unsigned char c_data){  UCA0TXBUF = c_data;  while(!(IFG2&UCA0TXIFG));}