打印

关于ad 转换

[复制链接]
3184|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jim101|  楼主 | 2013-6-18 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    现在我在编写AD转换的程序时候。发现的如下问题。
,  用的是protues  +keil 仿真的
   1,我用的定时器  定时,采集一个0-5v的交流50hz  ,采样的点数 是16,用0.02s/16=1250us
         用65536-1250    初始化定时    这块有没有错的
   2  在protues里,一个交流电压-5到5v之间,如何把他设置在0-5v  

     现在采集的电压  不对,看看我哪里出错了。谢谢
/*****************************************判断通信用的定时器  这里用定时器0*和函数*********************************************/
void start_T0()
{
   TMOD=0x02;//用定时器2;
        TH0=0x83;        //定时0.2s         
        TL0=0x83;
        TR0=1;//启动定时器0
        EA=1; //打开中断
        ET0=1; //打开定时器0中断


}
uint  idata ck;
uchar  idata a;        //收集P0口接收到的数据
uchar  idata ad[16] ;
//uchar  idata u,flag=0;


/***************************延时程序*******************************************/
/*void Delay(unsigned int tc)     //显示延时程序

{
       while( tc != 0 )  
      {
            unsigned int i;  
                         for(i=0; i<100; i++);
             tc--;
         }
}
        */

/***********************************************************AD0804测试******************************************************************************/

void AD_init0804()        //AD  采样
{
        adcs=0;
        adwr=0;
        adcs=1;
        adwr=1;
       
        adcs=0;
        adrd=0;
        a=P0;
        adcs=1;
        adrd=1;


}
        void adshuzhi()         //AD 显示的数值
{       
   unsigned long jieguo[16]=0;
        uchar i;
        unsigned long jieguo1=0,jieguo2=0;               
        uint m,n,k,l,e,d,u;

       
        for(u=0;u<16;u++)
        {         
                 jieguo[u]=ad[u]*ad[u];
                  
                        
        }
                for(i=0;i<16;i++)
        {
                 jieguo1+=jieguo[i];
               
                 

        }
       
        jieguo2=jieguo1/16;

        jieguo2=sqrt(jieguo2);
         
        //jieguo2=jieguo2;
        m=jieguo2/100;
        n=jieguo2%100;
        k=n/10;
        l=n%10;


        v_char(shuzi+m*16,1,0,0x40,0xbe)        ;
        v_char(shuzi+k*16,1,0,0x48,0xbe)        ;
//        v_char(dian,1,0,0x50,0xbe)        ;
        v_char(shuzi+l*16,1,0,0x50,0xbe)        ;
//v_char(dian+1*16,1,0,0x60,0xbe)        ;
//        v_char(dian,1,0,0x58,0xbe)        ;
//        v_char(shuzi+d*16,1,0,0x58,0xbc)        ;
//for(n=0;n<40000;n++);        */                 


}
uchar idata m,n,p,l,k,flag;
/****************************************************************/
void ck_t0() interrupt 1
{       
                   //TH0=0xfb;        //定时0.2s         ,定时中断一次为200微妙,须将判断标志位为1000次。放置标志位flagck。
        //        TL0=0x1e;
         //          TH0=0xfe;        //定时0.2s         ,定时中断一次为200微妙,须将判断标志位为1000次。放置标志位flagck。
        //        TL0=0xc8;       

        uchar df;
        df++;
        if(df==10)
        {        df=0;
        AD_init0804();
                 ad[ck]=(a-128);
                ck++;
               
                 }
          if(ck==16)
          {         
                flag=1;
                ck=0;
               

               
          //         adshuzhi();
         }
   
}       

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