📄 stciap.c
字号:
/**********************************************
* 文件名:STCIAP.C
/**********************************************/
#include "REG51STC.H"
#include "CMD16887.H"
#include "externxy.h"
//-----------------------------------------------------
#define DATA_FLASH_START_ADDRESS 0x8000 //STC89C58RD+
#define ENABLE_ISP 0x81 //等待时间
/************************************************
* 功能:IAP字节读
*************************************************/
uchar byte_verify(uint add)
{
ISP_CMD=1;
set_isp_add(add);
trigger_isp();
return(ISP_DATA);
}
/***********************************************
* 功能:字节编程
************************************************/
void byte_program(uint add,uchar *ptr)
{
ISP_CMD=2;
set_isp_add(add);
ISP_DATA=*ptr;
trigger_isp();
if(*ptr!=byte_verify(add)) isp_err=1; //只要有1个字节写入不正确则出错
}
/**********************************************
* 功能:扇区擦除
***********************************************/
void sector_erase(uint add)
{
ISP_CONTR=ENABLE_ISP;//等待时间
ISP_CMD=0x03;
set_isp_add(add);
trigger_isp();
iap_disable(); //关闭IAP功能
}
/**********************************************
* 功能:触发ISP
***********************************************/
void trigger_isp(void)
{
EA=0;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
;
EA=1;
}
/***********************************************
* 功能:送地址
************************************************/
void set_isp_add(uint add)
{
ISP_ADDRH=add/256;
ISP_ADDRL=add%256;
}
/***********************************************
* 功能:关闭IAP功能
************************************************/
void iap_disable(void)
{
ISP_CONTR=0;
ISP_CMD=0;
ISP_TRIG=0;
}
/*************************************************
* 功能:保存IAP系统参数
*************************************************/
void iap_sys_save(uint add,uchar *pi,uchar amount)
{ uchar i;
sector_erase(add); //扇区擦除
ISP_CONTR=ENABLE_ISP;//等待时间
for(i=0;i<amount;i++)
{
byte_program(add+i,pi+i);
}
iap_disable(); //关闭IAP功能
}
/*************************************************
* 功能:读IAP系统参数
*************************************************/
void iap_sys_read(uint add,uchar *pi,uchar amount)
{ uchar i;
ISP_CONTR=ENABLE_ISP;//等待时间
for(i=0;i<amount;i++)
{
*(pi+i)=byte_verify(add+i);
}
iap_disable(); //关闭IAP功能
}
/*************************************************
* 功能:恢复系统参数
**************************************************/
void renew_sysdata(void)
{ void *pt;
pt=&residue_a;
iap_sys_read(DATA_FLASH_START_ADDRESS,pt,20);
}
/*************************************************
* 功能:系统参数备份
**************************************************/
void backup_sysdata(void)
{ void *pt;
pt=&residue_a;
iap_sys_save(DATA_FLASH_START_ADDRESS,pt,20);
pt=&invoice_number; //发票编号
writebyteseq(506,pt,4);
}
/*************************************************
* 功能:打印格式数据备份
**************************************************/
void backup_printer_format(void)
{ void *pt;
pt=&print_format;
iap_sys_save(DATA_FLASH_START_ADDRESS+512,pt,150);
}
/*************************************************
* 功能:恢复打印格式
**************************************************/
void renew_printer_format(void)
{ void *pt;
pt=&print_format;
iap_sys_read(DATA_FLASH_START_ADDRESS+512,pt,150);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -