基于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机的握手协议--结束
|