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;
}
STC中的PDF程式也是有问题的!
页:
[1]