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

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

?? at45db161d_driver.c

?? 52系列單片機對AT45DB161D的操作程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <w77e58.h>
#include <string.h>
#include"ds1302.h"
#include <stdlib.h>
#include <stdio.h>
#include <intrins.h>
#define data_ora   P0            //MCU P1<------> LCM
#define uchar      unsigned char
#define uint       unsigned int
#define ulong      unsigned long

sbit req =P3^5;  //請求信號,H有效
//sbit req =P2^7;
sbit busy =P2^7;
//sbit busy =P2^5;
uchar temp;
/*正常操作電壓為2.7~3.6V,實驗中發現當電壓超過4.25V后讀出的狀態字節為9A(正常 */ 
/*的狀態字節值為9D),并且讀寫數據均不準確,所以應當保證卡片的供電電壓不超過 */ 
/*4.25V。                                               */ 
/*SPI規范:Data is always clocked into the device on the rising edge of SCK a-*/ 
/*   nd clocked out of the device on the falling edge of SCK.All instruction-*/ 
/*   s,addresses and data are transferred with the most significant bit(MSB) */ 
/*   first.                                             */ 
/*                                             2005-06-02*/ 
sbit     SPI_CS             = P2^3; 
//sbit     SPI_CS             = P2^2; 

sbit     SPI_SCK            = P2^4; 
//sbit     SPI_SCK            = P2^1; 

//sbit     SPI_SO             = P2^6;

sbit     SPI_SO             = P3^7;
// sbit     SPI_SO             = P2^3;
sbit     SPI_SI             = P3^3;
//sbit     SPI_SI             = P2^5;
// sbit     SPI_SI             = P2^0; 

//sbit     P37=P3^7;
//sbit     SPI_RESET           = P2^3; 
//sbit     SPI_WP             = P2^1; 

uchar  buff1[1];       //從buffer中取出的時間值放入buff1中送顯示
//spi0與spi3上升沿輸入下降沿輸出




/*uchar SPI_HostReadByte(void) 
{
uchar i,rByte=0;
  SPI_SCK=0;
for(i=0;i<8;i++)
{rByte<<=1;
 SPI_SCK=1; 
if(SPI_SO) rByte++; 
 
SPI_SCK=0; 

//rByte<<=1;
 } 
return(rByte);
}*/

uchar SPI_HostReadByte(void)
{           //讀一個字節
  uchar i,rByte=0; 

  for(i=0;i<8;i++)
  { 

   SPI_SCK=0;

    SPI_SCK=1; 
    
    rByte<<=1; 

    rByte|=SPI_SO;

  } 
  return rByte;   
}



/**************************************************/

/*void SPI_HostWriteByte(uchar wByte){ 
    uchar i; 
     
      for(i=0;i<8;i++)
      {
        SPI_SCK=0;
          
         if(wByte&0x80){SPI_SI=1;} 
         else{SPI_SI=0;} 
         wByte<<=1;

   // SPI_SCK=0;         
         SPI_SCK=1;  
  
      }         
}*/

void SPI_HostWriteByte(uchar wByte)           //寫一個字節 
{
uchar i; 
		SPI_CS=0;
for(i=0;i<8;i++)
{ 

SPI_SCK=0;
if(wByte&0x80){SPI_SI=1;}
else{SPI_SI=0;} 

SPI_SCK=1;       

wByte<<=1;
} } 

/*void SPI_HostWriteByte(uchar wByte){         //寫一個字節
  uchar i; 
/// SPI_SCK=1;  
  for(i=0;i<8;i++){ 
  SPI_SCK=0; ///
    if((wByte<<i)&0x80) {SPI_SI=1;} 
    else {SPI_SI=0;} 
  
 /// SPI_SCK=0; 

 ///   SPI_SCK=1; 

SPI_SCK=1;////
////////SPI_SCK=0; 

  }   
} */

/*Status Register Format:                                   */ 
/*   ----------------------------------------------------------------------- */ 
/* | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | */ 
/* |--------|--------|--------|--------|--------|--------|--------|--------| */ 
/* |RDY/BUSY| COMP |   0   |   1   |   1   |   1   |   X   |   X   | */ 
/*   ----------------------------------------------------------------------- */ 
/* bit7 - 忙標記,0為忙1為不忙。                               */ 
/*       當Status Register的位0移出之后,接下來的時鐘脈沖序列將使SPI器件繼續*/ 
/*       將最新的狀態字節送出。                               */ //[Page]
/* bit6 - 標記最近一次Main Memory Page和Buffer的比較結果,0相同,1不同。   */ 
/* bit5                                               */ 
/* bit4                                               */ 
/* bit3                                               */ 
/* bit2 - 這4位用來標記器件密度,對于AT45DB041B,這4位應該是0111,一共能標記 */ 
/*       16種不同密度的器件。對于AT45DB081B,這4位應該是1001,   對于AT45DB161B,這4位應該是1011 */  
/* bit1                                               */ 
/* bit0 - 這2位暫時無效                                     */ 

uchar AT45DB161B_StatusRegisterRead(void)
{ 
  uchar i; 
          
  SPI_CS=0;   
 SPI_HostWriteByte(0xd7);
  i=SPI_HostReadByte(); 

  SPI_CS=1; 

  return i;   
} 

/*描述:                                               */ 
/*   When the last bit in the main memory array has been read,the device will*/ 
/*   continue reading back at the beginning of the first page of memory.As w-*/ 
/*   ith crossing over page boundaries,no delays will be incurred when wrapp-*/ 
/*   ing around from the end of the array to the beginning of the array.   */ 
/*從主存儲頁中連續讀*/
/*參數:                                               */ 
/*   PA     - 頁地址,0~2047                                 */ 
/*   BFA   - 指定BUFFER中的起始寫入地址(我認為確切的說應該是頁內地址,即要讀的數據在頁內的首地址)*/ 
/*   pHeader - 指定數據的首地址                               */ 
/*   len   - 指定數據的長度                                 */ 

void AT45DB161B_ContinuousArrayRead(uint PA,uint BFA,uchar *pHeader,uint len)
{     
  uint i;     

   while(!(AT45DB161B_StatusRegisterRead()&0x80));
  
  // while(i++<255){if(AT45DB161B_StatusRegisterRead()&0x80){break;}} 
  SPI_CS=0;   

SPI_HostWriteByte(0xe8);  // [Page]
//SPI_HostWriteByte(0x0B); 
  SPI_HostWriteByte((uchar)(PA>>6));   
  SPI_HostWriteByte((uchar)((PA<<2)|(BFA>>8))); //改
  SPI_HostWriteByte((uchar)BFA); 
  for(i=0;i<4;i++){SPI_HostWriteByte(0x00);} 
//  SPI_HostWriteByte(0x00);
 for(i=0;i<len;i++){pHeader[i]=SPI_HostReadByte();} 
  SPI_CS=1; 

} 




/*讀主存儲頁中數據到BUFFER1*/
/*參數:                                               */ 
/*   PA     - 頁地址,0~2047                                 */ 
/*   BFA   - 指定BUFFER中的起始寫入地址(我認為確切的說應該是頁內地址,即要讀的數據在頁內的首地址)*/ 
/*   pHeader - 指定數據的首地址                               */ 
/*   len   - 指定數據的長度                                 */ 

void AT45DB161B_MainMemorytoBufferRead(uint PA)///我改
{     
 // uint i;     

   while(!(AT45DB161B_StatusRegisterRead()&0x80));
  
  // while(i++<255){if(AT45DB161B_StatusRegisterRead()&0x80){break;}} 
  SPI_CS=0;   

SPI_HostWriteByte(0x53);  // [Page]
//SPI_HostWriteByte(0x0B); 
  SPI_HostWriteByte((uchar)(PA>>6));   
  SPI_HostWriteByte((uchar)(PA<<2)); 
 // SPI_HostWriteByte((uchar)BFA); 
 // for(i=0;i<4;i++){SPI_HostWriteByte(0x00);} 
//  SPI_HostWriteByte(0x00);
 //for(i=0;i<len;i++){pHeader[i]=SPI_HostReadByte();} 
  SPI_CS=1; 

} 







/*描述:                                               */ 
/*   將指定數據寫入從某個地址(0~263)開始的BUFFER中。               */ 
/*參數:                                               */ 
/*   buffer - 選擇BUFFER,01H選擇BUFFER 1,02H選擇BUFFER 2             */ 
/*         在該指令序列中,操作碼84H選擇BUFFER 1,87H選擇BUFFER 2     */ 
/*   BFA   - BUFFER中的起始地址,0~263                         */ 
/*   pHeader - 待存數據的頭指針                               */ 
/*   len   - 待存數據的長度1~264                             */ 

void AT45DB161B_BufferWrite(uchar buffer,uint BFA,uchar *pHeader,uint len)
{ 
  uint i; 

  while(!(AT45DB161B_StatusRegisterRead()&0x80));   
   //while(i++<255){if(AT45DB161B_StatusRegisterRead()&0x80){break;}} 
  SPI_CS=0;   

  switch(buffer){ 
    case 1:SPI_HostWriteByte(0x84);break; 
    case 2:SPI_HostWriteByte(0x87);break; 

  } 
  SPI_HostWriteByte(0x00); 
  SPI_HostWriteByte((uchar)(BFA>>8)); 
  SPI_HostWriteByte((uchar)BFA); 
  
  for(i=0;i<len;i++){SPI_HostWriteByte(pHeader[i]);} //改
  SPI_CS=1;   
  
} 



/*描述:                                             */ 
/*   將指定數據從某個地址(0~263)開始的BUFFER中讀出。               */ 
/*參數:                                               */ 
/*   buffer - 選擇BUFFER,01H選擇BUFFER 1,02H選擇BUFFER 2             */ 
/*         在該指令序列中,操作碼D4H選擇BUFFER 1,D6H選擇BUFFER 2     */ 
/*   BFA   - BUFFER中的起始地址,0~263                         */ 
/*   pHeader - 待存數據的頭指針                               */ 
/*   len   - 待存數據的長度1~264                             */ 

void AT45DB161B_BufferRead(uchar buffer,uint BFA,uchar *pHeader,uint len) //我改寫的 
{ 
  uint i; 

  while(!(AT45DB161B_StatusRegisterRead()&0x80));   
   //while(i++<255){if(AT45DB161B_StatusRegisterRead()&0x80){break;}} 
  SPI_CS=0;   

  switch(buffer){ 
    case 1:SPI_HostWriteByte(0xD4);break; 
    case 2:SPI_HostWriteByte(0xD6);break; 

  } 
   SPI_HostWriteByte(0x00);
  SPI_HostWriteByte((uchar)(BFA>>8)); 
  SPI_HostWriteByte((uchar)BFA); 
  SPI_HostWriteByte(0x00); 

 for(i=0;i<len;i++){pHeader[i]=SPI_HostReadByte();} 
  SPI_CS=1;   
  
} 




/*描述:                                               */ 
/*   將指定數據寫入從某個地址(0~263)開始的頁中:包含2個動作,首先將指定數據*/ 
/*   寫入到BUFFER 1或者BUFFER 2中,其中可以指定BUFFER中的起始寫入地址,此寫入*/ 
/*   動作不影響BUFFER中其它地址中的數據,然后再將BUFFER中的整個數據寫入到某指*/ 
/*   定頁中(帶預擦除)。                                     */ 
/*參數:                                               */ 
/*   buffer - 選擇BUFFER,01H選擇BUFFER 1,02H選擇BUFFER 2             */ 
/*   PA     - 頁地址,0~2047                                 */ 
/*   BFA   - 指定BUFFER中的起始寫入地址                         */ 
/*   pHeader - 指定數據的首地址                               */ 
/*   len   - 指定數據的長度                                 */ 

