这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » MSP430F149串口通信在实际调试程序中的应用

共2条 1/1 1 跳转至

MSP430F149串口通信在实际调试程序中的应用

助工
2014-10-05 22:08:36     打赏
***************************USART.H*******************/
//串口初始化
void Init_USART(void)
{  
  U0CTL|=SWRST;     //复位串口(设置之前禁止串口)--------这句可以没有
  U0CTL|=CHAR;      //8位数据(此位为0时,为7位数据位)
/*  */  
  //选用ACLK 32768时:
  U0TCTL|=SSEL0;    //select ACLK AS CLK
  U0BR0=0x03;       //波特率低字节.
  U0BR1=0x00;       //波特率高字节.
  UMCTL0=0x4A;      //9600     (波特率调整寄存器,调整小数部分)
/*
  //选用MCLK 8m时:
  U0TCTL|=SSEL1;    //select SMCLK AS CLK
  U0BR0=0Xa0;       //波特率低字节.
  U0BR1=0X01;       //波特率高字节.
  UMCTL0=0Xc0;      //19200    (波特率调整寄存器,调整小数部分)
*/ 
  ME1|=UTXE0+URXE0; //使能接收和发送 
  U0CTL&=~SWRST;    //清除串口复位信号(打开串口)---------此句一定要
  
//IE1|=URXIE0;      //使能接收中断 发送中断
  IE1 = UTXIE0 + URXIE0;   //(收发中断使能)
  P3SEL |= 0x30;            // 将P3.4,5使用外围模块 = USART0 TXD/RXD
  //P3DIR |= 0x10;            // 将P3.4设为输出(发),P3.5默认为输入(收)
}
//串口 USART 发送一个字节的数据----------------------------------------------
void sent_byte( unsigned char *ptr_data,unsigned char long_value)   
{ 
  unsigned char i;
  for (i=0;i<long_value;i++)   //连续发送 long_value 位数据
  {
    while((IFG1&UTXIFG0)==0);  //判断发送缓冲区是否结束
    U0TXBUF=*ptr_data++;       // U0TXBUF 是一个8位的寄存器             
  }  
}

/***************************一个利用串口来调试程序的简单应用****************/
#include  <msp430x14x.h>
#include  "USART.h"
#include  <stdio.h>

unsigned char send_buf[64];
float voltage;

void delay(unsigned int delay_ms)
{
    unsigned int i,j;
    for (i=0;i<delay_ms;i++)
     for(j = 1000;j > 0;j--);
}

void Init_CLK(void)
{
    unsigned int i;
    BCSCTL1 = 0X00;   //将寄存器的内容清零
     //XT2震荡器开启
     //LFTX1工作在低频模式
     //ACLK的分频因子为1    
    do 
    {
IFG1 &= ~OFIFG;                       // 清除OSCFault标志
for (i = 0x100; i > 0; i--);                
    }
    while ((IFG1 & OFIFG) == OFIFG);      // 如果OSCFault =1   
    IFG1 &= ~OFIFG;
    
    BCSCTL2 = 0X00;   //将寄存器的内容清零
    BCSCTL2|=SELM1+SELS;        //MCLK 8M and SMCLK 8M 分频因子为1
}

void main(void)
{

  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
  
  Init_CLK();
  Init_USART();
  
  while (1)
  {  
     voltage=1.234;
     sprintf(send_buf,"当前ADC12采集的电压 = %1.3f V\n",voltage);    //小数点前一位,小数点后保留3位小数,什么都不写的话(%f),表示小数点前不限定长度,小数点后面保留6位小数
     sent_byte(send_buf,40);
     delay(100);
  }  
}

//有时我们在调试程序的时候可以用串口来显示一些数据,方便我们的电脑里就可以实时的观察到数据的变化。

 


菜鸟
2014-10-16 08:48:55     打赏
2楼
亲,我想问下,我也是这么写的,为什么串口助手上没有示数。谢谢

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]