/* å»ºè®®ä½ ç´æ¥çæ°æ®æåï¼æçæ°æ®æåä¸é½ç»åºä¾ç¨çï¼å¦STCï¼ãä¸é¢æç»ä½ 个STC89ç³»åçä¾ç¨ï¼ä½ å¯ä»¥åèä¸ä¸ãå¦æ³æ·±åº¦ç 究就对ç代ç çæ°æ®æåï¼å¦ç´æ³ç¨çè¯ï¼ç´æ¥æ¿æ¥ç¨å°±è¡ã*/
# include <reg52.h>
# include <intrins.h>
# define RdCommand 0x01 //å®ä¹ISPçæä½å½ä»¤
# define PrgCommand 0x02
# define EraseCommand 0x03
# define WaitTime 0x01 //å®ä¹CPUççå¾
æ¶é´ @11.0592MHz
# define Error 1
# define Ok 0
sfr ISP_DATA = 0xE2; //å¯åå¨ç³æ
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE5;
sfr ISP_TRIG = 0xE6;
sfr ISP_CONTR = 0xE7;
void ISP_IAP_enable(void) // æå¼ ISP,IAP åè½
{
EA = 0; // å
³ä¸æ
ISP_CONTR = ISP_CONTR & 0x18; // 0001,1000
ISP_CONTR = ISP_CONTR | WaitTime; // åå
¥ç¡¬ä»¶å»¶æ¶
ISP_CONTR = ISP_CONTR | 0x80; // ISPEN=1
}
void ISP_IAP_disable(void) // å
³é ISP,IAP åè½
{
ISP_CONTR = ISP_CONTR & 0x7F; // ISPEN = 0
ISP_TRIG = 0x00;
EA = 1; // å¼ä¸æ
}
void ISPgoon(void) // å
¬ç¨ç触å代ç
{
ISP_IAP_enable(); // æå¼ ISP,IAP åè½
ISP_TRIG = 0x46; // 触åISP_IAPå½ä»¤åè1
ISP_TRIG = 0xB9; // 触åISP_IAPå½ä»¤åè2
_nop_(); // 延æ¶ä¸ä¸ªæºå¨å¨æ
}
unsigned char byte_read(unsigned int byte_addr) // 读åè
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8); // å°åèµå¼
ISP_ADDRL = (unsigned char)(byte_addr & 0x00FF);
ISP_CMD = ISP_CMD & 0xF8; // æ¸
é¤ä½3ä½
ISP_CMD = ISP_CMD | RdCommand; // åå
¥è¯»å½ä»¤
ISPgoon(); // 触åæ§è¡
ISP_IAP_disable(); // å
³éISP,IAPåè½
return (ISP_DATA); // è¿å读å°çæ°æ®
}
void SectorErase(unsigned int sector_addr) //æåºæ¦é¤
{
// unsigned int iSectorAddr;
// iSectorAddr = (sector_addr & 0xFE00); // åæåºå°å
// ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
// ISP_ADDRL = 0x00;
ISP_ADDRH = (unsigned char)(sector_addr >> 8); // åæåºå°åé«8ä½
ISP_ADDRL = (unsigned char)sector_addr; // åæåºå°åä½8ä½
ISP_CMD = ISP_CMD & 0xF8; // æ¸
空ä½3ä½
ISP_CMD = ISP_CMD | EraseCommand; // æ¦é¤å½ä»¤3
ISPgoon(); // 触åæ§è¡
ISP_IAP_disable(); // å
³éISP,IAPåè½
}
void byte_write(unsigned int byte_addr, unsigned char original_data) // ååè
{
ISP_ADDRH = (unsigned char)(byte_addr >> 8); // åå°å
ISP_ADDRL = (unsigned char)(byte_addr & 0x00FF);
ISP_CMD = ISP_CMD & 0xF8; // æ¸
ä½3ä½
ISP_CMD = ISP_CMD | PrgCommand; // åå½ä»¤2
ISP_DATA = original_data; // åå
¥æ°æ®åå¤
ISPgoon(); // 触åæ§è¡
ISP_IAP_disable(); // å
³éIAPåè½
}
温馨提示:答案为网友推荐,仅供参考