📄 stcisp.c
字号:
#include <stcad.c>
// 打开 ISP,IAP 功能 //
void ISP_IAP_enable(void)
{
EA = 0; // 关中断 //
ISP_CONTR = ISP_CONTR & 0x18; // 0001,1000 //
ISP_CONTR = ISP_CONTR | WAIT_TIME;
ISP_CONTR = ISP_CONTR | 0x80; // 1000,0000 //
}
// 关闭 ISP,IAP 功能 //
void ISP_IAP_disable(void)
{
ISP_CONTR = ISP_CONTR & 0x7f; // 0111,1111 //
ISP_TRIG = 0x00;
EA = 1; // 开中断 //
}
// 字节读 //
uchar byte_read(uint byte_addr)
{
ISP_ADDRH = (uchar)(byte_addr >> 8);
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; // 1111,1000 //
ISP_CMD = ISP_CMD | READ_AP_and_Data_Memory_Command; // 0000,0001 //
ISP_IAP_enable();
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
_nop_();
ISP_IAP_disable();
return (ISP_DATA);
}
// 扇区擦除 //
sector_erase (uint sector_addr)
{
uint get_sector_addr = 0;
get_sector_addr =(sector_addr & 0x2e00); // 0010,1110,0000,0000; 取扇区地址 //
ISP_ADDRH = (uchar)(get_sector_addr >> 8);
ISP_ADDRL = 0x00;
ISP_CMD = ISP_CMD & 0xf8; // 1111,1000 //
ISP_CMD = ISP_CMD | SECTOR_ERASE_AP_and_Data_Memory_Command; // 0000,0011 //
ISP_IAP_enable();
ISP_TRIG = 0x46; // 触发ISP_IAP命令 //
ISP_TRIG = 0xb9; // 触发ISP_IAP命令 //
_nop_();
ISP_IAP_disable();
return OK;
}
// 字节编程 //
uchar byte_program(uint byte_addr, uchar original_data)
{
ISP_ADDRH = (uchar)(byte_addr >> 8);
ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
ISP_CMD = ISP_CMD & 0xf8; // 1111,1000 //
ISP_CMD = ISP_CMD | PROGRAM_AP_and_Data_Memory_Command; // 0000,0010 //
ISP_DATA = original_data;
ISP_IAP_enable();
ISP_TRIG = 0x46; // 触发ISP_IAP命令 //
ISP_TRIG = 0xb9; // 触发ISP_IAP命令 //
_nop_();
ISP_IAP_disable();
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -