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

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

?? f020spi.c

?? 80C51F020的SPI接口源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <c8051f020.h>                 // SFR declarations
#include <stdio.h>
sbit 	P37 = P3^7;
#define	SYSCLK			11059200
#define DF_RESET 		P5 &= ~(0x1);	P5 |= 0x1;	// P50 DataFlash reset port pin (P20)
#define DF_RDY_BUSY		P37=1; while(!(P3&0x80));		//P37 DataFlash rea
#define DF_CHIP_SELECT 	P5 &= ~(0x8); 	// P53 DataFlash chip select port pin (P23)
#define DF_CHIP_NOSELECT 	P5 |= 0x8; 	// P53 DataFlash chip select port pin (P23)
#define R8019_CHIP_SELECT 	ES0=0;P4 = 0xF8; 
#define RAM_CHIP_SELECT_BANK0 	ES0=1;P4 = 0xF4; 	
#define RAM_CHIP_SELECT_BANK1 	P4 = 0xF5; 	
#define BUFFER_1 0x00 			// buffer 1
#define BUFFER_2 0x01 			// buffer 2
#define BUFFER_1_WRITE 0x84 	// buffer 1 write
#define BUFFER_2_WRITE 0x87 	// buffer 2 write
#define BUFFER_1_READ  0x54		// buffer 1 read (change to 0xD4 for SPI mode 0,3)
#define BUFFER_2_READ  0x56		// buffer 2 read (change to 0xD6 for SPI mode 0,3)
#define B1_TO_PAGE_WITH_ERASE 0x83 		// buffer 1 to main memory page program with built-in erase
#define B2_TO_PAGE_WITH_ERASE 0x86 		// buffer 2 to main memory page program with built-in erase
#define B1_TO_PAGE_WITHOUT_ERASE 0x88 	// buffer 1 to main memory page program without built-in erase
#define B2_TO_PAGE_WITHOUT_ERASE 0x89 	// buffer 2 to main memory page program without built-in erase
#define PAGE_PROG_THROUGH_B1 0x82 		// main memory page program through buffer 1
#define PAGE_PROG_THROUGH_B2 0x85 		// main memory page program through buffer 2
#define AUTO_PAGE_REWRITE_THROUGH_B1 0x58 // auto page rewrite through buffer 1
#define AUTO_PAGE_REWRITE_THROUGH_B2 0x59 // auto page rewrite through buffer 2
#define PAGE_TO_B1_COMP 0x60 	// main memory page compare to buffer 1
#define PAGE_TO_B2_COMP 0x61 	// main memory page compare to buffer 2
#define PAGE_TO_B1_XFER 0x53 	// main memory page to buffer 1 transfer
#define PAGE_TO_B2_XFER 0x55 	// main memory page to buffer 2 transfer
#define STATUS_REGISTER 0x57
#define MAIN_MEMORY_PAGE_READ 0x52 // main memory page read (change to 0xD2 for SPI mode 0,3)
#define PAGE_ERASE 0x81 	// erase a 528 byte page
#define BLOCK_ERASE 0x50 	// erase 512 pages
unsigned int AT450XXPageAddr;
void SendSPIByte(unsigned char ch)
{
		SPIF = 0;
		SPI0DAT = ch;
		while (SPIF == 0);	 // wait for data transfer to be completed   				       	
} 
unsigned char GetSPIByte(void)
{
        SPIF = 0;
		SPI0DAT = 0;
		while (SPIF == 0);
		return  SPI0DAT;                   // read data from SPI
}
/*整片擦除*/          //081 total 256 block  16sector per block 
void ErasingDataFlash(void)    //081 total 512 block  16sector per block
{
unsigned int block_counter = 0;
	DF_RDY_BUSY; 		// check if flash is busy
	while (block_counter < 512)
	{
	  	DF_CHIP_SELECT;                          // select DataFlash
		SendSPIByte(BLOCK_ERASE);				//0x50 erase 512 pages
		SendSPIByte((char)(block_counter>>4));    //r r r PA11 PA10 PA9 PA8 PA7 
		SendSPIByte((char)(block_counter<<4));     //PA6 PA5 PA4 PA3 X X X   0
		SendSPIByte(0x00); 
	  	DF_CHIP_NOSELECT;                          // unselect DataFlash
		block_counter++;
		DF_RDY_BUSY; // wait until block is erased
	}
}
//頁擦除
void EraseFlashPage(void) 
{
		DF_RDY_BUSY; 		// check if flash is busy
	  	DF_CHIP_SELECT; 
        SendSPIByte(PAGE_ERASE);
        SendSPIByte((unsigned char)(AT450XXPageAddr>>7));
        SendSPIByte((unsigned char)(AT450XXPageAddr<<1));
        SendSPIByte(0x00);
	  	DF_CHIP_NOSELECT;
}
//讀緩存
void FlashBuffer1Read(unsigned int star_addr,unsigned int len, unsigned char *buffer) //從緩沖區1的指定位置(0-263)中讀入指定字節
{                                       
       unsigned int i;
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT; 			// enable DataFlash
		SendSPIByte(BUFFER_1_READ);		//緩沖區1為54H  緩沖區2為56H
		SendSPIByte(0);
		SendSPIByte((unsigned char)(star_addr>>8));
		SendSPIByte((unsigned char)star_addr);
		SendSPIByte(0);
		for (i=0;i<len;i++)
		{
   			buffer[i] = GetSPIByte();                   // read data from SPI
	    }
       	DF_CHIP_NOSELECT;
}
//讀緩存
void FlashBuffer2Read(unsigned int star_addr,unsigned int len, unsigned char *buffer) //從緩沖區2的指定位置(0-263)中讀入指定字節
{                                       
       unsigned int i;
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT; 			// enable DataFlash
		SendSPIByte(BUFFER_2_READ);		//緩沖區1為54H  緩沖區2為56H
		SendSPIByte(0);
		SendSPIByte((unsigned char)(star_addr>>8));
		SendSPIByte((unsigned char)star_addr);
		SendSPIByte(0);
		for (i=0;i<len;i++)
		{
   			buffer[i] = GetSPIByte();                   // read data from SPI
	    }
       	DF_CHIP_NOSELECT;
}
//寫緩存
void FlashBuffer1Write(unsigned int start_addr, unsigned int len,unsigned char *buffer) //向緩沖區1的指定位置(0-263)寫入指定字節
{
   		unsigned char  i;
		DF_RDY_BUSY; 		// check if flash is busy
   		DF_CHIP_SELECT;					//緩沖區1為84H  緩沖區2為87H
		SendSPIByte(BUFFER_1_WRITE);
   		SendSPIByte(0x00);
   		SendSPIByte((unsigned char)(start_addr>>8));
   		SendSPIByte((unsigned char)start_addr);
   		for (i=0;i<len;i++)
   			SendSPIByte(buffer[i]);
		DF_CHIP_NOSELECT;
}
//寫緩存
void FlashBuffer2Write(unsigned int start_addr, unsigned int len,unsigned char *buffer) //向緩沖區2的指定位置(0-263)寫入指定字節
{
   		unsigned char  i;
		DF_RDY_BUSY; 		// check if flash is busy
   		DF_CHIP_SELECT;					//緩沖區1為84H  緩沖區2為87H
		SendSPIByte(BUFFER_2_WRITE);
   		SendSPIByte(0x00);
   		SendSPIByte((unsigned char)(start_addr>>8));
   		SendSPIByte((unsigned char)start_addr);
   		for (i=0;i<len;i++)
   			SendSPIByte(buffer[i]);
		DF_CHIP_NOSELECT;
}
//讀取狀態
unsigned char GetFlashStatus() //讀Flash當前狀態Bit7=1:空閑 0:忙 Bit6=1:比較結果不匹配 0:匹配 Bit5Bit3Bit2:芯片標志 100:081 
{
        unsigned char idata ret;
		DF_CHIP_SELECT;
        SendSPIByte(STATUS_REGISTER);
        ret=GetSPIByte();
        DF_CHIP_NOSELECT;
        return ret;
}
//讀主存至緩存
void PageToBuffer1(void)	 //從Flash讀一頁至緩存1
{
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT; 		// enable DataFlash
		SendSPIByte(PAGE_TO_B1_XFER); // transfer next page to buffer1
		SendSPIByte((unsigned char)(AT450XXPageAddr >> 7));
		SendSPIByte((unsigned char)(AT450XXPageAddr << 1));
		SendSPIByte(0);				
		DF_CHIP_NOSELECT;
}
//讀主存至緩存
void PageToBuffer2(void)    //從Flash讀一頁至緩存2
{
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT; 		// enable DataFlash
		SendSPIByte(PAGE_TO_B2_XFER); // transfer next page to buffer1
		SendSPIByte((unsigned char)(AT450XXPageAddr >> 7));
		SendSPIByte((unsigned char)(AT450XXPageAddr << 1));
		SendSPIByte(0);				
		DF_CHIP_NOSELECT;
}
//緩存寫主存
void FlashBuffer1ProgNoErase(void)  //直接將緩存1寫入Flash一頁(不擦除)
{
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT;
		SendSPIByte(B1_TO_PAGE_WITHOUT_ERASE);
        SendSPIByte((unsigned char)(AT450XXPageAddr >> 7));
        SendSPIByte((unsigned char)(AT450XXPageAddr << 1));
        SendSPIByte(0x00);
		DF_CHIP_NOSELECT;
}
//緩存寫主存
void FlashBuffer2ProgNoErase(void) //直接將緩存2寫入Flash一頁(不擦除)
{
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT;
		SendSPIByte(B2_TO_PAGE_WITHOUT_ERASE);
        SendSPIByte((unsigned char)(AT450XXPageAddr >> 7));
        SendSPIByte((unsigned char)(AT450XXPageAddr << 1));
        SendSPIByte(0x00);
		DF_CHIP_NOSELECT;
}
//擦除+緩存寫主存
void FlashBuffer1ProgAutoErase(void) //直接將緩存1寫入Flash一頁(先擦除)
{
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT;
		SendSPIByte(B1_TO_PAGE_WITH_ERASE);
        SendSPIByte((unsigned char)(AT450XXPageAddr >> 7));
        SendSPIByte((unsigned char)(AT450XXPageAddr << 1));
        SendSPIByte(0x00);
		DF_CHIP_NOSELECT;
}

