📄 stc89c52.h
字号:
#ifndef STC89C52_h
#define STC89C52_h
/*_____ I N C L U D E S ____________________________________________________*/
#include "board.h" /* board definition */
/*_____ M A C R O S ________________________________________________________*/
/* 新增特殊功能寄存器定义 */
sfr ISP_DATA = 0xE2; // ISP/IAP Flash Data Register. Data got from e2prom or to be wrriten into the e2prom are all put on here
sfr ISP_ADDRH = 0xE3; // ISP/IAP Flash Address High
sfr ISP_ADDRL = 0xE4; // ISP/IAP Flash Address Low
sfr ISP_CMD = 0xE5; // ISP/IAP Flash Command Register
sfr ISP_TRIG = 0xE6; // ISP/IAP Flash Command Trigger
sfr ISP_CONTR = 0xE7; // ISP/IAP Flash Control Register
/**************** 定义Flash 操作等待时间 ****************************/
#define MCU_CLOCK_40MHz
//#define MCU_CLOCK_20MHz
//#define MCU_CLOCK_10MHz
//#define MCU_CLOCK_5MHz
#ifdef MCU_CLOCK_40MHz
#define WAIT_TIME 0x00
#endif
#ifdef MCU_CLOCK_20MHz
#define WAIT_TIME 0x01
#endif
#ifdef MCU_CLOCK_10MHz
#define WAIT_TIME 0x02
#endif
#ifdef MCU_CLOCK_5MHz
#define WAIT_TIME 0x03
#endif
/*********************** E2prom Command **********************************/
#define E2PROM_READ_CMD 0x01
#define E2PROM_WRITE_CMD 0x02
#define E2PROM_ERASE_CMD 0x03
//sbit ISPEN = ISP_CONTR^7;
/*********************** Low Level Routine ***********************************/
#define E2prom_write_byte(e2prom_data) (ISP_DATA=e2prom_data)
#define E2prom_read_byte() (ISP_DATA)
#define E2prom_send_cmd(command) (ISP_CMD=command)
#define E2prom_send_add_high(add_high) (ISP_ADDRH=add_high)
#define E2prom_send_add_low(add_low) (ISP_ADDRL=(add_low)
#define E2prom_send_trig(trig) (ISP_TRIG=trig)
#define E2prom_send_control(control) (ISP_CONTR=control)
/************ ISP/IAP Command Mode **************************************/
#define E2prom_stanby() (ISP_CMD=0x00) // Stanby
/************* Open Read command **************************************/
#define E2prom_read_on() \
ISP_CMD=0xF8; \
ISP_CMD=E2PROM_READ_CMD
/************ Open Write Command *************************************/
#define E2prom_write_on() \
ISP_CMD=0xF8; \
ISP_CMD=E2PROM_WRITE_CMD
/************ Open Erase Command *************************************/
#define E2prom_Erase_on() \
ISP_CMD=0xF8; \
ISP_CMD=E2PROM_ERASE_CMD
//#define E2prom_on() (ISPEN=1)
//#define E2prom_off() (ISPEN=0)
/*************使ISP/IAP命令生效***************************/
#define E2prom_execute_cmd() \
ISP_TRIG=0x46; \
ISP_TRIG=0xB9; \
_nop_()
/*************打开ISP,IAP 功能*******************************/
/* EA=0 关中断WIAT_TIME置等待时间 */
/* ISPEN置1 允许ISP/IAP功能 */
/************************************************************/
#define E2prom_enable() \
EA = 0; \
ISP_CONTR=ISP_CONTR & 0x18; \
ISP_CONTR=ISP_CONTR | WAIT_TIME;\
ISP_CONTR=ISP_CONTR | 0x80
/************* 清空ISP/IAP状态 避免误操作*************/
#define E2prom_disenable() \
ISP_CONTR =0x7F; \
ISP_CMD =0x00; \
ISP_TRIG =0x00; \
ISP_ADDRH =0x00; \
ISP_ADDRL =0x00; \
EA =1
/************* Definition ************************************/
extern Uint16 e2prom_free_add; //向E2PROM写入新的GPS数据时,新GPS数据在E2PROM中的地址
extern Uint16 e2prom_update_add; //用于指示在把新的设备状态信息更新到e2prom中时,数据在e2prom的地址
extern Uint16 e2prom_gl_add; // 通用地址用于切换e2prom_free_add e2prom_update_add
/************* Declaration ***************************************/
Byte e2prom_read_bytes(Byte len); // 读取len个字节数据并保存到gl_buffer
bit e2prom_sector_erase(); // 删除一个扇区
bit e2prom_write_bytes(Int16 len); // 写入gl_buffer中len个字节数据
#endif //STC89C52_h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -