搜索
bottom↓
回复: 11

求助:HR7P90H的ADC程序

[复制链接]

出0入0汤圆

发表于 2013-9-10 22:19:16 | 显示全部楼层 |阅读模式
本帖最后由 zndz410 于 2013-9-10 22:24 编辑

最近在对HR7P90H的ADC模块进行学习,改写了ADC的C程序,但没有达到效果,特向大神们求助,哪里出问题。

功能是: 4脚 AIN2(PA2)作输入,接电位器, 14脚PC3外接一LED作AD转换结果的显示。结果是LED一直亮,调整电位器对LED没有影响,不会亮灭变化。


程序如下:


#include <HIC.h>
#include <HR7P90H.h>

#define unchar   unsigned char

section1    unchar   ADC_RESULT_L;
section1    unchar   ADC_RESULT_H;


void main()
{
  PCT3  = 0;            //PC口输出,用以AD转换结果显示
  PAT2 = 1;             //PA2输入,用以AD输入
   
   ANSEL = 0B00000100;  //选择AIN2通道(PA2口)为模拟IO
   
   ADCCH=0B00000010;  //ADCCH控制寄存器设置: (BIT7-BIT4)设置AIN11-AIN8通道数模IO切换。
                                           //(BIT3-BIT2)----。
                                           //(BIT1) ADFM=(0 左对齐, 1 右对齐)。
                                           //(BIT0) ADVREF=(1 外部参考, 0 内部VDD作为参考电压) 。
   ADCCL=0B0010101;  //ADCCL控制寄存器设置: (BIT7-BIT4)设置ADCHSx ADC模块输入通道选择。
                                          //(BIT3-BIT2)设置ADCSx ADC时钟选择位: 00--FOSC, 01--FOSC/4, 10--FOSC/16, 11--内部NC时钟(250K HZ)。
                                          //(BIT1) 设置ADTRG转换状态位:0--AD未进行转换或已经转换完成, 1--AD正在进行转换,该位置1启动ADC转换。
                                          //(BIT0) 设置ADEN模块使能位:0--OFF,1--ON。

          // ADCRL寄存器保存低8位ADC转换值,  ADCRH寄存器保存高8位ADC转换值。

  _asm
        {
          NOP;
          NOP;
        }

  ADTRG=1;           //使能AIN2通道开始ADC转换
  
  while(1)
        {
           if(ADTRG==0)
            {                 
              //AD转换结果从ADCRH,ADCRL获取
                        ADC_RESULT_L=ADCRL;
                        ADC_RESULT_H=ADCRH;
                        ADTRG=1;
            }
        }
   
   PCT3 = ADCRL & (1<<3);       //将结果的高八位送与PC口
   
}



对于采用内部电源作参考电压,这内部电源电压是多少的啊,手册上没有找到。



阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-9-11 09:57:47 | 显示全部楼层
ADCCL=0B0010101; 是不是少了个0 ?  是否为 ADCCL=0X2C; 那么ADEN=1;也没开吧?   

就算前面都没错   PCT3 = ADCRL & (1<<3);   这句   你确定你程序能走到这吗?  丢while(1)里去吧!

内部参考电压就是VDD 手册这章概述里就写了

出0入0汤圆

发表于 2013-9-11 10:26:14 | 显示全部楼层
liujian6f 发表于 2013-9-11 09:57
ADCCL=0B0010101; 是不是少了个0 ?  是否为 ADCCL=0X2C; 那么ADEN=1;也没开吧?   

就算前面都没错   PCT ...

ANSEL = 0B00000100;  //选择AIN2通道(PA2口)为模拟IO

端口设置为0为模拟IO(用于ADC通道功能),设置成1为数字IO。
ANSEL = 0B11111011;

出0入0汤圆

 楼主| 发表于 2013-9-11 11:40:32 | 显示全部楼层
liujian6f 发表于 2013-9-11 09:57
ADCCL=0B0010101; 是不是少了个0 ?  是否为 ADCCL=0X2C; 那么ADEN=1;也没开吧?   

就算前面都没错   PCT ...

谢谢大侠指点,确实少了1位。

应该是: ADCCL=0B00100101;

出0入0汤圆

 楼主| 发表于 2013-9-11 11:42:21 | 显示全部楼层
海尔_小海 发表于 2013-9-11 10:26
ANSEL = 0B00000100;  //选择AIN2通道(PA2口)为模拟IO

端口设置为0为模拟IO(用于ADC通道功能),设置成1 ...

哦,搞反了,谢谢海版的指正。

出0入0汤圆

 楼主| 发表于 2013-9-12 15:55:08 | 显示全部楼层
经过楼上两位大神的指正,我重新改正后编译下载调试,结果还是一样,LED长亮,不会随电位器的调整而亮灭。

还请大神们帮我再看看程序哪里出问题了。

#include <HIC.h>
#include <HR7P90H.h>

