这篇文章主要介绍了使用UART与PC通信实现msp430g2553单片机超声波测距示例,需要的朋友可以参考下MyTHTML5中文学习网 - HTML5先行者学习网
适用于msp430g2553单片机 使用到了hc-sr04超声测距模块,使用UART与PC通信。MyTHTML5中文学习网 - HTML5先行者学习网
代码如下:MyTHTML5中文学习网 - HTML5先行者学习网
#includeMyTHTML5中文学习网 - HTML5先行者学习网
long current_time;//最近一次测得时间MyTHTML5中文学习网 - HTML5先行者学习网
/*MyPro*/MyTHTML5中文学习网 - HTML5先行者学习网
#define LED_1 BIT0MyTHTML5中文学习网 - HTML5先行者学习网
#define SW_2 BIT3MyTHTML5中文学习网 - HTML5先行者学习网
#define TA1_1 BIT2 //TA0.1 HC-SR04 EchoMyTHTML5中文学习网 - HTML5先行者学习网
#define TRIG BIT4 //HC-SR04 TrigMyTHTML5中文学习网 - HTML5先行者学习网
#define ACCU_GRD 7 //Accuracy Grade "xxx.x"+'/0'MyTHTML5中文学习网 - HTML5先行者学习网
#define MIN_UNIT_TO1M 1000 //1 m to 1 mmMyTHTML5中文学习网 - HTML5先行者学习网
/*TIMER0*/MyTHTML5中文学习网 - HTML5先行者学习网
#define SOUR_CLK 1045000MyTHTML5中文学习网 - HTML5先行者学习网
#define DIV_CLK_1 1MyTHTML5中文学习网 - HTML5先行者学习网
#define SYS_CLK_SIG_1 SOUR_CLK/DIV_CLK_1MyTHTML5中文学习网 - HTML5先行者学习网
#define DISTANCE 45//dmMyTHTML5中文学习网 - HTML5先行者学习网
#define TIMER_RIG_MAX 0xffffMyTHTML5中文学习网 - HTML5先行者学习网
#define MAX_TIME_1 DISTANCE*2/34*SYS_CLK_SIG_1MyTHTML5中文学习网 - HTML5先行者学习网
#ifdef MAX_TIME_1MyTHTML5中文学习网 - HTML5先行者学习网
#define SYS_CLK SYS_CLK_SIG_1MyTHTML5中文学习网 - HTML5先行者学习网
#endifMyTHTML5中文学习网 - HTML5先行者学习网
#define UART_TXD BIT2MyTHTML5中文学习网 - HTML5先行者学习网
void init_timer1()MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
P2SEL |= TA1_1; //TA1.1 CCI1B be usedMyTHTML5中文学习网 - HTML5先行者学习网
P2DIR &= ~TA1_1;MyTHTML5中文学习网 - HTML5先行者学习网
TA1CTL = MC_0 + TASSEL_2; //TimerA_0 stop mode,clock=1MhzMyTHTML5中文学习网 - HTML5先行者学习网
TA1CCTL1 = CCIE + SCCI + CCIS_1 + SCS + CAP + CM_2; //TA0CC1 capture mode + down edgeMyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
/*UART*/MyTHTML5中文学习网 - HTML5先行者学习网
void init_uart() //USCI 初始化函数MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
UCA0CTL1 |= UCSWRST; //初始化串口寄存器MyTHTML5中文学习网 - HTML5先行者学习网
UCA0CTL1 |= UCSSEL_2; //选择子系统时钟 1.045MHzMyTHTML5中文学习网 - HTML5先行者学习网
UCA0BR0 = 0x6d; //波特率为9600MyTHTML5中文学习网 - HTML5先行者学习网
UCA0BR1 = 0x00;MyTHTML5中文学习网 - HTML5先行者学习网
P1SEL |= UART_TXD;MyTHTML5中文学习网 - HTML5先行者学习网
P1SEL2 |= UART_TXD;MyTHTML5中文学习网 - HTML5先行者学习网
P1DIR |= UART_TXD; //将P1.2设为第二功能MyTHTML5中文学习网 - HTML5先行者学习网
UCA0CTL1 &= ~UCSWRST; //初始化结束MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
long cal_distance() //通过测得时间计算距离MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
return (long)((340*(0.5000*current_time/SYS_CLK)*MIN_UNIT_TO1M));MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
void delay() //粗略延迟MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
unsigned char i,j;MyTHTML5中文学习网 - HTML5先行者学习网
for(i=124;i>0;i--)MyTHTML5中文学习网 - HTML5先行者学习网
for(j=8;j>0;j--);MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
static char * translater(long distance) //将测得的距离以字符串形式存储MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
static char trans[ACCU_GRD];MyTHTML5中文学习网 - HTML5先行者学习网
int i;MyTHTML5中文学习网 - HTML5先行者学习网
long f;MyTHTML5中文学习网 - HTML5先行者学习网
trans[0]=' ';MyTHTML5中文学习网 - HTML5先行者学习网
if(distance)MyTHTML5中文学习网 - HTML5先行者学习网
for(i=1,f=MIN_UNIT_TO1M;iMyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
if(i==4)MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
trans[i] = '.';MyTHTML5中文学习网 - HTML5先行者学习网
continue;MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
trans[i] = '0'+ distance/f;MyTHTML5中文学习网 - HTML5先行者学习网
distance %= f;MyTHTML5中文学习网 - HTML5先行者学习网
f /= 10;MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
trans[ACCU_GRD-1] = '/0';MyTHTML5中文学习网 - HTML5先行者学习网
return trans;MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
void once_pro() //发一次超声波MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
if(TA1CCTL1 & COV)MyTHTML5中文学习网 - HTML5先行者学习网
TA1CCTL1 &= ~COV;MyTHTML5中文学习网 - HTML5先行者学习网
if(!(P1IN & BIT3))MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
TA1R = 0;MyTHTML5中文学习网 - HTML5先行者学习网
P1OUT |= TRIG; //Trig 10 us 高电平MyTHTML5中文学习网 - HTML5先行者学习网
_EINT();MyTHTML5中文学习网 - HTML5先行者学习网
TA1CTL |= MC_2; //continue modeMyTHTML5中文学习网 - HTML5先行者学习网
P1OUT &= ~TRIG;MyTHTML5中文学习网 - HTML5先行者学习网
P1OUT |= LED_1;MyTHTML5中文学习网 - HTML5先行者学习网
while(TA1CCTL1 & CCIFG); //等待 捕捉中断结束MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
elseMyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
P1OUT &= ~LED_1;MyTHTML5中文学习网 - HTML5先行者学习网
_DINT();MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
void uart_txstring(char *string) //UART_TX 发送一个串MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
int i=0;MyTHTML5中文学习网 - HTML5先行者学习网
while(string[i++])MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
switch (i) //过滤无效 '0'MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
case 1:if(string[i]=='0') continue;MyTHTML5中文学习网 - HTML5先行者学习网
case 2:if(string[i]=='0'&&string[i-1]=='0') continue;MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
UCA0TXBUF = string[i];MyTHTML5中文学习网 - HTML5先行者学习网
delay();MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
/*UART_ISR*/MyTHTML5中文学习网 - HTML5先行者学习网
#pragma vector = USCIAB0TX_VECTORMyTHTML5中文学习网 - HTML5先行者学习网
__interrupt void usci_txdistance() //向 PC 发送 测得的距离MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
uart_txstring("/n/r");MyTHTML5中文学习网 - HTML5先行者学习网
uart_txstring(" Current ");MyTHTML5中文学习网 - HTML5先行者学习网
uart_txstring(" distance: ");MyTHTML5中文学习网 - HTML5先行者学习网
uart_txstring(translater(cal_distance()));MyTHTML5中文学习网 - HTML5先行者学习网
uart_txstring(" cm");MyTHTML5中文学习网 - HTML5先行者学习网
IE2 &= ~UCA0TXIE;MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
/*TIMER0_INT_ISR*/MyTHTML5中文学习网 - HTML5先行者学习网
#pragma vector = TIMER1_A1_VECTORMyTHTML5中文学习网 - HTML5先行者学习网
__interrupt void capture()MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
current_time = TA1CCR1;MyTHTML5中文学习网 - HTML5先行者学习网
TA1CTL &= ~MC_2;MyTHTML5中文学习网 - HTML5先行者学习网
TA1CCTL1 &= ~CCIFG; //清CC1中断标志位MyTHTML5中文学习网 - HTML5先行者学习网
IE2 |= UCA0TXIE;MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
/*Main*/MyTHTML5中文学习网 - HTML5先行者学习网
void main()MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
WDTCTL = WDTPW + WDTHOLD; //关狗MyTHTML5中文学习网 - HTML5先行者学习网
DCOCTL = 0;MyTHTML5中文学习网 - HTML5先行者学习网
BCSCTL1 = CALBC1_1MHZ;MyTHTML5中文学习网 - HTML5先行者学习网
DCOCTL = CALDCO_1MHZ;MyTHTML5中文学习网 - HTML5先行者学习网
P1OUT = 0;MyTHTML5中文学习网 - HTML5先行者学习网
P2OUT = 0;MyTHTML5中文学习网 - HTML5先行者学习网
P1REN |= SW_2;MyTHTML5中文学习网 - HTML5先行者学习网
P2REN |= TA1_1;MyTHTML5中文学习网 - HTML5先行者学习网
P1OUT |= SW_2;MyTHTML5中文学习网 - HTML5先行者学习网
P1DIR &= ~SW_2;MyTHTML5中文学习网 - HTML5先行者学习网
P1DIR = TRIG + LED_1;MyTHTML5中文学习网 - HTML5先行者学习网
init_timer1();MyTHTML5中文学习网 - HTML5先行者学习网
init_uart();MyTHTML5中文学习网 - HTML5先行者学习网
while(1)MyTHTML5中文学习网 - HTML5先行者学习网
{MyTHTML5中文学习网 - HTML5先行者学习网
int c = 8;MyTHTML5中文学习网 - HTML5先行者学习网
while(c--)MyTHTML5中文学习网 - HTML5先行者学习网
delay();MyTHTML5中文学习网 - HTML5先行者学习网
if(TA1CCTL1 & CCIFG)MyTHTML5中文学习网 - HTML5先行者学习网
TA1CCTL1 &= ~CCIFG;MyTHTML5中文学习网 - HTML5先行者学习网
once_pro();MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
}MyTHTML5中文学习网 - HTML5先行者学习网
注:更多精彩文章请关注三联编程教程栏目。