导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→数据采集存储,求助[yyyzzz]

 *第39445篇: 数据采集存储,求助

  
楼 主:yyyzzz 2006年4月16日09:09
 数据采集存储,求助
大家好,我是新手。有问题请教大家啊!
我要做一个数据采集存储的东西,程序编完了,可是运行起来不对。请大家帮我看一下!问题处在那儿?我用的单片机是C8051F021,AD是内部AD,存储器是AT45DB321C
  void SPI0_Write(unsigned char ch,unsigned char N)       //SPI向AT45DB081B写一个字节
           {  
        int i;                                     
              CS1     = 0;
     //for(i=0;i  <20;i++);                                       //片选信号使能  
              SPIF    = 0;                                      //准备输出数据
              SPI0DAT = ch;                                    //初始化输出,提供SCK信号,向器件写一个字节
              while(TXBSY==0);                               //等待一个字节数据输出完毕
              //for(i=0;i  <100;i++);
              if ( N==0x01 )
              {CS1  = 1;}                          //通讯结束
             }
      
              WDTCN = 0xde;                //禁止看门狗定时器       
              WDTCN = 0xad;
             
     SYSCLK_Int();
     PORT_Int();
              SPI0_Init();
     ADC_Int();         
              REF0CN=0x03;                  //允许内部基准点压
              for(i=0;i  <256;i++);           //延时
              xr=0;                            //以下是FLASH擦除
              k=0x1000;      
            for(n=0;n  <64;n++)
             {      pwrite =  k;           
                    FLSCL |= 0x01;                            
                    PSCTL = 0x03;                       // MOVX writes erase FLASH page     
                    *pwrite = 0;                        // initiate page erase
                    PSCTL = 0;                          // MOVX writes target XRAM          
                    FLSCL &= ~0x01;                     // disable FLASH writes/erases from user software         
                    k+=0x0200;
               }                             //以上是片内FLASH擦除 
      //CS1=0;                         
            EMI0CF=0x06;
           // P1 =0xFF; 
                  //允许输入
            //CS1=0;
     /*for(i=0;i  <10000;i++)
     {//CS1=0;
      SPI0_Write(0x84,0x01);
   for(n=0;n  <2000;n++);
   CS1=1;
   for(n=0;n  <200;n++);
     }*/
            CS1=1;
   for(i=0;i  <100;i++);
          for(i=0;i  <5;i++)
     {             
               //CS1=0;
         //for(j=0;j  <20;j++);
         
    /*ADC1CN &= 0xdf;
                ADC1CN |= 0x10;
      while(ADC1  <=0x90)             //预采集
       { ADC1CN &= 0xdf;
                  ADC1CN |= 0x10;
                  while(!(ADC1CN&0x20));           
      }*/
      //CS1=0;
                  //for(j=0;j  <40;j++); 
                  SPI0_Write(0x84,0x00);        //向片外FLASH写指令
                  SPI0_Write(0x00,0x00);           //以下三行是写初始地址
                  SPI0_Write(0x00,0x00);
                  SPI0_Write(0x00,0x00);
      for(j=0;j  <10;j++)
   for(r=0;r  <528;r++)           //以下是写buffer1
      {   
                  ADC1CN &= 0xdf;                  //AD转换器清标志位
                  ADC1CN |= 0x10;                 //AD转换开始
                  while(!(ADC1CN&0x20));          //等待采集结束         
                  ch=ADC1;               
      //ch=0x50;                                               
      SPI0_Write(0x00,0x01);        //写数据
      while(TXBSY==0);
                  //for(n=0;n  <1000;n++);      //等待     
     
      }
      //CS1=1;           //以上是写buffer1
                  l=0x00;
      m=0x04;
      p=0x00;
      SPI0_Write(0x88,0x00);    //写指令                                                                                                                                                        
                  SPI0_Write(l,0x00);    //写地址
      SPI0_Write(m,0x00);
      SPI0_Write(p,0x01);
   for(i=0;i  <528;i++)                    //以下是从buffer1向主存储器写数据                                      
              {    //CS1=0;
          for(j=0;j  <20;j++);       
       SPI0_Write(ch,0x01); //写数据
                   //while(TXBSY==0);
       //for(j=0;j  <800;j++);  //等待                                                                        
                   //xr++;
     //CS1=1;             
       
       /*if (m  <0x210)     //增地址
       {p=0x00;
       m++;}
       else if (l  <0x210)
       {
       p=0x00;
       m=0x00;
       l++;}*/
       for(j=0;j  <800;j++);
       } 
     


  
2楼:yyyzzz 2006年4月16日09:12
 说明
上面是子程序,下面是主程序

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:有没人知道PM20CVL060R模块的驱动电路

[下一篇主题]:毕业设计