⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sck.c

📁 AT45DBFlash的数据存储的lizi。
💻 C
字号:
#include <C8051F020.h>                 // SFR declarations

  
           sfr16 DP       = 0x82;                 // data pointer
           sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
           sfr16 TMR3     = 0x94;                 // Timer3 counter
           sfr16 ADC0     = 0xbe;                 // ADC0 data
           sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
           sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
           sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
           sfr16 T2       = 0xcc;                 // Timer2
           sfr16 RCAP4    = 0xe4;                 // Timer4 capture/reload
           sfr16 T4       = 0xf4;                 // Timer4
           sfr16 DAC0     = 0xd2;                 // DAC0 data
           sfr16 DAC1     = 0xd5;                 // DAC1 data
           sbit  P_0 = P0^0; 
           sbit  P_1 = P0^1;                         // green LED: '1' = ON; '0' = OFF
           sbit  P_2 = P0^2;
		   sbit  RDY = P2^0;
           sbit  CS1 = P2^3;
		   sbit  CS2 = P2^4;
		   sbit  CS3 = P2^5;
           sbit  P_4 = P0^4;
           sbit  P_5 = P0^5;
           sbit  P_6 = P0^6;
          //sbit  P_2 = P0^2;
          //sbit  P_2 = P0^2;
          

		 void SYSCLK_Int(void)
		  {
		    int i;
		    OSCICN|=0x17;                 //内部晶振初始化			                                 
            for(i=0;i<256;i++);
            for(i=0;i<256;i++);
			/* OSCXCN=0x47;                //启动外部晶振
             for(i=0;i<256;i++);
             for(i=0;i<256;i++);
			 for(i=0;i<256;i++);
             while(!(OSCXCN&0x80));
              OSCICN=0x88;*/
         }


      void PORT_Int(void)
		  {	
		    XBR2=0x40;
		    XBR0=0x02;
			P_1=1;
			P0MDOUT=0x05;                   //使用SPI串行总线			 
            P2MDOUT=0x18;
		  }
      void SPI0_Init(void)          //SPI0初始化
		  {  
		    SPI0CFG = 0x47;
            SPI0CFG&= 0xBF;
			SPI0CN  = 0x03;
			SPI0CKR = 0x00;
		  }
   
         void ADC_Int(void)
		  {
		    ADC1CN=0x80;				//允许ADC1
            ADC1CF=0x19;                //转换时钟
            AMX1SL=0x00;
		  }

       void SPI0_Write(unsigned char ch,unsigned char N)       //SPI向AT45DB321C写一个字节
           {  
              SPIF    = 0;                 //准备输出数据
              SPI0DAT = ch;              //初始化输出,提供SCK信号,向器件写一个字节
              while(TXBSY==1);            //等待一个字节数据输出完毕
              if(N==0x01)
              {CS1=1;}                                 //通讯结束
             }
	unsigned char SPI0_Read(unsigned char N)          //读一个字节
		  {  //int i;
			SPIF  =0;
			//RDY   =0;
            SPI0DAT=0;
			while(SPIF==0);
			if(N==0x01)
		    {CS1=1;}
			return SPI0DAT;
			//return 0x50;
		  }
    void main (void) 
	       {
          	   unsigned char xdata * idata pwrite;                 //定义参数
          	   unsigned int i,j,n;
               unsigned char xdata *k;
               unsigned char xdata * xr;
			   //unsigned char ch,l,m,p;
               unsigned char chr,da;
      
              WDTCN = 0xde;                //禁止看门狗定时器       
              WDTCN = 0xad;
             
			  SYSCLK_Int();
			  PORT_Int();
              SPI0_Init();
              ADC_Int();			      
              REF0CN=0x03;                  //允许内部基准点压
              for(i=0;i<256;i++);           //延时
			  pwrite = k;                    // initialize FLASH write pointer        
              FLSCL |= 0x01;                     // enable FLASH writes/erases from                                           
              PSCTL = 0x01; 
			  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;
               } 
                  
			      //chr=0x55;
                  CS1=0;
				  for(i=0;i<2;i++);
                  SPI0_Write(0x84,0x00);        //向片外FLASH写指令
                  SPI0_Write(0x00,0x00);           //以下三行是写初始地址
                  SPI0_Write(0x00,0x00);
                  SPI0_Write(0x00,0x00);
				  //SPI0_Write(chr,0x01);
             for(i=0;i<528;i++)
		    {  
			   ADC1CN &= 0xdf;                  //AD转换器清标志位
               ADC1CN |= 0x10;                 //AD转换开始
               while(!(ADC1CN&0x20));          //等待采集结束	
               chr=ADC1;
		       SPI0_Write(chr,0x00);
		      }
			      CS1=1;
			      for(j=0;j<1000;j++);
				  CS1=0;
                  xr=0;
				  for(i=0;i<2;i++);
                  SPI0_Write(0xD4,0x00);
				  SPI0_Write(0x00,0x00);
				  SPI0_Write(0x00,0x00);
				  SPI0_Write(0x00,0x00);
				  SPI0_Write(0x00,0x00);
			      //SPI0_Read(0x00);
				  for(j=0;j<528;j++)
				 { 
                  da=SPI0_Read(0x00);
				  
                // *((char xdata *)xr)=da;
				 *((unsigned char xdata *)xr)=da; 
				 xr++;
				 }
				  CS1=1;
                  k=0x1000;
				  pwrite = k;                    // initialize FLASH write pointer        
                  FLSCL|= 0x01;                      // enable FLASH writes/erases from                                          
                  PSCTL = 0x01; 
				  xr=0;
				  for(n=0;n<528;n++)
				 {                  				  
                 *pwrite =*((unsigned char xdata *)xr);                // copy byte
				  xr++;                       // advance pointers
                  pwrite++;
                  k++; 
				  }
				  //CS1=1;
				//for(i=0;i<20;i++);                              //以上时采集数据  
                PSCTL = 0x00;                       // MOVX writes target XRAM
                FLSCL &= ~0x01;
				  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -