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

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

?? sd.lst

?? C51上實現SD卡程序,是FAT32文件系統
?? LST
字號:
C51 COMPILER V7.50   SD                                                                    07/13/2005 10:21:50 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SD
OBJECT MODULE PLACED IN sd.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE sd.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //#define __SD
   2          #include "sd.h"
   3          //#undef __SD
   4          
   5          unsigned char SDCommand( unsigned char c1, 
   6                                   unsigned char c2, 
   7                                   unsigned char c3, 
   8                                   unsigned char c4, 
   9                                   unsigned char c5)
  10          {
  11   1      
  12   1          SD_XCS = SD_NOT_SELECTED; //put SD on-line.
  13   1       
  14   1          // Provide clock edges before and after asserting SD CS
  15   1          SPI8Clocks(8); 
  16   1          SD_XCS = SD_SELECTED;
  17   1          SPI8Clocks(8);
  18   1        
  19   1         // The bus should be stable high now
  20   1          if (SPI_RESULT_BYTE != 0xff)
  21   1              {
  22   2              SD_XCS = SD_NOT_SELECTED; 
  23   2              return LINE_BUSY; 
  24   2          }
  25   1      
  26   1          // Send the SD command
  27   1          SPIPutCharWithoutWaiting(c1);
  28   1          SPIPutChar(c2);
  29   1          SPIPutChar(c3);
  30   1          SPIPutChar(c4);
  31   1          SPIPutChar(c5);
  32   1          SPIPutChar(0x95);     /* Valid CRC for init, then don't care */
  33   1          SPIWait();
  34   1         /* Now ok to use c1..c5 as temporaries (dirty but kool) */
  35   1       
  36   1         // Wait for R1 style response (bit 7 low) from SD
  37   1      
  38   1          c1=100;
  39   1          while((c1--)&&((c2=SPIGetChar())&0x80)) //wait for R1 or timeout
  40   1          ;
  41   1      
  42   1          return c2; //return the R1 response
  43   1      }
  44          
  45          
  46          unsigned char SDWaitForData()
  47          {
  48   1          unsigned char c;
  49   1           // Wait until something else than 0xff is read from the bus
  50   1          do 
  51   1              {
  52   2              c=SPIGetChar();
  53   2              } while ((c == 0xff));
  54   1       
  55   1         
C51 COMPILER V7.50   SD                                                                    07/13/2005 10:21:50 PAGE 2   

  56   1         // desired 0xFE data start token? 
  57   1          if (c != 0xfe)
  58   1              {
  59   2                      /*
  60   2              SPI8Clocks(200); 
  61   2              SPI8Clocks(200);
  62   2              SPI8Clocks(200);
  63   2                      */
  64   2                  SD_XCS = SD_NOT_SELECTED; //Drop SD offline now.
  65   2              return c;
  66   2              }
  67   1              return DATA_COMING;
  68   1      }
  69           
  70           
  71          void SDGetData(unsigned int amountOctets)
  72          {
  73   1          while (amountOctets--)
  74   1              {
  75   2              *dataBufPtr++=SPIGetChar();
  76   2          }
  77   1      }
  78          
  79          void PerformBlockRead()
  80          {
  81   1          unsigned int i;
  82   1          for(i=0;i<512;i++)
  83   1              {
  84   2               SPIPutCharWithoutWaiting(0xff);
  85   2               SPIWait();
  86   2               *dataBufPtr++=SPI_RESULT_BYTE;
  87   2          }
  88   1      }
  89          
  90          unsigned char SeekSector(unsigned char cmd_sn,unsigned long sectorN)
  91          {
  92   1          unsigned char c;
  93   1              unsigned char * address;
  94   1              address =(unsigned char *)&sectorN;
  95   1          do
  96   1              {
  97   2              c=SDCommand(cmd_sn,address[2],address[1],address[0], 0);
  98   2              address[1] = address[1] >> 1; //convert back to blocks
  99   2       
 100   2           //if SD returs "nothing" (0xff), toggle chip select and retry
 101   2              if (c==0xff)
 102   2                      {
 103   3                  RebootSD();
 104   3                      }
 105   2              if (c==LINE_BUSY)
 106   2                      { //SD says "LINE_BUSY"
 107   3                  c=0xff; //try again
 108   3                      }
 109   2              }while(c==0xff); //repeat until we get signal from SD.
 110   1          SD_XCS = SD_NOT_SELECTED;
 111   1          return 0; //ok return
 112   1      }
 113          
 114          
 115          /* Wait for data start token and read 512 bytes to global buffer */
 116          unsigned char ReadSector()
 117          {
C51 COMPILER V7.50   SD                                                                    07/13/2005 10:21:50 PAGE 3   

 118   1          SD_XCS = SD_SELECTED;
 119   1          if(SDWaitForData()==DATA_COMING)
 120   1              PerformBlockRead();
 121   1              else return ERR; 
 122   1         /* generate SPI clock edges to finish up the command */
 123   1       
 124   1          SPI8Clocks(4); //Send 8*4=32 clocks (4 ff's) to SD to be nice.
 125   1          SD_XCS = SD_NOT_SELECTED;
 126   1          SPI8Clocks(4); //Again, give the poor SD some clocks, it likes them.  
 127   1          return 0; //ok return
 128   1      }
 129          
 130          unsigned char ReadDiskSector  (  unsigned long  sectorN   )   
 131          {
 132   1          if (SeekSector(CMD17,sectorN)) return ERR; //seek error
 133   1          if (ReadSector())
 134   1              {
 135   2              return ERR; //read error
 136   2          }
 137   1           return 0; /* All OK return */
 138   1      }
 139          
 140           
 141          
 142          
 143          unsigned char WriteSector()
 144          {
 145   1               unsigned c1;
 146   1               unsigned short i;
 147   1               SPIPutCharWithoutWaiting(START_BLOCK_TOKEN);
 148   1               for(i=0;i<512;i++)
 149   1           {
 150   2                       SPIPutChar(dataBufPtr[i]);
 151   2               }
 152   1               SPIWait();
 153   1           c1=SPIGetChar();
 154   1               if(c1==DATA_REC_NO_ERR)
 155   1               return 0;
 156   1               else return c1;
 157   1      }                
 158              
 159          unsigned char WriteDiskSector(unsigned long sectorN)
 160          {
 161   1              if (SeekSector(CMD24,sectorN)) return ERR; //seek error
 162   1          if (WriteSector())
 163   1              {
 164   2              return ERR; //read error
 165   2          }
 166   1              SD_XCS = SD_NOT_SELECTED;
 167   1          SPI8Clocks(4);
 168   1           return 0; /* All OK return */
 169   1      }
 170          
 171          unsigned char GetCID()
 172          {
 173   1          if (SDCommand(0x4a,0,0,0,0)&0xfe)
 174   1          return 4; /* no storage info */
 175   1          SDWaitForData();
 176   1          SDGetData(30);
 177   1      }
 178          
 179          unsigned char RebootSD()
C51 COMPILER V7.50   SD                                                                    07/13/2005 10:21:50 PAGE 4   

 180          {
 181   1          unsigned char c;
 182   1              if(SDCommand(0x40,0,0,0,0)==0x01)
 183   1              {
 184   2                      SPI8Clocks(2);
 185   2                      SDCommand(0x7B,0,0,0,0);
 186   2              }
 187   1          else return ERR;
 188   1              c=255;
 189   1          while ((c--)&&(SDCommand(0x41,0,0,0,16)))
 190   1              {
 191   2              Delay(10);
 192   2              if (c==1)
 193   2              return TIMEOUT; /* Not able to power up SD */
 194   2          }
 195   1          return 0;
 196   1      }
 197          
 198          unsigned char InitSD()
 199          {
 200   1          unsigned char c;
 201   1              SD_XCS = SD_NOT_SELECTED;
 202   1             /* Allow SD some time and clock cycles to reset */
 203   1          for (c=0; c<100; c++)
 204   1              {    
 205   2              SPIPutCharWithoutWaiting(0xff);
 206   2              SPIWait();
 207   2              }
 208   1              SD_XCS = SD_SELECTED;
 209   1          Delay(20);
 210   1          if (RebootSD()) return 1; //not able to powerup;
 211   1         //An existing SD card should be able to respond now.
 212   1       
 213   1          GetCID();
 214   1         
 215   1         /* Set Block Size of 512 bytes (2 == 512 << 8) */
 216   1          if ((c=SDCommand(0x50,0,0,2,0))) return c|0x80; 
 217   1         
 218   1          SD_XCS = SD_NOT_SELECTED;
 219   1          SPIPutCharWithoutWaiting(0xff);
 220   1          for (c=0; c<100; c++)
 221   1              {
 222   2              SPIPutChar(0xff);
 223   2          }
 224   1          SPIWait();  
 225   1      }
 226          
 227          void SPI8Clocks  (  unsigned char  nClocks   )   
 228          {
 229   1          while (nClocks--)
 230   1              {
 231   2          SPIPutCharWithoutWaiting(0xff);
 232   2          SPIWait();
 233   2          }
 234   1      }
 235          
 236          unsigned char SPIGetChar  (void)   
 237          {
 238   1          SPIPutCharWithoutWaiting(0xff); /* send 0xff */
 239   1          SPIWait(); /* wait for the byte to transfer */
 240   1          return SPI_RESULT_BYTE; /* Return the received byte */
 241   1      }
C51 COMPILER V7.50   SD                                                                    07/13/2005 10:21:50 PAGE 5   

 242          
 243          void Delay(unsigned short i)
 244          {
 245   1         while(--i) ;
 246   1      }
 247          
 248          
 249          
 250          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    708    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      26
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲二区视频在线| 在线一区二区观看| 97久久超碰国产精品| 欧美日韩成人综合天天影院 | 欧美精品第一页| 国产亚洲视频系列| 日韩电影在线一区二区三区| 成人高清伦理免费影院在线观看| 在线不卡中文字幕播放| 亚洲嫩草精品久久| 国产成人精品综合在线观看| 91精品黄色片免费大全| 亚洲欧美激情视频在线观看一区二区三区| 久久成人羞羞网站| 精品视频全国免费看| 一区二区三区在线免费| 成人免费看的视频| 午夜亚洲国产au精品一区二区| 丁香激情综合国产| 久久久久亚洲蜜桃| 韩国精品主播一区二区在线观看 | 综合自拍亚洲综合图不卡区| 精品一区二区三区免费| 欧美疯狂性受xxxxx喷水图片| 国产·精品毛片| aaa欧美日韩| 午夜不卡在线视频| 欧美xxxxx裸体时装秀| 奇米一区二区三区av| 26uuu久久综合| 日韩午夜激情av| 欧美日韩免费一区二区三区| 国产露脸91国语对白| 亚洲欧美福利一区二区| 亚洲成人一二三| 99综合电影在线视频| 中文字幕国产一区二区| 国产精品综合一区二区三区| 亚洲精品在线一区二区| 狠狠色丁香久久婷婷综合_中| 日韩久久精品一区| 国产在线精品一区在线观看麻豆| 精品久久五月天| 国产在线精品一区二区不卡了 | 免费av成人在线| 日韩欧美激情四射| 国产尤物一区二区| 国产精品国产自产拍高清av| 99麻豆久久久国产精品免费优播| **欧美大码日韩| 欧美日韩国产综合久久| 麻豆精品在线视频| 久久综合色8888| 成人黄动漫网站免费app| 亚洲黄色av一区| 这里只有精品99re| 国产精品亚洲人在线观看| 国产精品久久久久aaaa樱花| 91福利小视频| 老司机精品视频导航| 欧美激情一区二区三区蜜桃视频| 97国产一区二区| 人人狠狠综合久久亚洲| 欧美韩国日本综合| 欧美日韩国产在线播放网站| 韩国女主播一区| 亚洲亚洲人成综合网络| 欧美精品一区二区三区很污很色的 | 国产精品69久久久久水密桃| 国产精品久久久一本精品| 欧美性生活一区| 国产剧情在线观看一区二区| 亚洲激情图片一区| 日韩精品一区二区三区在线观看 | 午夜精品免费在线观看| 久久精品人人爽人人爽| 在线观看成人小视频| 韩日精品视频一区| 亚洲成人动漫在线免费观看| 亚洲国产精品激情在线观看| 欧美日韩成人在线| 一本到不卡免费一区二区| 精品一区二区三区免费毛片爱| 一区二区三区丝袜| 久久精品网站免费观看| 91精品啪在线观看国产60岁| 91视频观看视频| 国产乱人伦精品一区二区在线观看| 亚洲一区中文在线| 国产精品少妇自拍| 26uuu色噜噜精品一区二区| 欧美网站大全在线观看| 99国产精品国产精品久久| 狠狠色综合色综合网络| 视频一区视频二区中文| 一区二区三区在线视频免费观看 | 亚洲h在线观看| 亚洲人成在线播放网站岛国| 久久久久高清精品| 欧美精品一区二区三区一线天视频| 欧美日韩国产一级片| 在线观看视频一区| 99r国产精品| 99视频精品免费视频| 福利一区二区在线观看| 国产一区二区毛片| 国产综合久久久久久久久久久久| 性欧美大战久久久久久久久| 亚洲图片欧美一区| 亚洲国产aⅴ天堂久久| 亚洲综合免费观看高清完整版| 亚洲欧美一区二区三区久本道91| 国产精品久久久久久户外露出| 国产丝袜欧美中文另类| 欧美精品乱码久久久久久按摩| 欧美日韩国产a| 日本韩国精品在线| 色综合天天综合网天天看片| 国产高清一区日本| 日欧美一区二区| 精品女同一区二区| 91亚洲精品乱码久久久久久蜜桃| 国产激情91久久精品导航| 午夜欧美2019年伦理| 久久只精品国产| 中文字幕在线不卡视频| 亚洲国产日韩一级| 亚洲无人区一区| 亚洲h动漫在线| 麻豆高清免费国产一区| 国产乱码精品1区2区3区| 国产成人免费在线观看不卡| av不卡在线观看| 日本精品裸体写真集在线观看| 欧美午夜精品一区| 日韩一区二区三区电影在线观看| 精品国产伦一区二区三区观看体验| www欧美成人18+| 国产精品久久久久aaaa| 亚洲午夜一区二区三区| 久久精品国产在热久久| 国产盗摄一区二区| 国内成+人亚洲+欧美+综合在线| 欧美成人性福生活免费看| 国产色产综合色产在线视频| 1000精品久久久久久久久| 性做久久久久久久久| 国产精品99久久久久久宅男| 色综合久久六月婷婷中文字幕| 欧美日韩精品三区| 久久久久久久久久久久久久久99| 日韩毛片一二三区| 六月丁香婷婷色狠狠久久| 成人黄色在线视频| 欧美精品vⅰdeose4hd| 亚洲国产成人自拍| 日韩精品每日更新| jizzjizzjizz欧美| 日韩欧美在线观看一区二区三区| 国产精品久久看| 久久激情综合网| 欧美午夜不卡在线观看免费| 国产三级精品在线| 日韩电影在线免费| 色婷婷国产精品久久包臀| 精品99999| 日本在线不卡视频| 在线这里只有精品| 国产女人18毛片水真多成人如厕| 性欧美大战久久久久久久久| 91丝袜高跟美女视频| 久久久久久综合| 琪琪一区二区三区| 欧美午夜寂寞影院| 椎名由奈av一区二区三区| 国产自产高清不卡| 日韩一区二区在线看| 一区二区三区欧美久久| 国产成人av电影在线播放| 日韩欧美国产小视频| 亚洲国产精品久久艾草纯爱| av电影天堂一区二区在线| 国产日产欧美精品一区二区三区| 麻豆91在线播放免费| 欧美片在线播放| 亚洲一区二区三区四区五区中文 | 91视频观看视频| 日本一区二区三区国色天香 | 欧美在线视频全部完| 国产精品免费网站在线观看| 精品在线你懂的| 精品少妇一区二区三区视频免付费 | 亚洲国产aⅴ成人精品无吗| 不卡欧美aaaaa| 国产女同互慰高潮91漫画| 成人网在线播放| 国产精品婷婷午夜在线观看| 国产精品一区二区黑丝| 26uuu精品一区二区| 国产精品一区二区久久精品爱涩|