//擦除+緩存寫主存
void FlashBuffer2ProgAutoErase(void) //直接將緩存2寫入Flash一頁(先擦除)
{
		DF_RDY_BUSY; 		// check if flash is busy
		DF_CHIP_SELECT;
		SendSPIByte(B2_TO_PAGE_WITH_ERASE);
        SendSPIByte((unsigned char)(AT450XXPageAddr >> 7));
        SendSPIByte((unsigned char)(AT450XXPageAddr << 1));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va在线va天堂| 午夜一区二区三区视频| 欧美一级艳片视频免费观看| 一本一道波多野结衣一区二区| 国内精品伊人久久久久av影院| 午夜精品福利一区二区三区蜜桃| 亚洲va在线va天堂| 日韩av一二三| 人人狠狠综合久久亚洲| 午夜精品一区二区三区免费视频 | 国产精品麻豆一区二区| 久久久久久久久久电影| 国产日韩亚洲欧美综合| 国产网红主播福利一区二区| 国产精品久久久久久久第一福利| 国产精品三级av| 亚洲蜜臀av乱码久久精品| 夜夜精品浪潮av一区二区三区| 亚洲综合色区另类av| 午夜精品影院在线观看| 美女一区二区久久| 国产美女主播视频一区| 97久久超碰国产精品电影| 欧美日韩中文精品| 欧美mv日韩mv国产网站app| 中文在线资源观看网站视频免费不卡| 中文无字幕一区二区三区| 亚洲精品国产精华液| 日本视频一区二区三区| 丁香激情综合五月| 欧美在线影院一区二区| 精品理论电影在线| 国产精品久久久久久亚洲伦| 亚洲大片在线观看| 韩国精品主播一区二区在线观看| 大白屁股一区二区视频| 一本大道久久a久久精品综合| 538在线一区二区精品国产| 久久久www成人免费毛片麻豆| 亚洲一区中文在线| 国产激情精品久久久第一区二区| 在线观看免费一区| 日本一区二区三区四区| 天天射综合影视| 一本色道亚洲精品aⅴ| 91精品国产色综合久久ai换脸| 久久夜色精品国产噜噜av| 亚洲在线成人精品| 免费欧美高清视频| 久久久久久日产精品| 激情文学综合丁香| 亚洲午夜一二三区视频| 色婷婷一区二区| 亚洲男同性视频| 欧美巨大另类极品videosbest | 午夜精品久久久久久久99水蜜桃| 成人18视频日本| 免费在线观看视频一区| 国产福利一区在线| 亚洲一区二区三区四区在线观看 | 不卡一二三区首页| 欧美一三区三区四区免费在线看 | 亚洲成人黄色小说| 91偷拍与自偷拍精品| 欧美精品一区二区三区四区| 婷婷中文字幕一区三区| 在线亚洲一区二区| 国产精品久久久一本精品| 国产又粗又猛又爽又黄91精品| 欧美一区二区大片| 亚洲不卡一区二区三区| 欧洲人成人精品| 亚洲精品亚洲人成人网在线播放| 99久久免费精品| 亚洲色图另类专区| 色综合天天做天天爱| 亚洲精品欧美二区三区中文字幕| 国产成人综合自拍| 久久精品网站免费观看| 国产在线播精品第三| 久久精品一区二区三区四区| 韩国精品在线观看| 日本一区二区三级电影在线观看 | 亚洲精品第一国产综合野| 色婷婷av一区| 亚洲大片免费看| 这里只有精品免费| 黄网站免费久久| 国产欧美一区二区三区鸳鸯浴 | 欧美日韩黄色影视| 日韩中文字幕区一区有砖一区| 欧美日韩高清在线播放| 日产欧产美韩系列久久99| 日韩一级在线观看| 国产91精品欧美| 亚洲色图一区二区| 欧美日韩国产影片| 国模一区二区三区白浆| 亚洲欧洲三级电影| 欧美日韩国产高清一区| 久久精品av麻豆的观看方式| 国产日韩精品一区二区浪潮av| www.亚洲色图.com| 亚洲第一福利一区| 久久久不卡影院| 欧美性猛交xxxx乱大交退制版| 日韩**一区毛片| 亚洲欧洲色图综合| 制服丝袜亚洲网站| 成人免费毛片高清视频| 亚洲国产日韩精品| 国产精品美女久久久久av爽李琼| 欧美性xxxxx极品少妇| 国产美女一区二区| 亚洲一区二区三区四区五区中文| 91精品国产综合久久久久久| 风间由美一区二区三区在线观看| 亚洲韩国一区二区三区| 精品嫩草影院久久| 欧美日韩精品系列| 国产 欧美在线| 日本va欧美va精品| 亚洲精品乱码久久久久| 精品国产123| 欧美日韩国产欧美日美国产精品| 国产91精品一区二区麻豆网站| 国产成人在线色| 日韩电影网1区2区| 亚洲欧美经典视频| 久久品道一品道久久精品| 欧美老肥妇做.爰bbww视频| 成人中文字幕合集| 久久97超碰国产精品超碰| 亚洲精品菠萝久久久久久久| 久久久影视传媒| 精品久久久久久久久久久久久久久 | 精品1区2区在线观看| 欧美日韩在线播放三区| 91蜜桃在线观看| 成人午夜短视频| 激情小说欧美图片| 青青草成人在线观看| 五月婷婷久久综合| 一级中文字幕一区二区| 亚洲欧洲精品天堂一级| 国产亚洲精品7777| 久久久久久9999| 2023国产精品视频| 精品久久一二三区| 日韩一区二区电影在线| 欧美另类videos死尸| 7777精品久久久大香线蕉| 精品视频1区2区3区| 欧美在线综合视频| 欧美三级三级三级| 91精品国产综合久久久久久漫画 | 国产三级一区二区三区| 精品1区2区在线观看| 久久综合色8888| 久久精品一区二区三区不卡 | 色94色欧美sute亚洲13| 色综合久久天天| 欧美性生活影院| 欧美一区二区三区四区视频| 欧美一级日韩一级| 精品精品国产高清a毛片牛牛| 欧美精品一区二区三区久久久| 久久免费视频一区| 国产欧美精品区一区二区三区 | 91美女视频网站| 91成人在线观看喷潮| 欧美日韩在线电影| 7878成人国产在线观看| 日韩欧美高清dvd碟片| 久久久午夜精品理论片中文字幕| 久久精品这里都是精品| 国产精品久久精品日日| 亚洲高清不卡在线观看| 久久99精品国产麻豆婷婷洗澡| 国内成+人亚洲+欧美+综合在线| 风流少妇一区二区| 欧美日韩一区二区三区在线看| 欧美嫩在线观看| 久久久久久久久久电影| 亚洲精品国久久99热| 秋霞影院一区二区| 岛国av在线一区| 欧美丝袜丝交足nylons| 欧美大肚乱孕交hd孕妇| 亚洲欧洲国产专区| 视频一区在线视频| 国产98色在线|日韩| 欧美中文字幕不卡| 久久久久国产精品麻豆ai换脸 | 亚洲黄色av一区| 精品综合久久久久久8888| 99精品视频在线播放观看| 日韩一区二区三区电影在线观看| 国产精品家庭影院| 蜜臀精品久久久久久蜜臀 |