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

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

?? c8051f330_flash_spi_20071213.c

?? c8051f330讀寫 flash---SPI_20071213
?? C
?? 第 1 頁 / 共 2 頁
字號:

//***********************************Begain of Code*********************
//**********************c8051f330--sst25vf080**********************************
/////////////////////////////////////
//  Generated Initialization File  //
/////////////////////////////////////

#include "C8051F330.h"
#include "intrins.h"

sbit WP=P0^3;
sbit CE=P0^4;
#define Select_Serial_Memory   CE=0
#define Deselect_Serial_Memory CE=1
#define U16 unsigned int
#define U8 unsigned char
#define SPIFLASH_CMD_AAIP 0xAD


// Peripheral specific initialization functions,
// Called from the Init_Device() function
void PCA_Init()
{
    PCA0MD    &= ~0x40;
    PCA0MD    = 0x00;
}

void SPI_Init()
{
    SPI0CFG   = 0x40;
    SPI0CN    = 0x01;
	SPI0CKR   = 0x79;
}

void Port_IO_Init()
{
    // P0.0  -  SCK  (SPI0), Open-Drain, Digital
    // P0.1  -  MISO (SPI0), Open-Drain, Digital
    // P0.2  -  MOSI (SPI0), Push-Pull,  Digital
    // P0.3  -  Unassigned,  Push-Pull,  Digital
    // P0.4  -  Unassigned,  Push-Pull,  Digital
    // P0.5  -  Unassigned,  Open-Drain, Digital
    // P0.6  -  Unassigned,  Open-Drain, Digital
    // P0.7  -  Unassigned,  Open-Drain, Digital

    // P1.0  -  Unassigned,  Open-Drain, Digital
    // P1.1  -  Unassigned,  Open-Drain, Digital
    // P1.2  -  Unassigned,  Open-Drain, Digital
    // P1.3  -  Unassigned,  Open-Drain, Digital
    // P1.4  -  Unassigned,  Open-Drain, Digital
    // P1.5  -  Unassigned,  Open-Drain, Digital
    // P1.6  -  Unassigned,  Open-Drain, Digital
    // P1.7  -  Unassigned,  Open-Drain, Digital

    P0MDOUT   = 0x1C;
    XBR0      = 0x02;
    XBR1      = 0x40;
}


void Oscillator_Init()
{
    OSCICN    = 0x83;
}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    PCA_Init();
    SPI_Init();
    Port_IO_Init();
    Oscillator_Init();
}
/*********************************************************************************/
/*	SPI---seng one byte*/

void SendSPIByte(unsigned char ch)
{
  SPIF = 0;
  SPI0DAT = ch;
  while (SPIF == 0);      // 等待寫結束           
} 
/*********************************************************************************/
/*	SPI---receive one byte*/
unsigned char GetSPIByte(void)
{
  SPIF = 0;
  SPI0DAT = 0;
  while (SPIF == 0);
  return  SPI0DAT;        // 等待讀結束
}

/*******************************************************************************/
/* PROCEDURE: Read_Status_Register */
/* */
/* This procedure reads from Read_Status_Register. */
/* */
/* Input: None */
/* */
/* Returns: status byte */
/* */
/*******************************************************************************/
unsigned char Read_Status_Register(void)
{
unsigned char byte = 0;
Select_Serial_Memory;
SendSPIByte(0x05); /* send RDSR command */
byte = GetSPIByte(); /* receive byte */
Deselect_Serial_Memory; /* disable device */
return byte;
}
/*******************************************************************************/
/* PROCEDURE: Wait_Busy */
/* */
/* This procedure waits until device is no longer busy. */
/* */
/* Input: None */
/* */
/* Returns: Nothing */
/* */
/*******************************************************************************/
void Wait_Busy()
{
 while ((Read_Status_Register() & 0x03) == 0x03)
 Read_Status_Register(); /* waste time until not busy */
}

/*******************************************************************************/
/* PROCEDURE: EWSR */
/* */
/* This procedure enables the Write Status Register. */
/* */
/* Input: None */
/* */
/* Returns: Nothing */
/* */
/*******************************************************************************/
void EWSR(void )
{
Select_Serial_Memory;
SendSPIByte(0x50); /* enuable writing to the stats register */
Deselect_Serial_Memory; /* disable device */
}
/*******************************************************************************/
/* PROCEDURE: WRSR */
/* */
/* This procedure writes a byte to the Status Register. */
/* */
/* Input: data byte */
/* */
/* Returns: Nothing */
/* */
/*******************************************************************************/
void WRSR(unsigned char byte)
{
Select_Serial_Memory;
SendSPIByte(0x01); /* select write to status register */
SendSPIByte(byte); /* data that will change the status of BPx or BPL(only bits 2,3,7 can be written) */
Deselect_Serial_Memory; /* disable device */
Wait_Busy();
}

