MSP430G2553单片机
#include <msp430.h>
#include "stdint.h"
/*初始化时钟*/
void InitSystemClock(void)
{
/*配置DCO为1MHZ时钟*/
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
/*配置SMCLK的时钟源为DCO*/
BCSCTL2 &= ~SELS;
/*SMCLK的分频系数置为1*/
BCSCTL2 &= ~(DIVS0 | DIVS1);
}
/*初始化串口*/
void InitUART(void)
{
/*复位USCI_Ax*/
UCA0CTL1 |= UCSWRST;
/*设置为异步模式*/
UCA0CTL0 &= ~UCSYNC;
/*配置UART时钟源为SMCLK*/
UCA0CTL1 |= UCSSEL1;
/*配置波特率为9600*/
UCA0BR0 = 0x68;
UCA0BR1 = 0x00;
UCA0MCTL = 1 << 1;
/*配置端口,使能端口复用*/
P1SEL |= BIT1 + BIT2;
P1SEL2 |= BIT1 + BIT2;
/*清除复位位,使能UART*/
UCA0CTL1 &= ~UCSWRST;
/*接收中断启用*/
IE2 |= UCA0RXIE;
/*清空接收中断标志*/
IFG2 &= ~UCA0RXIFG;
}
/*初始化串口发送字符串*/
void UARTSendString(uint8_t *pbuff, uint8_t num)
{
uint8_t cnt = 0;
for(cnt = 0; cnt < num; cnt++)
{
/*判断是否有数据正在发送*/
while(UCA0STAT & UCBUSY);
UCA0TXBUF = *(pbuff + cnt);
}
}
/*初始化串口发送数字*/
void PrintNumber(uint16_t num)
{
uint8_t cnt = 0;
uint8_t buff[6] = {0,0,0,0,0,'\n'};
for(cnt = 0; cnt < 5; cnt++)
{
buff[4 - cnt] = (uint8_t)(num % 10 + '0');
num /= 10;
}
UARTSendString(buff,6);
}
/*初始化ADC*/
void InitADC(void)
{
/*设置ADC时钟MCLK*/
ADC10CTL1 |= ADC10SSEL_2;
/*ADC 2分频*/
ADC10CTL1 |= ADC10DIV_0;
/*设置ADC基准源*/
ADC10CTL0 |= SREF_1;
/*设置ADC采样保持时间64CLK*/
ADC10CTL0 |= ADC10SHT_3;
/*设置ADC采样率200k*/
ADC10CTL0 &= ~ADC10SR;
/*ADC基准选择2.5V*/
ADC10CTL0 |= REF2_5V;
/*开启基准*/
ADC10CTL0 |= REFON;
/*选择ADC输入通道A0*/
ADC10CTL1 |= INCH_0;
/*允许A0模拟输入*/
ADC10AE0 |= 0x0001;
/*开启ADC*/
ADC10CTL0 |= ADC10ON;
}
/*一次ADC转换并返回值*/
uint16_t GetADCValue(void)
{
/*开始转换*/
ADC10CTL0 |= ADC10SC|ENC;
/*等待转换完成*/
while(ADC10CTL1 & ADC10BUSY);
/*返回结果*/
return ADC10MEM;
}
int main(void)
{
uint16_t adcvalue = 0;
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
InitSystemClock();
InitUART();
InitADC();
while(1)
{
adcvalue = GetADCValue();
UARTSendString(adcvalue,8);
__delay_cycles(300000);
}
return 0;
}
从麦克风采集模拟信号后,进行ADC转换,在用串口发送到串口助手,串口助手保存为十六进制的dat文件,但这个dat文件无法用格式工厂转为音频文件,是十六进制无法转换吗?还是说在ADC的时候就该调整了?该如何通过电脑把音频再播放出来呢?