亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atmega8l sdcard.txt

?? atmega8L最小系統讀寫SD卡的程序。
?? TXT
字號:
硬件平臺:atmega8L最小系統
                    硬spi(sd卡的初始化采用了io口模擬時序,因為在實驗中發現要使用較低的速率才能穩定的初始化)
軟件開發平臺:ICC-AVR     version 6.31a
硬件配置:atmega8L    內部8m時鐘
                    sandisk 128m sd卡
 
幾個基本的子程序及其介紹:
 
1.io口模擬spi,實現數據發送,在初始化時使用
void iodatatransfer(unsigned char iodata)
 {
 unsigned char num,b;
 num=0x80;
 for (b=0;b<0x08;b++)  
     {  
    WDR();//feed the dog
  //SD_Write|=(1<<SPI_Clock);//sck=1
       SD_Write&=~(1<<SPI_Clock);//sck=0    
    if(iodata&num)
    SD_Write|=(1<<SPI_DO);//do=1
    else
    SD_Write&=~(1<<SPI_DO);//do=0
    delay_4ms();//4ms
    WDR();//feed the dog
    //SD_Write&=~(1<<SPI_Clock);//sck=0    
    SD_Write|=(1<<SPI_Clock);//sck=1
    delay_4ms();//4ms
    if(num>0x01)
    num=num>>1;
     }  
 }  
 
2.io口模擬spi,實現數據讀取,在初始化時使用
 unsigned char iodataread(void)
 {
   unsigned char data,temp,b;
   data=0;
   temp=0;
   for (b=0;b<0x08;b++)
   {
    WDR();//feed the dog  
    SD_Write&=~(1<<SPI_Clock);//sck=0 
 delay_4ms();//4ms
    WDR();//feed the dog
  
    SD_Write|=(1<<SPI_Clock);//sck=1
 temp=SD_READ;
 temp&=0x10;//to maintain the pb.4 bit(data_in)
  WDR();//feed the dog
 if(temp)
  {
  data|=0x01;  
     }
 if(b<7)
  { 
  data=data<<1;//
     }
 delay_4ms();//4ms
  WDR();//feed the dog
   }   
   return data;
 }


3.io口模擬spi,實現指令發送及讀響應,在初始化時使用 
  unsigned char iocmd(unsigned char *cmd)
 {
 unsigned temp,a,timeout;
 temp=0xff;
 timeout=0;
 // Raise chip select  -----/ss=1 
 SD_Disable();  
 WDR();//feed the dog
  
 // Send an 8 bit pulse  
 iodatatransfer(0xff);
 WDR();//feed the dog
 // Lower chip select  
 SD_Enable();
  for(a=0;a<6;a++)
  {
  iodatatransfer(*cmd++);
  WDR();
  //transfer cmd in io_mode 
  }
  while(temp==0xff)//
      {  
    WDR();//feed the dog
       temp=iodataread();  
       if(timeout++>100)  
         {  
          break;  
         }  
      } 
  WDR();//feed the dog
 return(temp);//the respone of the byte_write_operation      
 }
 
4.硬spi讀數據
 unsigned char Read_Byte_SD(void)  
{  
 char Byte;
   //SD_Enable();
 SPDR=0xff;  
 while(!(SPSR&(1<<SPIF)));//  
 Byte=SPDR; 
 return(Byte);  
} 
 
5.硬spi寫數據
void Write_Byte_SD(char Byte)  
{  
//SD_Enable();
 SPDR=Byte;  
 while(!(SPSR&(1<<SPIF)));  
}  
 
6.硬spi寫指令及讀響應
unsigned char Write_Command_SD(char *CMD)  
{  
 unsigned char a;  
 unsigned char tmp=0xff;  
 unsigned char Timeout=0;  
 // Raise chip select  -----/ss=1 
 SD_Disable();  
 // Send an 8 bit pulse  
 Write_Byte_SD(0xFF);  
  
 // Lower chip select  
 SD_Enable();  
 //Send the 6 byte command  
 for(a=0;a<0x06;a++)  
    {  
     Write_Byte_SD(*CMD++);  
    }  
 //Wait for the response  
 while(tmp==0xff)//
      {  
       tmp=Read_Byte_SD();  
       if(Timeout++>100)  
         {  
          break;  
         }  
      }  
 //for some reason we need to delay here  
//delay_1ms(); 
 return(tmp);//the respone of the byte_write_operation  
} 
 
7.初始化
unsigned char SDInit(void)  
{  
 unsigned char a,b,retry,erroetoken;  
 unsigned char CMD[]={0x40,0x00,0x00,0x00,0x00,0x95};//cmd0
 // Set certain pins to inputs and others to outputs  
 // Only SPI_DI (data in) is an input  
 //SD_Direction_REG==ddrb
 SD_Direction_REG&=~(1<<SPI_DI);  
 SD_Direction_REG|=(1<<SPI_Clock);  
 SD_Direction_REG|=(1<<SPI_DO);  
 SD_Direction_REG|=(1<<SD_Chip_Select);  
 //SD_Direction_REG|=(1<<SPI_SS);  
 SD_Disable();
 //We need to wait for the SD_Direction_REG to be ready  
 for(a=0;a<200;a++)  
    {  
  WDR();//feed the dog
     nop(); 
  nop();
    };  
 delay_1ms();
 
 SD_Disable();//   
 iodatatransfer(0xff);
 WDR();//feed the dog
 //return 0;/////////// 
  
 retry=0;
 SD_Enable();
 while((erroetoken=iocmd(CMD))!=0x01)//
 { 
 WDR();
 //serial(erroetoken); 
 if(retry++>200)  
 { //fail and return
 return 1;  
 }  
 }  
  //return 0;///////////
  
//Send the 2nd command  
 retry=0;  
 CMD[0]=0x41;  
 CMD[5]=0xFF;  
while(erroetoken=iocmd(CMD)!=0x00)  
      {  
    WDR();
       if (retry++>200)  
          { 
          return 2;  
          }  
       }      
    
 //Set the SPI bus to full speed 
 SPCR=0x50; 
  SPSR|=0x01;
 //Raise Chip Select  
 SD_Disable();  
 return 0;  
}  
 
8.設置每次讀的字節數
char SD_set_length(unsigned int length) 
{
 unsigned char retry; 
 //Command to set the block length; 
 char CMD[]={0x50,0x00,0x00,0x00,0x00,0xFF}; //cmd16 
  
 CMD[3]=((length&0xFF00)>>8);// 
 CMD[4]= (length&0x00FF);  
 while(Write_Command_SD(CMD)!=0)//  
      {  
    WDR(); 
       if (retry++>200)  
          {  
          return 1;  
          }  
       } 
 SD_Disable(); 
 return 0; 
} 

9.write 512 bytes to a given sector from a  Byte_byte_long  Buffer
unsigned char SD_write_sector(unsigned long addr,unsigned char *Buffer,unsigned int Bytes) 
{ 
 unsigned int a; 
 unsigned char retry,temp; 
 //Command to read a block; 
 char CMD[]={0x58,0x00,0x00,0x00,0x00,0xFF};//cmd24
 CMD[1]=((addr&0xFF000000)>>24);  
 CMD[2]=((addr&0x00FF0000)>>16);  
 CMD[3]=((addr&0x0000FF00)>>8); 
 CMD[4]=(addr&0x000000FF); 
  //Send the write command  
   
 while(Write_Command_SD(CMD)!=0)  
      {  
       if (retry++>50)  
          {  
          return 1;  
          }  
       }  
 //Send the start byte  
 Write_Byte_SD(0xfe);                                                                           
 //Read off all the bytes in the block  
 for(a=0;a<Bytes;++a)  
 {  
 Write_Byte_SD(*Buffer++);
 }   
 while((temp=Read_Byte_SD())&0x10);
 //serial(temp);//according to p101 of datasheet
 if((temp&0x0f)!=0x05)
 return 2;
 //Read CRC byte  
 while(SD_READ&0x10);//detect if data_in pb.4 is still busy(high) 
   
 // Set SD_Chip_Select to high  
 SD_Disable();  
 //SEI(); //re-enable interrupts  
 return 0;  
 
}

unsigned char SD_read_sector(unsigned long addr,unsigned char *Buffer,unsigned int Bytes)  
{  
 
 unsigned int a; 
 unsigned char retry; 
 //Command to read a block; 
 char CMD[]={0x51,0x00,0x00,0x00,0x00,0xFF};//cmd17
 //CLI(); //disable all interrupts
 //addr = addr << 9; //addr = addr * 512  
 CMD[1]=((addr&0xFF000000)>>24);  
 CMD[2]=((addr&0x00FF0000)>>16);  
 CMD[3]=((addr&0x0000FF00)>>8); 
 CMD[4]=(addr&0x000000FF); 
  //Send the read command  
   
 while(Write_Command_SD(CMD)!=0)  
      {  
    WDR();//feed the dog
       if (retry++>200)  
          {  
          return 1;  
          }  
       }  
 //Send the start byte  
  while(Read_Byte_SD()!=0xfe)  
  {
  WDR();//feed the dog
  }                                                                             
 //Read off all the bytes in the block  
 for(a=0;a<Bytes;++a)  
 {  
  WDR();//feed the dog
 *Buffer=Read_Byte_SD();  
 //serial(*Buffer); 
 Buffer++; 
 }   
 //Read CRC byte  
 Read_Byte_SD();  
 Read_Byte_SD();  
   
 // Set SD_Chip_Select to high  
 SD_Disable();  
 //SEI(); //re-enable interrupts  
 return 0;  
}  
/*
//read xx bytes no matter of misalignment!!
*/
unsigned char read_antimisaliment(unsigned long addr_temp,unsigned char *p_buffer, unsigned int length)
{
  unsigned int _length=0x0000;
  SD_Enable(); 
  while(SD_read_sector(addr_temp,p_buffer,length))
  {
  SD_Enable();//
  length-=0x0001;//to find a suuitable length to avoid misalignment
  _length+=0x0001;// _length+length==xx
  SD_set_length(length);
  }  
  ///
  if(_length==0x0000)
  {
  return 0;
  }
  ///
  addr_temp+=length;
  SD_Enable();//
  SD_set_length(_length); 
  SD_Enable();//
  while(SD_read_sector(addr_temp,p_buffer,_length))
  {
  SD_Enable();
  }
  SD_Enable();//
  SD_set_length(length+_length);//to read the rest bytes of the xx bytes
  return 0;
  /////////////////
 } 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91黄色免费观看| 在线视频欧美精品| 欧美成人vps| 国产精品一品视频| 亚洲老妇xxxxxx| 精品久久人人做人人爱| 日韩欧美一区二区在线视频| 美女免费视频一区| 亚洲丝袜自拍清纯另类| 欧美一区二区三区免费观看视频 | 一区二区三区日韩欧美| 在线播放91灌醉迷j高跟美女| 蜜桃久久久久久| 久久99久久久久| 亚洲免费在线看| 亚洲国产精品v| 精品国产免费一区二区三区香蕉| 欧美色视频在线观看| 丁香六月久久综合狠狠色| 人人超碰91尤物精品国产| 亚洲一区二区三区四区在线观看 | 99精品欧美一区二区三区综合在线| 视频一区免费在线观看| 亚洲伦在线观看| 午夜精品久久久久久久99水蜜桃| 日韩一区有码在线| 亚洲精品国产精品乱码不99| 一区二区在线观看视频| 日韩精品久久理论片| 韩国精品久久久| 久久99国内精品| 成人v精品蜜桃久久一区| 国产精品自拍一区| 日本道在线观看一区二区| 777精品伊人久久久久大香线蕉| 久久青草欧美一区二区三区| 欧美一二三四在线| 亚洲欧洲精品成人久久奇米网| 午夜伦理一区二区| 成人app网站| 精品久久久久久久人人人人传媒| 亚洲欧美在线视频观看| 美脚の诱脚舐め脚责91| 在线看国产一区二区| 久久久久88色偷偷免费| 三级在线观看一区二区| 成人av免费观看| 日韩一级免费观看| 亚洲自拍与偷拍| 不卡一二三区首页| 久久综合色播五月| 中文字幕在线观看不卡| 麻豆精品视频在线观看免费| 日韩精品一区二区在线观看| 91麻豆精品久久久久蜜臀| 亚洲欧美日韩久久| 韩国三级中文字幕hd久久精品| 91丨porny丨在线| www.av精品| 欧洲视频一区二区| 国产精品欧美极品| 洋洋成人永久网站入口| 国产一区二区女| 99久久国产综合精品女不卡| 精品国产人成亚洲区| 首页国产欧美久久| 欧美日韩在线播放| 亚洲国产精品尤物yw在线观看| 青青草国产成人99久久| 欧美人成免费网站| 精品国产乱码久久久久久老虎| 五月天激情小说综合| 在线精品视频小说1| 伊人色综合久久天天人手人婷| 91色|porny| 国产精品高潮久久久久无| 午夜精品福利一区二区三区蜜桃| 色婷婷国产精品综合在线观看| 欧美刺激午夜性久久久久久久| 日韩电影在线观看电影| 成人性生交大合| 国产精品麻豆久久久| 成人免费视频播放| 亚洲视频精选在线| 欧美三级资源在线| 日韩av电影天堂| 精品国产一区二区三区不卡 | 久久色中文字幕| 韩国成人在线视频| 久久久美女毛片| 成人免费视频网站在线观看| 国产精品久久久久久亚洲伦| 91亚洲大成网污www| 亚洲高清视频在线| 欧美成人bangbros| 成人久久久精品乱码一区二区三区| 亚洲欧洲另类国产综合| 欧美午夜精品一区| 国产精品久久免费看| 91污在线观看| 日韩国产欧美在线视频| 久久久777精品电影网影网| 日韩va亚洲va欧美va久久| 亚洲精品一区二区三区影院| 99精品视频在线观看| 天天综合网 天天综合色| 日韩欧美一区二区三区在线| 成人一区二区三区中文字幕| 亚洲一卡二卡三卡四卡无卡久久| 欧美高清性hdvideosex| 成人在线一区二区三区| 午夜精品久久久| 中文字幕一区二区三区色视频| 欧美精品高清视频| 高清不卡一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 91在线丨porny丨国产| 另类综合日韩欧美亚洲| 亚洲精品菠萝久久久久久久| 久久亚洲捆绑美女| 欧美美女激情18p| 不卡视频一二三四| 久久成人综合网| 亚洲综合色区另类av| 国产欧美日韩三区| 9色porny自拍视频一区二区| 麻豆精品一二三| 午夜精品久久久久久久久久久| 欧美激情一区在线观看| 日韩欧美一级在线播放| 欧美综合视频在线观看| 盗摄精品av一区二区三区| 精品一区二区在线视频| 亚洲成人黄色小说| 精品国精品自拍自在线| 欧美猛男男办公室激情| 色综合久久综合网欧美综合网| 国产成人一区二区精品非洲| 自拍偷拍欧美激情| 中文字幕 久热精品 视频在线 | 中文字幕欧美一| 国产日韩一级二级三级| 久久综合色婷婷| 久久日韩粉嫩一区二区三区 | 国产酒店精品激情| 精品无人码麻豆乱码1区2区| 青青草国产成人av片免费 | 2023国产精品| 欧美α欧美αv大片| 日韩欧美一级二级三级| 欧美一区二区观看视频| 3atv一区二区三区| 这里只有精品视频在线观看| 91麻豆精品国产91久久久久| 91麻豆精品国产91久久久久| 日韩一区二区三区四区五区六区| 制服.丝袜.亚洲.中文.综合| 日韩欧美一级片| 久久综合久久综合久久综合| 国产日韩欧美一区二区三区综合| 欧美激情中文字幕一区二区| 国产精品天干天干在线综合| 国产精品动漫网站| 一区二区三区四区五区视频在线观看| 一区二区在线免费观看| 五月天精品一区二区三区| 久久不见久久见免费视频7| 国产一区二区三区蝌蚪| 国产91丝袜在线播放0| 色综合天天综合网天天狠天天| 水蜜桃久久夜色精品一区的特点 | 国产欧美日韩另类视频免费观看| 国产欧美精品区一区二区三区| 国产精品每日更新| 亚洲成人www| 国产综合色在线视频区| 91美女蜜桃在线| 91精品国产综合久久久久| 久久久精品日韩欧美| 亚洲人精品一区| 日本少妇一区二区| 成人精品视频一区二区三区尤物| 欧美在线观看视频一区二区三区| 欧美一区二区三区性视频| 国产精品青草综合久久久久99| 一区二区三区四区在线| 国产呦精品一区二区三区网站| 97久久精品人人爽人人爽蜜臀| 在线不卡中文字幕播放| 欧美激情一区二区三区全黄| 亚洲v日本v欧美v久久精品| 国产精品12区| 欧美人与禽zozo性伦| 国产精品久久免费看| 美女视频黄 久久| 欧美在线观看你懂的| 久久久久亚洲蜜桃| 日韩福利视频导航| 色综合久久中文字幕综合网| 久久美女艺术照精彩视频福利播放|