html5中文学习网

您的位置: 首页 > 网站及特效实例 > jquery特效 » 正文

使用UART与PC通信实现msp430g2553单片机超声波测距示例_编程语言综合

[ ] 已经帮助:人解决问题

   这篇文章主要介绍了使用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先行者学习网

        :更多精彩文章请关注三联编程教程栏目。

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助