单片机AD结果一直为0 请教

2019-07-15 18:28发布

本帖最后由 ztx123 于 2014-9-23 15:23 编辑

这是控制电机的AD转换子程序,程序可以进AD中断,但是ADC_RES一直为零,如果我在pwmoutput();子函数里面直接给pwmoutput(0X5A),,电机就可以运转,或者直接给ADC_RES赋值也可以让电机转。。。但就是采不到ADC_RES,求大神指教
#include<12c5204.h>
#include<intrins.h>
#include<function.h>
#define FOSC 24000000L
#define BAUD 9600
#define ADC_FLAG 0x10
//unsigned char a ;
unsigned char i = 0;
sbit OPEN = P3^3;
void adc_isr() interrupt 5 using 1
{
        ADC_CONTR&= !ADC_FLAG;
        ADC_CONTR = 0x8A;
      //  GETADCResult();
  //a = ADC_RES;
        pwmoutput(ADC_RES);
}
void InitADC()
{
        P1ASF = 0x04;
        ADC_RES = 0;
        ADC_CONTR = 0x8A;
        Delay123(2);
}

void GETADCResult()
{
        ADC_CONTR = 0x8A;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while((!ADC_CONTR&ADC_FLAG));
// a = ADC_RES;
        
}

void Delay123(unsigned int n)
{
        unsigned int x;
        while(n--)
        {
                x = 5000;
                while(x--);
        }
}

void pwmoutput(unsigned char a)
{
        if(a == 0x00)
        {CCAP0H = 0x00;}

  else if((a>=0x55)&&(a<=0x57))
        {pwm0();}
  else if((a>=0x5A)&&(a<=0x5C))
        {pwm1();}
  else if((a>=0x60)&&(a<=0x61))
        {pwm2();}
  else if((a>=0x64)&&(a<=0x66))
        {pwm3();}
  else if((a>=0x69)&&(a<=0x6B))
        {pwm4();}
  else if((a>=0x6D)&&(a<=0x6F))
        {pwm5();}
  else if((a>=0x72)&&(a<=0x74))
        {pwm6();}
  else if((a>=0x77)&&(a<=0x79))
        {pwm7();}
  else if((a>=0x7B)&&(a<=0x7D))
         {pwm8();}
  else if((a>=0x80)&&(a<=0x82))
        {pwm9();}

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
ntmusic
1楼-- · 2019-07-15 23:42
用查询法获取AD值试试
ztx123
2楼-- · 2019-07-16 01:36
ntmusic 发表于 2014-9-23 15:10
用查询法获取AD值试试

想问下如果用查询方法的话,AD转换是一直运行的还是说只转换一次就停止了

ntmusic
3楼-- · 2019-07-16 02:51
ztx123 发表于 2014-9-23 15:20
想问下如果用查询方法的话,AD转换是一直运行的还是说只转换一次就停止了

...

宏晶的单片机吗?你可以看一下他的用户手册。既然是查询,就只要在需要获取AD值的时候打开AD,等待转换完毕再读取就可以了
dusqq
4楼-- · 2019-07-16 04:21
看后收获良多...

一周热门 更多>