打印

【TI 技术资料分享】基于MSP430F149单片机的串口0驱动程序

[复制链接]
1043|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
必胜客A|  楼主 | 2015-3-10 12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于MSP430F149单片机的串口0驱动程序 基于MSP430F149单片机的串口0驱动程序.zip (1.15 KB)

#include "msp430x14x.h"
#include "Uart0.h"



//增加与PC机的握手协议--开始
void Iint_Uart0(void)                  //初始化com0
{
    UCTL0&=~SWRST;  //SWRST复位,USART允许
    UCTL0=0X10;    //8位数据位,1位停止位,无效位
    UBR00=0X03;
    UBR10=0X00;   //使用32KHz,波特率为9600
    UMCTL0=0X4A;
    UTCTL0=0X10;   //选定ACLK(32KHz晶振)为时钟源
   
    ME1|=UTXE0+URXE0;
    //ME2|=UTXE1;

    P3SEL|=0X30;     //P3.4 P3.5    0011 0000
    P3DIR|=0X28;     //             0010 0000
    IE1|=URXIE0;
                        
}

void fnUart0_Send_Byte(unsigned char aa)
{
    P3OUT|=BIT3;
    TXBUF0=aa;
    while((UTCTL0&0X01)==0X00)
    {
        ;
    }
    P3OUT&=~(BIT3);
}

#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
   
    switch(cRcv_Stat0)
    {
      case 0:
        new_data=RXBUF0;
        if((new_data==0xa6)&&(last_data==0x02))
        {
            PC_data[1]=new_data;            
            PC_data[0]=last_data;      
            cRcv_Stat0=1;       //是帧头
            cal=2;
            
        }
        else              //
        {        
            last_data=new_data;
            cal=0;
            cRcv_Stat0=0;
       }
        break;
        
     case 1:
        PC_data[cal]=RXBUF0;   //帧数据
        
        if((PC_data[cal]==0x0a)&&(PC_data[cal-1]==0x0d))
        {
           cValid_flag=0x55;
           cRcv_Stat0=0;
           cal=0;
           new_data=0;
           last_data=0;
   
        }
        else
        {
          cal++;
        }
        break;
        
    default:
       cRcv_Stat0=0;
        break;
                                
    }   
      
}  
//增加与PC机的握手协议--结束


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

176

帖子

2

粉丝