我编写了一个用STC15F2K60S2单片机用两个通道采集工频电压信号和电流信号的程序,一个工频周期采样12个点,用定时器定时1.667ms,定时结束后先采P10口再采P11口,发现寄存器中存放两个通道模数转换结果数组里的值是一样的,h[]数组跟k[]数组里的值是一样的,个人分析是转换AD通道的程序出错了,部分程序如下,请各位高手帮我纠正一下,谢谢。
/*----------------------------
ADC中断服务程序
----------------------------*/
void adc_isr() interrupt 5 using 1
{
ADC_CONTR &=!ADC_FLAG; //清除ADC中断标志
GetADC=(ADC_RES<<2)| (ADC_RESL&0x03);
g=(float)GetADC;//*(220.0/1.5); //输入互感器的电压值=转换结果*(5.0/1023)*(220/1.5)
if(ch==0)
{
h[q]=g;
ch=1;
ADC_START=0x08;
}
else
{
k[q]=g;
t=1;
ADC_START=0x00;
}
ADC_CONTR|=(ADC_START|ch);
}
/*----------------------------
定时中断服务程序
----------------------------*/
void timer0() interrupt 1
{
ch=0;
ADC_CONTR|=(0x08|ch);
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
P1ASF = 0xff; //设置P1口为AD口
CLK_DIV&=~0x20; //高8位加低两位的形式
ADC_RES = 0; //清除结果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDHH; //选择ch口作为AD输入来用
Delay(2);
IE=0xa0; //ADC上电并延时
}
/*----------------------------
初始化T0定时器
----------------------------*/
void InitT0() //初始化定时器0
{
AUXR|=0x80;//|=0x80;//&=0x7F; //
TMOD&=0xF0;
TH0=0x27;//0xFD;//0xFA;//0x70;//0x75;//0xfa;//0xf6;//0xED;//0xFA;//0xF9;//0xBA;////0xF9 //定时1.6ms
TL0=0xF5;//0x00;//0x3D;//0x3A;//0xC2;//0x3e;//0xe2;//0xC5;//0x00;//0x7C;//0XE1;// //7C
TF0=0;
TR0=1;
IE|=0x82;//ET0=1;
} |