打印
[51单片机]

紧急求助现代单片机AD读不出数据

[复制链接]
1219|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andy520520|  楼主 | 2018-9-26 18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 andy520520 于 2018-9-26 19:11 编辑

我用的是MC97F6108A,SOP20的单片机,此单片机是51核,现在出现AD读出的数据错误
以下是设置:
void ad_init(void)
{

  
          ADCM1 = 0x05;   //   fx/4,   时钟, fx = 8MHZ ,左对齐
        
          ADCM = 0x00;//           PSR2        = _1010_0011;         //  P17,P20,P02,P01  as analog port
}

unsigned int get_ad_value(unsigned char  ad_ch) // 8us  
{
        uint16_t AdcVal;
   
        ADCM &= ~0x0f;
        ADCM |= ad_ch;
        //--------------------------
        
    ADCM &= ~ADST;                // stop ADC
    nop();
        ADCM |= ADST;                // start ADC
        while(!AFLAG);
   
        AdcVal = (ADCRH << 8) | ADCRL;
//   AdcVal >>= 4;   //  ×ó¶ÔÆë
   
        
        return AdcVal;
}


相关帖子

沙发
rankey| | 2018-9-27 10:53 | 只看该作者
while(!(ADCCRL&0x10));  //为真,转换AD完成--此处一定要用按位&运算符,用逻辑&&会出现AD通道错乱现象

TempData = (((int)ADCDRH)<<8|(int)ADCDRL);       // TempData的高8位获取ADCDRH的低4位数据,再加ADCDRL的8位数据,这样TempData获取完整的12位数据

  参考一下,也许能帮上

使用特权

评论回复
板凳
andy520520|  楼主 | 2018-9-27 19:28 | 只看该作者
rankey 发表于 2018-9-27 10:53
while(!(ADCCRL&0x10));  //为真,转换AD完成--此处一定要用按位&运算符,用逻辑&&会出现AD通道错乱现象

T ...

unsigned int get_ad_value(unsigned char  ad_ch) // 8us  
{
        uint16_t AdcVal;
   
        ADCM &= 0xF0;
        ADCM |= ad_ch;
        //--------------------------
          
    ADCM |= ADST;                // start ADC
        while(!(ADCM & AFLAG));
        AdcVal = ((unsigned int)ADCRH<<8) | ADCRL;

        ADCM &= ~ADST;                // stop ADC
       
        return AdcVal;
}

这样的就好了

使用特权

评论回复
地板
andy520520|  楼主 | 2018-9-27 19:44 | 只看该作者
rankey 发表于 2018-9-27 10:53
while(!(ADCCRL&0x10));  //为真,转换AD完成--此处一定要用按位&运算符,用逻辑&&会出现AD通道错乱现象

T ...

想问下你有没有搞过电磁炉,电磁炉在自动触发时会停止振荡,该怎么搞?

使用特权

评论回复
5
andy520520|  楼主 | 2018-9-27 19:47 | 只看该作者
如果自动触发,把最高空闲时间强制触发打开,很容易烧掉IGBT的,不知哪位搞过电磁炉的朋友知道这个地方是怎么处理的?

使用特权

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

本版积分规则

31

主题

384

帖子

5

粉丝