skyoodboy 发表于 2011-8-19 23:27:56

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;
       
}

skyoodboy 发表于 2011-8-20 12:24:28

求助呀,自顶一下,各位帮帮忙呀

skyoodboy 发表于 2011-8-20 20:13:59

可能我问题没有说清楚,我用的是stc12c5410ad 这一款单片机,然后它自带七通道8位ad,但不知道为什么,我不能进行通道的转换,但如果不进行转换,一直只用一个通道,是完全没有问题的,如果进行了转换,采回来只有ch7的值,其它的都不见了
页: [1]
查看完整版本: stc12c54进行多通道ad采样出现问题