TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430x43x的串口通信例程

#include "msp430x43x.h"

void init_uart(void);

void uart_start(void);

void uart_send(void);

void uart_receive(void);

 

unsigned char RXDATA_BUF[10];

const unsigned char TXDATA_BUF[10]={0xbd,0x77,0x3d,0xc5,0xc6,0xf5,0x68,0x0d,0x6b,0xff};

unsigned int RX_count=0,TX_count=0,TXBUF_num=10,RXBUT_num=10,FLAG;

 

void main(void)

{   

    init_uart();

    uart_start();

    while(1)

    {

      _BIS_SR(CPUOFF);

      _NOP();

    }

}

 

 

void init_uart(void)                    //初始化UART

{   

    unsigned int i;

    WDTCTL=WDTPW+WDTHOLD;  

    FLL_CTL1|=XT2OFF+SELM_XT2+SELS;        

    do                                  //等待时钟稳定

    {   

        IFG1&=~OFIFG;                   //清除OSCFault

        for(i=0;i<0xff;i++);            //延时

    }

    while((FLL_CTL0&XT2OF)==XT2OF);

    UCTL0|=SWRST;                       //控制寄存器位

    UCTL0|=CHAR;

    UTCTL0=SSEL0+SSEL1;                 //选择发送时钟源复位

    UBR00=0XA0;                         //波特率9600

    UBR10=0X01;

    UMCTL0=0X5E;

    UCTL0&=~SWRST;                      //选择发送时钟源置位

    ME1|=URXE0+UTXE0;                   //使能TXD  RXD

    IE1|=URXIE0;

    IFG1=0X00;

    P2SEL|=0X30;                        //模块选用,p2.4,5为USART0收发

    P2DIR|=0X10;

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

    RXDATA_BUF[i]=0;                    //    清接收缓存

    _EINT();

}

 

void uart_start(void)                   //启动发送

{   

    IE1|=UTXIE0;

    while((UTCTL0&BIT0)!=BIT0);

    TXBUF0=TXDATA_BUF[0];

    TX_count=1;

}

 

void uart_receive(void)                 //接收

{   

    RXDATA_BUF[RX_count]=RXBUF0;

    RX_count+=1;

    if(RX_count>=RXBUT_num) {RX_count=0;}

}

 

void uart_send(void)                    //发送

{  

    TXBUF_num-=1;

    if(TXBUF_num>0)

      {   

          TXBUF0=TXDATA_BUF[TX_count];

          TX_count+=1;

         

      }

    else

     {   

        FLAG+=1;

        if(FLAG>10)  

        {IE1&=~UTXIE0;}

         else  

         {   

           TXBUF_num=10;

           TX_count=0;

           uart_start();

         }

     }

}

 

#pragma vector=USART0RX_VECTOR

__interrupt void UartRx(void)//发送中断响应

{   

    uart_send();

}

 

 

#pragma vector=USART0TX_VECTOR

__interrupt void UartTx(void)//接收中断响应

{

    uart_receive();

}

Susan Yang:

谢谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » msp430x43x的串口通信例程
分享到: 更多 (0)