donglaile 发表于 2012-4-7 14:18:28

stc12c2052ad中断方式AD工作不正常

看了 “[古董贴][原创]循线算法原理与实践”,就想把自己做的小车也用AD的方法采集红外对管的数据,只会51么就找了个带ad的stc12c2052ad用。我想用中断的方式去采集信号,并从串口发送到电脑观察,结果它工作一会就不干了。。。但是使用查询法工作却正常,有人遇到过这种问题吗?求指教


//---------------------------------------
//名称: 初始化函数函数       
//-----------------------------------------
void init_AD(void)
{
        P1M0=0x3f;        //0000 0111                //设置P1.012为高阻输入,以准备AD
        P1M1=0x00;        //0000 0000

        AUXR |= SET_EADCI;          //允许ADC中断

        ADC_DATA = 0;//数据寄存器清零
//        ADC_LOW2 = 0;

    ADC_CONTR = 0xf8; //1111,1000打开A/D转换电源
                                          //ADC_CONTRADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
                                          //控制寄存器        AD上电          速度       速度结束标志       AD开始          通道选择
                                          //speed1,speed0
                                          //0               0          ,270 时钟周期转换一次
                                          //0               1          ,540 时钟周期转换一次
                                          //1               0          ,810 时钟周期转换一次
                                          //1               1          ,1080时钟周期转换一次
                                          //
        IPH |= 0x20;          //设置优先级
        IP   = 0x00;          //
       
        Delay(1000);           //延时1ms
        ADC_CONTR = ADC_CONTR & 0xe0; //1110,0000 清ADC_FLAG,ADC_START位和低3位

        EADC_SPI = 1;          //开ADC中断,
}
//AD中断服务函数
void ADC_ISR(void)interrupt 5 using 3
{
        ADC_CONTR = !ADC_FLAG;//清ADC_FLAG位
       
        AD_Value = ADC_DATA;                              //读取8位AD结果 ADC_Value = 256*(Vin/Vcc)       
        SendByte(CHANNEL);
        SendByte(ADC_DATA);
        SendByte(0x0d);
        if(++CHANNEL > 6)          //改变AD通道
        {CHANNEL = 0;}
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | CHANNEL;
}

freshuman 发表于 2012-6-26 17:35:34

STC中的PDF程式也是有问题的!
页: [1]
查看完整版本: stc12c2052ad中断方式AD工作不正常