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