?? flash_m16._h
字號(hào):
/*對(duì)FLASH進(jìn)行讀寫的函數(shù)
* 器件:AVR AT MEAG16 373鎖存
* FLASHROM:W49F002U
* PA0~7,PC0~7地址和數(shù)據(jù)線
* PD5 讀始能 PD6 寫始能 PD7 ALE
*
*/
#define ALE_HIGH() PORTD |=0X01; //定義ALE管腳
#define ALE_LOW() PORTD &=0XFE;
#define W_EN_HIGH() PORTD |=0B00000010; //定義寫始能
#define W_EN_LOW() PORTD &=0B11111101;
#define R_EN_HIGH() PORTD |=0B00000100; //定義讀始能
#define R_EN_LOW() PORTD &=0B11111011;
//**************************************************************/
unsigned char FlashRead(long int data_adress); //定義FLASH讀函數(shù)
void FlashWrite(unsigned int data_adress,unsigned char data);//定義FLASH寫函數(shù)
void ChipErase(void); //片擦除
void SectoErase(char sector); //區(qū)擦除
void BootBlockLockout(void);
void AdressSend(long int adress);
/***************************************************************/
//按BIT讀FLASHROM
unsigned char FlashRead(long int data_adress)
{
char data;
R_EN_LOW(); //讀始能打開,低電平有效
W_EN_HIGH(); //寫始能關(guān)閉
AdressSend(data_adress); //送地址
DDRA =0X00; //
data =PINA; //從A口讀數(shù)據(jù)
R_EN_HIGH(); //讀始能關(guān)閉
return data; //返回?cái)?shù)據(jù)
}
//按BIT寫FLASHROM
void FlashWrite(unsigned int data_adress,unsigned char data)
{
W_EN_LOW(); //寫始能打開,低電平有效
R_EN_HIGH(); //讀始能關(guān)閉
AdressSend(0x5555); //送地址
DDRA =0XFF;
PORTA =0XAA;
AdressSend(0x2AAA); //送地址
DDRA =0XFF;
PORTA =0X55;
AdressSend(0x5555); //送地址
DDRA =0XFF;
PORTA =0XA0;
AdressSend(data_adress); //送地址
DDRA =0XFF;
PORTA =data;
W_EN_HIGH(); //寫始能關(guān)閉
}
//片擦除
void ChipErase(void)
{
W_EN_LOW(); //寫始能打開,低電平有效
R_EN_HIGH(); //讀始能關(guān)閉
AdressSend(0x5555); //送地址
DDRA =0XFF;
PORTA =0XAA;
AdressSend(0x2AAA); //送地址
DDRA =0XFF;
PORTA =0X55;
AdressSend(0x5555); //送地址
DDRA =0XFF;
PORTA =0X80;
AdressSend(0X5555); //送地址
DDRA =0XFF;
PORTA =0XAA;
AdressSend(0X2AAA); //送地址
DDRA =0XFF;
PORTA =0X55;
AdressSend(0X5555); //送地址
DDRA =0XFF;
PORTA =0X10;
W_EN_HIGH(); //寫始能關(guān)閉
}
//送地址到FLASH和373
void AdressSend(long int adress)
{
ALE_HIGH(); //ALE設(shè)置為高
DDRA =0XFF; //設(shè)定A口為輸出
DDRC =0XFF; //設(shè)定C口為輸出
DDRD =0XFF; //設(shè)定D口為輸出
PORTA =adress&0xff; //送底8位地址A0~A7 PA0~7
PORTC =(adress>>8)&0xff; //送中間8位地址A8~A15 PC0~7
PORTD =(PORTD&0xE7)|((adress>>13)&0x18); //送地址A16~A17 PD3~4
ALE_LOW(); //鎖存數(shù)據(jù)
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -