***************************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); } } //有时我们在调试程序的时候可以用串口来显示一些数据,方便我们的电脑里就可以实时的观察到数据的变化。