大神求指导,为什么用MSP430F149内部数模转换得到的数据会一直变

[复制链接]
1521|2
 楼主| Armais 发表于 2013-12-25 16:21 | 显示全部楼层 |阅读模式
我用AM1001湿度传感器测得湿度之后。送到MSP430F149,用内部的ADC12模块单通道多次转换,去平均后,在LCD1602上显示,为什么LCD1602上湿度值会一直变。
 楼主| Armais 发表于 2013-12-25 16:23 | 显示全部楼层
设置的是MCLK=1MHz下面是ADC12初始化,中断和转换代码,求大神指导
void Init_ADC(void)
{
    P6SEL |= 0x01;                            // 使能P6.0为ADC通道
    ADC12CTL0 = ADC12ON+SHT0_15+MSC;          // 打开ADC,设置采样时间
    ADC12CTL1 = SHP+CONSEQ_2;                 // 使用采样定时器,单输入所次转换
   
    ADC12IE = 0x01;                           // 使能ADC中断
    ADC12CTL0 |= ENC;                         // 使能转换
    ADC12CTL0 |= ADC12SC;                     // 开始转换
}
////////////////////////////////////////////////////////////////////////////////
/////////////////////////初始化ADC12,P6.0作为模拟信号输入//////////////////////
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
    static uchar index = 0;
   
    results[index++] = ADC12MEM0;               // Move results
    if(index == 64)
    {
       uchar i;
       H_result = 0;
       for(i = 0; i < 64;i++)
       {
           H_result += results[i];
       }
       H_result >>= 6;//多次取平均
       index = 0;
       H2D(H_result);
           
    }
}
////////////////////////////////////////////////////////////////////////////////
void H2D(uint H)
{
    ShiDu=0;
    ShiDu1=0;
    ShiDu2=0;
    unsigned long caltmp;
    uint Volt;   
    caltmp = H;
    /*由于设置的AVcc = 3.3V,DVss = 0V*/
    caltmp = (caltmp << 5) + H;             //caltmp = Hex_Val * 33
    caltmp = (caltmp << 3) + (caltmp << 1);     //caltmp = caltmp * 10
   
    Volt = caltmp >> 12;                  //Curr_Volt = caltmp / 2^n
    ShiDu = Volt*100/3;
    ShiDu1 = ShiDu/100;
    ShiDu2 = ShiDu%100;
}
 楼主| Armais 发表于 2013-12-25 16:24 | 显示全部楼层
顺便弱弱问一下,如何结贴
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部