void AT45DB161B_BufferToMainMemoryPageProgramWithBuilt_inErase(uchar buffer,uint PA,uint BFA,uchar *pHeader,uint len)
{ 
  //uint i; 

  AT45DB161B_BufferWrite(buffer,BFA,pHeader,len); 
  while(!(AT45DB161B_StatusRegisterRead()&0x80));
   // while(i++<1000){if(AT45DB161B_StatusRegisterRead()&0x80){break;}} 
        
  SPI_CS=0; 

  switch(buffer){ 
    case 1:SPI_HostWriteByte(0x83);break; 
    case 2:SPI_HostWriteByte(0x86);break; 
  } 
  SPI_HostWriteByte((uchar)(PA>>6)); //3位保留位,12位頁地址位,9位無關位
  SPI_HostWriteByte((uchar)(PA<<2)); 
// SPI_HostWriteByte((uchar)(PA>>8)); 
 // SPI_HostWriteByte((uchar)PA); 

  SPI_HostWriteByte(0x00); 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线综合视频| 美国十次综合导航| 国产无人区一区二区三区| 4hu四虎永久在线影院成人| 在线中文字幕一区| 欧美三级蜜桃2在线观看| 欧洲人成人精品| 欧美视频在线一区| 欧美日韩国产精选| 欧美一区二区精品| 久久综合狠狠综合| 国产亚洲欧美一级| 综合久久久久久久| 亚洲一区二区中文在线| 亚洲成av人片在www色猫咪| 日韩精品国产精品| 国内精品伊人久久久久av影院 | 国产精品中文字幕日韩精品| 不卡一卡二卡三乱码免费网站| 东方aⅴ免费观看久久av| www.av亚洲| 欧美日韩国产一级片| 精品国产免费人成电影在线观看四季 | 欧美亚洲图片小说| 欧美一区二区三区免费| 2017欧美狠狠色| 中文字幕字幕中文在线中不卡视频| 亚洲精品高清视频在线观看| 午夜av电影一区| 国产高清亚洲一区| 在线观看国产日韩| 久久亚洲欧美国产精品乐播| 国产精品不卡一区二区三区| 午夜日韩在线电影| 国产成人午夜电影网| 欧美在线观看视频一区二区| 91精品国产入口| 亚洲欧美影音先锋| 美女脱光内衣内裤视频久久影院| 成人做爰69片免费看网站| 欧美视频一区在线| 国产精品麻豆欧美日韩ww| 丝袜美腿亚洲一区二区图片| 成人免费毛片aaaaa**| 制服.丝袜.亚洲.另类.中文| 国产精品伦一区二区三级视频| 午夜精品福利一区二区三区av | 国产精品拍天天在线| 婷婷综合在线观看| 99久久久无码国产精品| 欧美xxxxxxxxx| 亚洲bdsm女犯bdsm网站| 成人av网址在线| 精品久久久久久久久久久久久久久久久 | 处破女av一区二区| 日韩欧美一级精品久久| 亚洲午夜久久久久久久久久久| 国产成人精品免费| 久久影院视频免费| 天天影视网天天综合色在线播放| 91免费观看视频在线| 日本一区二区免费在线观看视频| 青青草一区二区三区| 欧美男男青年gay1069videost| 亚洲色图制服丝袜| 91一区二区三区在线观看| 国产三级三级三级精品8ⅰ区| 久久99精品国产麻豆婷婷| 欧美日韩精品一区二区三区四区 | 亚洲免费成人av| 91色视频在线| 亚洲精品老司机| 91片黄在线观看| 亚洲免费视频成人| 色噜噜夜夜夜综合网| 中文字幕日韩一区| 91在线观看美女| 亚洲人成在线播放网站岛国| 99re热视频这里只精品| 成人免费在线播放视频| 91片在线免费观看| 亚洲免费视频成人| 91福利区一区二区三区| 亚洲激情五月婷婷| 欧美日韩aaaaa| 日韩不卡免费视频| 精品国产乱码久久久久久浪潮| 七七婷婷婷婷精品国产| 欧美xxx久久| 成人av免费在线观看| 亚洲人精品一区| 6080国产精品一区二区| 老司机免费视频一区二区| 久久女同性恋中文字幕| 成人福利在线看| 艳妇臀荡乳欲伦亚洲一区| 欧美日韩国产高清一区二区 | 国产宾馆实践打屁股91| 国产精品电影一区二区三区| 在线观看日韩国产| 奇米777欧美一区二区| 国产亚洲视频系列| 在线不卡一区二区| 另类小说一区二区三区| 国产女人18毛片水真多成人如厕| 色综合中文字幕| 老色鬼精品视频在线观看播放| 欧美精品一区在线观看| 91麻豆国产精品久久| 日本不卡视频一二三区| 国产亚洲自拍一区| 欧美另类久久久品| 成人h动漫精品| 亚洲线精品一区二区三区八戒| 日韩欧美一区二区三区在线| av亚洲精华国产精华精| 日韩激情视频在线观看| 国产精品久久夜| 欧美一级高清片| 色呦呦国产精品| 久久精品国产秦先生| 亚洲欧美一区二区三区国产精品| 日韩亚洲欧美高清| 在线亚洲人成电影网站色www| 国产一区二区在线视频| 婷婷综合另类小说色区| 亚洲丝袜另类动漫二区| 久久久噜噜噜久久人人看| 欧美日本高清视频在线观看| 成人性生交大合| 久久99九九99精品| 午夜亚洲福利老司机| 亚洲日本一区二区三区| 国产欧美精品一区二区色综合| 欧美妇女性影城| 欧美三级中文字幕在线观看| 不卡一卡二卡三乱码免费网站| 国产伦理精品不卡| 久久99久久久欧美国产| 日韩专区欧美专区| 亚洲国产一区二区a毛片| 中文字幕亚洲在| 国产精品免费久久久久| 久久九九99视频| 26uuu亚洲婷婷狠狠天堂| 日韩一二在线观看| 欧美一区二区三区系列电影| 欧美日韩视频在线一区二区| 91视频你懂的| 色综合婷婷久久| 欧美一区二区三区免费在线看| 欧美一区二区在线不卡| 色综合久久综合中文综合网| 亚洲国产你懂的| 亚洲已满18点击进入久久| 亚洲精品少妇30p| 欧美高清在线视频| 91精品啪在线观看国产60岁| 亚洲成人精品一区二区| 日本中文一区二区三区| 丰满少妇久久久久久久| 欧美绝品在线观看成人午夜影视| 精品99久久久久久| 亚洲影院久久精品| 福利一区在线观看| 欧美一区二区在线不卡| 亚洲欧美电影一区二区| 国产一区在线观看视频| 欧美日韩国产另类一区| 中文字幕日韩精品一区| 国产一区二区精品久久| 欧美日韩免费在线视频| 国产精品免费免费| 国产呦精品一区二区三区网站| 欧美在线观看你懂的| 中文字幕一区二区三区四区不卡| 精品一区二区三区不卡| 欧美日韩高清在线| 亚洲男人的天堂av| 成人性生交大片免费看视频在线 | 3d动漫精品啪啪| 亚洲欧美偷拍卡通变态| 成人黄色国产精品网站大全在线免费观看| 欧美三级韩国三级日本一级| 亚洲日本va午夜在线影院| 成人一区二区三区中文字幕| 精品日本一线二线三线不卡| 日韩精品一二三四| 欧美日韩一级大片网址| 一区二区三区中文在线观看| bt7086福利一区国产| 国产女人aaa级久久久级| 国产一区福利在线| 欧美成人一区二区三区片免费| 日韩和欧美的一区| 在线播放亚洲一区| 免费成人深夜小野草| 欧美一区二区三区的| 青草av.久久免费一区| 日韩一区二区三区av|