打印

关于msp430模数转换转换和串口通信的问题

[复制链接]
1967|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hongzhuxia|  楼主 | 2011-6-22 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;
    }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

37

帖子

2

粉丝