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

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

?? at45db041b1.c

?? 單片外部存儲芯片AT45041B操作源程序
?? C
字號:
#include "at45db041b.h"
#include "keyboard.h"
/////////////////////////
//at45db041b    totle 540672  byte
////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////

unsigned char SPI_HostReadByte(void)
{ 
    unsigned char idata 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(unsigned char wByte)
{ 
    unsigned char idata i; 
     
    for(i=0;i<8;i++)
	{ 
        if((wByte<<i)&0x80){SPI_SI=1;} 
        else{SPI_SI=0;}          
        SPI_SCK=0; 
        SPI_SCK=1;
    }     
} 
/******************************************************************************/ 
/*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器件繼續*/ 
/*         將最新的狀態字節送出。                                             */ 
/*  bit6 - 標記最近一次Main Memory Page和Buffer的比較結果,0相同,1不同。     */ 
/*  bit5                                                                      */ 
/*  bit4                                                                      */ 
/*  bit3                                                                      */ 
/*  bit2 - 這4位用來標記器件密度,對于AT45DB041B,這4位應該是0111,一共能標記 */ 
/*         16種不同密度的器件。                                               */ 
/*  bit1                                                                      */ 
/*  bit0 - 這2位暫時無效                                                      */ 
/******************************************************************************/ 
unsigned char AT45DB041B_StatusRegisterRead(void)
{ 
    unsigned char idata 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 AT45DB041B_ContinuousArrayRead(uint PA,uint BFA,uchar *pHeader,uint len)
{        
    unsigned int idata i;       
     
    while(i++ < 1000 )                                       
	   {if(AT45DB041B_StatusRegisterRead()& 0x80 )
	      {break;}                                      // 不忙則退出
	   } 
    SPI_CS=0; 
    SPI_HostWriteByte(0xe8);     
    SPI_HostWriteByte((unsigned char)(PA>>7));     
    SPI_HostWriteByte((unsigned char)((PA<<1)|(BFA>>8))); 
    SPI_HostWriteByte((unsigned char)BFA); 
    for(i=0;i<4;i++)
       {
        SPI_HostWriteByte(0x00);
       }      
    for(i=0;i<len;i++)
       {
        pHeader[i]=SPI_HostReadByte();
       } 
    SPI_CS=1; 
  //  delayms(1000);
} 
/******************************************************************************/ 
/*描述:                                                                      */ 
/*    將指定數據寫入從某個地址(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 AT45DB041B_BufferWrite(uchar buffer,uint BFA,uchar *pHeader,uint len)
{ 
    unsigned int idata i;      
    while(i++ <1000)
	    {
		  if(AT45DB041B_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((unsigned char)(BFA>>8));
    SPI_HostWriteByte((unsigned char)BFA); 
     
    for(i=0;i<len;i++)
	   {
	    SPI_HostWriteByte(pHeader[i]);
	   } 
    SPI_CS=1;
  //   delayms(1000);     
} 
///////////////////////////////////////////////////////////////////////////////
/******************************************************************************/ 
/*描述:                                                                      */ 
/*    將BUFFER中從某個地址(0~263)開始的數據讀入 pHeader中。                 */ 
/*參數:                                                                      */ 
/*    buffer  - 選擇BUFFER,01H選擇BUFFER 1,02H選擇BUFFER 2                  */ 
/*              在該指令序列中,操作碼84H選擇BUFFER 1,87H選擇BUFFER 2        */ 
/*    BFA     - BUFFER中的起始地址,0~263                                     */ 
/*    pHeader - 讀出數據的頭指針                                              */ 
/*    len     - 讀出數據的長度1~264                                           */ 
/******************************************************************************/ 
void AT45DB041B_BufferRead(uchar buffer,uint BFA,uchar *pHeader,uint len)
{ 
    unsigned int idata i;      
    while(i++ <1000)
	    {
		  if(AT45DB041B_StatusRegisterRead()& 0x80)
		     {break;}                                      // 不忙則退出
		} 
    SPI_CS=0; 
    switch(buffer)
        { 
          case 1:SPI_HostWriteByte(0x54);break; 
          case 2:SPI_HostWriteByte(0x56);break; 
        } 
    SPI_HostWriteByte(0x00);                        //15,9,8
    SPI_HostWriteByte((unsigned char)(BFA>>8)); 
    SPI_HostWriteByte((unsigned char)BFA); 
    SPI_HostWriteByte(0x00);
    for(i=0;i<len;i++)
	   {
	    pHeader[i] = SPI_HostReadByte();
	   } 
    SPI_CS=1; 
  //  delayms(1000);  
} 
///////////////////////////////////////////////////////////////////////////////
/******************************************************************************/ 
/*描述:                                                                      */ 
/*    將指定頁PA讀入從某個BUFFER中。                                          */ 
/*參數:                                                                      */ 
/*    buffer  - 選擇BUFFER,01H選擇BUFFER 1,02H選擇BUFFER 2                  */ 
/*              在該指令序列中,操作碼53H選擇BUFFER 1,55H選擇BUFFER 2        */
/*    PA      - 頁地址,0~2047                                                */
/******************************************************************************/ 
void AT45DB041B_MainMemoryPageToBuffer(uchar buffer,uint PA)
{ 
    unsigned int idata i;      
    while(i++ <1000)
	    {
		  if(AT45DB041B_StatusRegisterRead()& 0x80)
		     {break;}                                      // 不忙則退出
		} 
    SPI_CS=0; 
    switch(buffer)
        { 
          case 1:SPI_HostWriteByte(0x53);break; 
          case 2:SPI_HostWriteByte(0x55);break; 
        } 
    SPI_HostWriteByte((unsigned char)(PA>>7)); 
    SPI_HostWriteByte((unsigned char)(PA<<1)); 
    SPI_HostWriteByte(0x00);
    delayms(100);
    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 AT45DB041B_BufferToMainMemoryPageProgramWithBuilt_inErase(uchar buffer,uint PA,uint BFA,uchar *pHeader,uint len)
{ 
    unsigned int idata i; 

    AT45DB041B_BufferWrite(buffer,BFA,pHeader,len); 
    while(i++ < 1000){if(AT45DB041B_StatusRegisterRead()&0x80){break;}}     // 不忙則退出
             
    SPI_CS=0;    
    switch(buffer)
	{ 
        case 1:SPI_HostWriteByte(0x83);break; 
        case 2:SPI_HostWriteByte(0x86);break; 
    } 
    SPI_HostWriteByte((unsigned char)(PA>>7)); 
    SPI_HostWriteByte((unsigned char)(PA<<1)); 
    SPI_HostWriteByte(0x00); 
    SPI_CS=1;
 //   delayms(1000);
} 
/******************************************************************************/ 
/*描述:                                                                      */ 
/*    與上一個函數的唯一區別是不帶預擦除。                                    */ 
/******************************************************************************/ 
void AT45DB041B_BufferToMainMemoryPageProgramWithoutBuilt_inErase(uchar buffer,uint PA,uint BFA,uchar *pHeader,uint len)
{ 
    unsigned int idata i=0; 

    AT45DB041B_BufferWrite(buffer,BFA,pHeader,len); 
    while(i++<1000){if(AT45DB041B_StatusRegisterRead()&0x80){break;}} 
     
    SPI_CS=0;
    SPI_HostWriteByte(0x88+buffer); 
    SPI_HostWriteByte((unsigned char)(PA>>7)); 
    SPI_HostWriteByte((unsigned char)(PA<<1)); 
    SPI_HostWriteByte(0x00); 
     
    for(i=0;i<len;i++){SPI_HostWriteByte(pHeader[i]);} 
    SPI_CS=1; 
  //  delayms(1000);
} 

/*void main(void)
{ 
    unsigned char i; 
    UCHAR  code test[32];  
   
    i=AT45DB041B_StatusRegisterRead(); 
     
    memset(test,0x77,32); 
    AT45DB041B_BufferToMainMemoryPageProgramWithBuilt_inErase(1,2047,0,test,32); 
    memset(test,0x26,32); 
    AT45DB041B_ContinuousArrayRead(2047,0,test,32); 
         
    memset(test,0x88,32); 
    AT45DB041B_BufferToMainMemoryPageProgramWithBuilt_inErase(2,2047,0,test,32); 
    memset(test,0x55,32); 
    AT45DB041B_ContinuousArrayRead(2047,0,test,32); 
    while(1){} 
} 

*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人激情av| 精品欧美一区二区久久| 欧美日韩在线播| 精品国产制服丝袜高跟| 综合电影一区二区三区 | 国产精品18久久久| 色噜噜狠狠色综合欧洲selulu| 欧美一级午夜免费电影| 亚洲精品视频在线观看网站| 久久成人精品无人区| 色婷婷激情一区二区三区| 久久免费看少妇高潮| 日韩不卡在线观看日韩不卡视频| 不卡一区二区中文字幕| 久久日一线二线三线suv| 日本网站在线观看一区二区三区| 99久久精品99国产精品| 国产三级欧美三级日产三级99| 午夜影院久久久| 91福利视频在线| 亚洲欧洲日本在线| 福利91精品一区二区三区| 精品久久国产97色综合| 日韩中文字幕麻豆| 欧美日免费三级在线| 亚洲免费观看高清| 91丨九色丨蝌蚪丨老版| 亚洲视频免费看| 94-欧美-setu| 亚洲精品视频一区| 色综合网站在线| 亚洲伊人伊色伊影伊综合网| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品二三区| 91香蕉视频mp4| 亚洲一二三区不卡| 欧美日韩国产影片| 青青草国产成人av片免费| 91精品一区二区三区在线观看| 天堂蜜桃一区二区三区| 日韩欧美国产小视频| 精品无人区卡一卡二卡三乱码免费卡| 日韩视频在线永久播放| 九色综合国产一区二区三区| 91精品蜜臀在线一区尤物| 日韩精品一区第一页| 日韩视频一区二区三区| 国产一区在线精品| 中文字幕免费在线观看视频一区| 成人av电影免费在线播放| 亚洲精品一二三| 欧美精品自拍偷拍动漫精品| 日本麻豆一区二区三区视频| 日韩精品一区二区三区swag| 国产风韵犹存在线视精品| 欧美国产日韩a欧美在线观看| 丁香五精品蜜臀久久久久99网站 | 亚洲精品在线观看视频| 国产精品99久久久久久久vr | 久久日韩精品一区二区五区| 国产91精品精华液一区二区三区| 日韩一区欧美小说| 欧美日韩国产乱码电影| 久久国产精品99久久人人澡| 欧美精彩视频一区二区三区| 91麻豆精品视频| 日本欧美久久久久免费播放网| 亚洲精品一区二区三区蜜桃下载| 成人福利视频网站| 三级久久三级久久久| 欧美国产欧美综合| 欧美麻豆精品久久久久久| 国产一区二区精品久久99| 亚洲人妖av一区二区| 欧美一区二区网站| jizzjizzjizz欧美| 男人的j进女人的j一区| 亚洲天堂中文字幕| 精品国产露脸精彩对白| 色老头久久综合| 韩国成人福利片在线播放| 亚洲精品大片www| 久久久一区二区三区捆绑**| 欧美日韩一区二区三区在线| 国产99精品国产| 日韩影院免费视频| 一级日本不卡的影视| 久久精品人人做人人爽人人| 欧美日韩电影在线| 日本韩国精品在线| 成人av在线影院| 国产伦精品一区二区三区在线观看| 亚洲在线成人精品| 亚洲丝袜另类动漫二区| 久久久国产午夜精品| 欧美一级二级在线观看| 欧美在线视频全部完| 不卡一区二区中文字幕| 国产一区二区三区四区五区美女 | 亚洲一区精品在线| 国产精品久久久久四虎| 欧美电视剧在线看免费| 日韩一区二区高清| 欧美精品高清视频| 欧美日韩免费不卡视频一区二区三区| 91毛片在线观看| 91丨porny丨户外露出| 成人aa视频在线观看| 成人动漫一区二区三区| 国产v综合v亚洲欧| 国产aⅴ综合色| 国产成a人亚洲精| 国产精品一区二区三区网站| 久久国产精品区| 国产原创一区二区三区| 国产精品亚洲第一| 国产成人一区二区精品非洲| 国产精品亚洲综合一区在线观看| 国产一区二区三区不卡在线观看 | 亚洲欧美日韩国产一区二区三区| 中文字幕高清一区| 亚洲视频一二区| 亚洲国产精品一区二区久久| 亚洲高清视频在线| 日韩在线一二三区| 国产一区二区三区四区在线观看| 国产99一区视频免费| 9i在线看片成人免费| 色噜噜狠狠色综合中国| 欧美精品视频www在线观看| 欧美一区国产二区| 久久久久久久久久久久久女国产乱| 久久精品一二三| 亚洲欧美一区二区三区久本道91| 亚洲欧美日韩一区二区 | 一区二区在线看| 亚洲福利视频一区| 成人免费毛片a| 日本高清视频一区二区| 91精品视频网| 国产欧美日韩一区二区三区在线观看| 国产精品国产三级国产a| 亚洲影院在线观看| 九九视频精品免费| 99久久综合色| 欧美一区二区三区免费在线看| 精品国产欧美一区二区| 国产精品家庭影院| 日日摸夜夜添夜夜添国产精品| 久久99日本精品| 色域天天综合网| 欧美成人高清电影在线| 亚洲桃色在线一区| 精品一区二区在线播放| 91丨porny丨首页| 精品国产成人系列| 亚洲精品视频一区二区| 国产一区美女在线| 欧美视频一区在线| 久久九九99视频| 亚洲va国产天堂va久久en| 国产91精品一区二区麻豆网站 | 99久久伊人久久99| 91精品国产色综合久久| 综合网在线视频| 精品一二三四在线| 欧美色视频在线| 国产精品第13页| 精品制服美女久久| 欧美狂野另类xxxxoooo| 国产精品国产精品国产专区不片| 日本aⅴ免费视频一区二区三区| 99久久精品99国产精品| 久久精品亚洲麻豆av一区二区| 亚洲国产成人tv| 色综合天天综合网天天狠天天| 国产午夜精品福利| 美脚の诱脚舐め脚责91| 欧美日韩一区三区四区| 亚洲日本电影在线| 成人网页在线观看| 91超碰这里只有精品国产| 国产精品电影院| 成人一区二区在线观看| 精品久久久久久无| 麻豆91小视频| 制服丝袜亚洲精品中文字幕| 亚洲影视在线播放| 在线精品视频免费观看| 国产精品久久国产精麻豆99网站| 国产一区二区三区观看| 26uuu国产日韩综合| 久久91精品久久久久久秒播| 日韩亚洲欧美一区二区三区| 亚洲二区在线观看| 日本久久一区二区三区| 亚洲欧美激情小说另类| 成人97人人超碰人人99| 国产精品不卡在线观看| 成人av在线播放网站|