/*******************************************************************************/
/* PROCEDURE: WREN */
/* */
/* This procedure enables the Write Enable Latch. */
/* */
/* Input: None */
/* */
/* Returns: Nothing */
/* */
/*******************************************************************************/
void WREN(void)
{
Select_Serial_Memory;
SendSPIByte(0x06); /* send WREN command */
Deselect_Serial_Memory; /* disable device */
}

/*******************************************************************************/
/* PROCEDURE: WRDI */
/* */
/* This procedure disables the Write Enable Latch. */
/* */
/* Input: None */
/* */
/* Returns: Nothing */
/* */
/*******************************************************************************/
void WRDI(void)
{
Select_Serial_Memory;
SendSPIByte(0x04); /* send WRDI command */
Deselect_Serial_Memory; /* disable device */
}


/*******************************************************************************/
/* PROCEDURE: Read_ID */
/* */
/* This procedure reads the manufacturer’s ID and device ID. */
/* It will use 90h as the command to read the ID. It is up to */
/* the user to give the last byte ID_addr to determine whether */
/* the device outputs manufacturer’s ID first, or device ID first. */
/* Review the data sheets for details. */
/* Returns ID in variable byte. */
/* */
/* Input: ID_addr */
/* */
/* Returns: byte: ID1 */
/* */
/*******************************************************************************/
unsigned char Read_ID(unsigned char ID_addr)
{
unsigned char byte;
Select_Serial_Memory;
SendSPIByte(0x90); /* send read ID command */
SendSPIByte(0x00); /* send address */
SendSPIByte(0x00); /* send address */
SendSPIByte(ID_addr); /* send address - either 00H or 01H */
byte = GetSPIByte(); /* receive byte */
Deselect_Serial_Memory; /* disable device */
return byte;
}

/*******************************************************************************/
/* PROCEDURE: Read */
/* */
/* This procedure reads one address of the device. */
/* It will return the byte read in variable byte. */
/* */
/* Input: Dst: Destination Address 000000H - 07FFFFH */
/* */
/* Returns: byte */
/* */
/*******************************************************************************/
unsigned char Read(unsigned long Dst)
{
unsigned char byte = 0;
Select_Serial_Memory;
SendSPIByte(0x03); /* read command */
SendSPIByte(((Dst & 0xFFFFFF) >> 16)); /* send 3 address bytes */
SendSPIByte(((Dst & 0xFFFF) >> 8));
SendSPIByte(Dst & 0xFF);
byte = GetSPIByte();
Deselect_Serial_Memory; /* disable device */
return byte; /* return one byte read */
}


/*******************************************************************************/
/* PROCEDURE: Read_Cont */
/* */
/* This procedure reads multiple consecutive addresses of */
/* the device and stores the data into DataArray. */
/* */
/* Input: Dst: Destination Address 000000H - 07FFFFH */
/* no_bytes Number of bytes to read */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲精品成人久久奇米网| 91麻豆精品国产91久久久更新时间| 日韩免费成人网| 免费高清不卡av| 日韩午夜激情av| 久久国产综合精品| 精品99999| 丁香桃色午夜亚洲一区二区三区| 欧美激情在线一区二区| 成人av集中营| 亚洲欧美日韩国产一区二区三区| 色哟哟精品一区| 秋霞电影一区二区| 久久久久久日产精品| 粉嫩av一区二区三区| 亚洲色欲色欲www| 在线电影一区二区三区| 看电影不卡的网站| 国产精品理论在线观看| 在线亚洲人成电影网站色www| 三级欧美韩日大片在线看| 久久久久国产一区二区三区四区| www.成人网.com| 日韩专区中文字幕一区二区| 欧美成人免费网站| a亚洲天堂av| 日本不卡免费在线视频| 国产欧美日韩视频一区二区| 色天使色偷偷av一区二区| 老司机精品视频线观看86 | 精品视频色一区| 美腿丝袜在线亚洲一区| 国产精品免费免费| 欧美日本不卡视频| 国产99久久久国产精品| 午夜视频在线观看一区二区| 久久免费电影网| 欧美夫妻性生活| 成人性生交大片免费看在线播放| 亚洲电影第三页| 日本一二三不卡| 欧美一级生活片| 色综合天天综合给合国产| 免费人成网站在线观看欧美高清| 国产精品水嫩水嫩| 91精品婷婷国产综合久久| jlzzjlzz亚洲女人18| 久久97超碰国产精品超碰| 亚洲欧美一区二区三区国产精品 | 美女一区二区三区在线观看| 国产精品剧情在线亚洲| 日韩免费电影网站| 欧美日韩国产高清一区二区| 99天天综合性| 国产高清精品久久久久| 久久精品国产一区二区三| 亚洲夂夂婷婷色拍ww47| 国产精品国产三级国产普通话蜜臀| 欧美一级二级三级乱码| 欧美亚洲一区二区在线观看| 大美女一区二区三区| 国产一区二区在线看| 日韩专区一卡二卡| 亚洲精品日产精品乱码不卡| 国产欧美日产一区| 国产日韩精品视频一区| 精品欧美久久久| 日韩久久一区二区| 国产欧美日韩精品一区| ww亚洲ww在线观看国产| 日韩精品中文字幕一区| 日韩午夜在线播放| 日韩一级免费一区| 91精品国产综合久久精品麻豆| 色av一区二区| 在线免费观看日韩欧美| 日本丰满少妇一区二区三区| 91免费看视频| 色综合网站在线| 色婷婷激情一区二区三区| 色综合视频在线观看| 一本到不卡精品视频在线观看| 91在线码无精品| 欧美最猛黑人xxxxx猛交| 色94色欧美sute亚洲13| 欧美性大战久久久久久久蜜臀| 日本韩国欧美三级| 欧美亚洲国产一区二区三区va | 国产一区二区三区最好精华液| 日本网站在线观看一区二区三区| 亚洲电影视频在线| 男男gaygay亚洲| 久久激情五月激情| 国产xxx精品视频大全| 成人免费av在线| 色激情天天射综合网| 欧美性受极品xxxx喷水| 欧美久久久久久久久中文字幕| 91精品国产欧美一区二区成人| 91精品国产91久久综合桃花| 欧美变态tickle挠乳网站| 国产欧美精品日韩区二区麻豆天美| 国产精品无人区| 亚洲综合激情另类小说区| 日韩二区三区四区| 国产一区视频网站| 一本色道久久综合亚洲91 | 欧美理论在线播放| 一区二区三区四区在线播放| 一区二区免费在线| 麻豆国产精品777777在线| 国产成人日日夜夜| 在线观看亚洲成人| 精品日韩成人av| 中文字幕一区二区三区乱码在线| 综合精品久久久| 日韩成人精品在线观看| 国产精品69毛片高清亚洲| www.亚洲人| 欧美一级高清片在线观看| 欧美韩日一区二区三区| 亚洲18色成人| 国产成人亚洲综合a∨猫咪| 91成人免费网站| 国产欧美日韩综合精品一区二区| 亚洲狠狠丁香婷婷综合久久久| 久久99久久99小草精品免视看| 99久久国产综合精品色伊| 51精品国自产在线| 中文字幕制服丝袜一区二区三区 | 日韩国产欧美在线播放| 国产91富婆露脸刺激对白| 欧美日韩综合在线免费观看| 欧美精品一区视频| 亚洲一区欧美一区| 成人激情开心网| 2024国产精品| 婷婷开心激情综合| 国产精品久久久久aaaa樱花 | 欧美一区二区三区爱爱| 国产精品视频你懂的| 婷婷久久综合九色国产成人| 99久久精品国产麻豆演员表| 精品成人私密视频| 日本成人在线视频网站| 色猫猫国产区一区二在线视频| 国产欧美中文在线| 精品制服美女久久| 91精品视频网| 亚洲成人一区二区| 欧美性色黄大片手机版| 中文字幕在线观看不卡| 国产精品一色哟哟哟| 日韩欧美卡一卡二| 日本一区中文字幕| 欧美日韩在线一区二区| 亚洲美女视频在线| av不卡免费在线观看| 国产精品毛片高清在线完整版| 激情文学综合网| 精品久久久影院| 美女免费视频一区| 日韩三级视频在线观看| 蜜芽一区二区三区| 777色狠狠一区二区三区| 亚洲国产三级在线| 欧美日韩国产三级| 天天色 色综合| 欧美片在线播放| 日韩在线一二三区| 91精品国产欧美一区二区成人| 日本三级亚洲精品| 欧美成人video| 狠狠色丁香婷综合久久| 久久一区二区三区国产精品| 精品一区二区三区久久| 欧美mv和日韩mv国产网站| 麻豆91免费观看| 日韩免费一区二区| 国产永久精品大片wwwapp| 久久影院午夜片一区| 国产精选一区二区三区| 国产精品污www在线观看| caoporm超碰国产精品| 亚洲久本草在线中文字幕| 欧美最猛性xxxxx直播| 日韩精品三区四区| 久久综合九色综合97婷婷 | 国产精品久久久久久久久免费相片| 国产精品自在欧美一区| 国产精品区一区二区三区| 91麻豆福利精品推荐| 亚洲综合色噜噜狠狠| 777色狠狠一区二区三区| 久久国产剧场电影| 中文字幕乱码一区二区免费| 日本韩国视频一区二区| 青青青伊人色综合久久| 国产日韩欧美精品一区| 欧美综合亚洲图片综合区|