stc12c54进行多通道ad采样出现问题
大家好。是这样的,我在用stc12进行一个多通道(3通道)的数据采集,单独使用一个通道进行采集时,完全正常。但是,但我进行通道的切换之时,却不能够切换,转换回来的数据有问题,好像都是通道7的数据。请各位帮忙分析一下程序,不胜感激。/****************************************/
//定时函数
/****************************************/
void timer0() interrupt 1 using 1
{TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
flag=1;
}
/****************************************/
//定时函数
/****************************************/
void delayms(unsigned int xms)
{
unsigned int i,j;
for (i=xms;i>0;i--)
{
for (j=1000;j>0;j--);
}
}
/*------------------------------------------------
主程序
--------------------------------------------B V----*/
void main()
{
unsigned char temp,addr ,channel,i;
led=1;
EA=0;
SCON= 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收 */
PCON=0X80; /* SMOD=1 加倍*/
TMOD = 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xf3; /* TH1:4800波特庇
TR1 = 1; /* TR1:timer 1 run */
ES = 1; /*打开串口中断*/
TH0=(65536-300)/256; //定时器初始化
TL0=(65536-300)%256;
ET0=1;
TR0=1;
EA=1; /*打开总中断*/
P1M0=0Xe0; //高三位高阻输入
P1M1=0X00;
ADC_CONTR=0X80; //power up
delayms(100);
channel=0x07;//通道初始化
addr=0; //用于计数,只转换255次
while(1)
{
if(flag)
{ if (addr<255)
{
led=1;
flag=0;
temp=ADC_DATA;
ADC_CONTR&=0xef; //flag =0
if(channel>5 //通道循环
{channel--;}
else {channel=7;}
ADC_CONTR|=channel; //channel选择
delayms(10); //延时
ADC_CONTR|=0x08; //start
addr++;
SBUF=temp; //发回转换结果
}
else
{led=0;}
}
}
}
void UART_SER (void) interrupt 4 //串行中断服务程序
{
//定义临时变量
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
}
if(TI) //如果是发送标志位,清零
TI=0;
} 求助呀,自顶一下,各位帮帮忙呀 可能我问题没有说清楚,我用的是stc12c5410ad 这一款单片机,然后它自带七通道8位ad,但不知道为什么,我不能进行通道的转换,但如果不进行转换,一直只用一个通道,是完全没有问题的,如果进行了转换,采回来只有ch7的值,其它的都不见了
页:
[1]