#define unchar   unsigned char

section1    unchar   ADC_RESULT_L;
section1    unchar   ADC_RESULT_H;


void main()
{
   PCT3  = 0;            //PC口输出,用以AD转换结果显示
  PAT2 = 1;             //PA2输入,用以AD输入
   
   ANSEL = 0B11111011;  //选择AIN2通道(PA2口)为模拟IO
   
   ADCCH=0B00000010;  //ADCCH控制寄存器设置: (BIT7-BIT4)设置AIN11-AIN8通道数模IO切换。
                                           //(BIT3-BIT2)----。
                                           //(BIT1) ADFM=(0 左对齐, 1 右对齐)。
                                           //(BIT0) ADVREF=(1 外部参考, 0 内部VDD作为参考电压) 。
   ADCCL=0B00100101;  //ADCCL控制寄存器设置: (BIT7-BIT4)设置ADCHSx ADC模块输入通道选择。
                                          //(BIT3-BIT2)设置ADCSx ADC时钟选择位: 00--FOSC, 01--FOSC/4, 10--FOSC/16, 11--内部NC时钟(250K HZ)。
                                          //(BIT1) 设置ADTRG转换状态位:0--AD未进行转换或已经转换完成, 1--AD正在进行转换,该位置1启动ADC转换。
                                          //(BIT0) 设置ADEN模块使能位:0--OFF,1--ON。

   _asm
        {
          NOP;
          NOP;
        }

  ADTRG=1;           //使能AIN2通道开始ADC转换
  
  while(1)
        {
           if(ADTRG==0)
            {                  
              //AD转换结果从ADCRH,ADCRL获取
                ADC_RESULT_L=ADCRL;
                        ADC_RESULT_H=ADCRH;
                        ADTRG=1;
            }

        PCT3 = ADC_RESULT_L & (1<<3);       //将结果的低八位中的第3位送与PC3口

        }
        
}



出0入0汤圆

发表于 2013-9-13 14:59:59 | 显示全部楼层
zndz410 发表于 2013-9-12 15:55
经过楼上两位大神的指正,我重新改正后编译下载调试,结果还是一样,LED长亮,不会随电位器的调整而亮灭。
...

void ADC_10BITS_PRO(void)
{
        PBT5=1;           //该IO口设为输入
        ANSEL&=0B01111111;//选择AIN7通道(PB5口)做为模拟IO
//ADCCH控制寄存器设置  (BIT7-BIT4)设置AIN11-AIN8通道数模IO切换 BIT3-BIT2(--) BIT1-ADFM=0左对齐 ADFM=1右对齐 BIT0-ADVREF(1-外部参考 0-内部VDD做为参考)
        ADCCH=0B00000010; //右对齐 内部VDD做为参考
//ADCCL控制寄存器设置ADCHSx-> BIT7-BIT4 ADC模块输入通道选择  ADCSx->BIT3-BIT2 ADC时钟选择位 00-FOSC 01-FOSC/4 10-FOSC/16 11-内部RC时钟(250k HZ)
//                   ADTRG->BIT1转换状态位 0-AD未进行转换或已经转换完成 1-AD正在进行转换,该位置1启动ADC转换。ADEN->BIT0 ADC模块使能位 0-OFF 1-ON
  ADCCL=0B01110101;// 通道选择AIN7 转换时钟为FOSC/4(内部振荡8M,TAD时间为2uS) 不启动ADC转换  ADC模块使能位打开
//ADCRL寄存器保存低8位ADC转换值  ADCRH寄存器保存高8位ADC转换值
  __asm      
                        {           
                                NOP;      
                          NOP;
                        }   
        ADTRG=1;   //使能AIN7通道开始ADC转换
        while(1)
        {
                if(ADTRG==0)
                        {
                                ADC_RESULT_L=ADCRL;
                                ADC_RESULT_H=ADCRH;
                        }
        }

}

出0入0汤圆

发表于 2013-9-13 15:00:38 | 显示全部楼层
参考一下上面的例程。

出0入0汤圆

 楼主| 发表于 2013-9-13 17:02:37 | 显示全部楼层
海版啊,我就是参考你贴出来的例程改写的,但不知是何原因,就是达不到想要的效果。

出0入0汤圆

 楼主| 发表于 2013-9-13 17:03:43 | 显示全部楼层
本帖最后由 zndz410 于 2013-9-13 17:06 编辑
海尔_小海 发表于 2013-9-13 14:59
void ADC_10BITS_PRO(void)
{
        PBT5=1;           //该IO口设为输入



我也是参照这个来修改的,但达不到效果。


海版帮我看看这改的程序哪里出错了。


出0入0汤圆

发表于 2013-10-14 09:12:38 | 显示全部楼层
参考下

出0入0汤圆

发表于 2014-1-9 20:00:47 | 显示全部楼层
结果如何?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 08:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表