msp430单片机实现三路AD转换后把结果用串口通信发送到电脑里,但是发到电脑里的老是一堆堆的乱码,单门用串口给电脑里发字符没有问题,可是把AD结合以后就出问题了。也不知道是怎么回事,程序不是很难,但本人刚学430没多久,手头没人可以请教的,希望知道的大大指点下,帮忙看看。
/*******************************************
函数名称:Send1Char
功 能:向PC机发送一个字符
参 数:sendchar--要发送的字符
返回值 :无
********************************************/
void Send1Char(uchar sendchar)
{
while (!(IFG1 & UTXIFG0)); //等待发送寄存器为空
TXBUF0 = sendchar;
}
P6SEL |= 0x0F; // 使能ADC 3通道
ADC12CTL0 = ADC12ON+SHT0_15+REFON+REF2_5V+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_3; // 使用采样定时器
ADC12IE = 0x04; // 使能ADC中断
ADC12MCTL0=SREF_1+INCH_0;
ADC12MCTL1=SREF_1+INCH_1;
ADC12MCTL2=SREF_1+INCH_2+EOS;
ADC12CTL0 |= ENC; // 使能转换
ADC12CTL0 |= ADC12SC; // 开始转换
_EINT();
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= URXE0 + UTXE0; // Enable USART0 T/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x03; // 32k/9600 - 3.41
UBR10 = 0x00; //
UMCTL0 = 0x4A; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1=URXIE0;//使能接收中断
_EINT();
while(1)
{
LPM1;
Send1Char(average0);
Send1Char(average1);
LAMP_H;
Send1Char(0xff);
}
}
/*******************************************
函数名称:ADC12ISR
功 能:ADC中断服务函数,在这里用多次平均的
计算P6.0口的模拟电压数值
参 数:无
返回值 :无
********************************************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static int index=0;
uchar i;
results0[index] = ADC12MEM0;
results1[index] = ADC12MEM1;
results2[index] = ADC12MEM2;
index++; // Move results
if(index == Num_of_Results)
{
average0 = 0;
average1 = 0;
average2 = 0;
for(i = 0; i < Num_of_Results; i++)
{
average0 += results0;
average1 += results1;
average2 += results2;
}
average0 >>= 7; //除以128
average1 >>= 7;
average2 >>= 7;
index = 0;
LPM1_EXIT;
}
} |