📄 flash.c
字号:
#include "STC12C5410AD.h"
#include "app.h"
#include <string.h>
#include <stdio.h>
#include <INTRINS.H>
unsigned char flash_byte_read(unsigned int address);
void sector_erase(unsigned int address);
void flash_MuxByteWrite(unsigned int address,unsigned char *pData,unsigned char len);
void flash_byte_Write(unsigned int address,unsigned char buffer);
extern unsigned int GetSetInitCount(unsigned int Speed);
extern unsigned int Current_Montor_Count;
extern unsigned int CurrentSpeed;
extern struct _LED
{
unsigned char status ; // LED状态
unsigned char temp ; // 温度值
}LED;
unsigned char flash_byte_read(unsigned int address)
{
ISP_CONTR = ENABLE_ISP;
ISP_CMD = IAP_BYTE_READ;
ISP_ADDRH = address>>8;
ISP_ADDRL = address&0x00ff;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
return(ISP_DATA);
}
void flash_byte_Write(unsigned int address,unsigned char buffer)
{
ISP_CONTR = ENABLE_ISP;
ISP_CMD = IAP_BYTE_WRITE;
ISP_ADDRH = (address>>8);
ISP_ADDRL = address&0x00ff;
ISP_DATA = buffer ;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
}
void flash_MuxByteWrite(unsigned int address,unsigned char *pData,unsigned char len)
{
unsigned char i;
for(i=0;i<len;i++)
{
flash_byte_Write(address++,*pData++);
}
}
void sector_erase(unsigned int address)
{
ISP_CONTR = ENABLE_ISP;
ISP_CMD = IAP_SECTOR_ERASE;
ISP_ADDRH = (unsigned char)(address>>8);
ISP_ADDRL = (unsigned char)(address&0x00ff);
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
}
extern unsigned char PS2_temp[13];
ScanTableIndexDef ScanTableindex;
IndexPamDef IndexPam;
void CreateScanTable(void)
{
ScanTableindex.sum =2;
ScanTableindex.current = 1;
ScanTableindex.systemstatus = 1;
sector_erase(SaveTableAddressSum);
flash_MuxByteWrite(SaveTableAddressSum,(unsigned char*)&ScanTableindex,sizeof(ScanTableindex));
sector_erase(SaveTableIndexAddress);
PS2_temp[0] = 9;
PS2_temp[1] = 7;
PS2_temp[2] = 8;
PS2_temp[3] = 7;
PS2_temp[4] = 1;
PS2_temp[5] = 2;
PS2_temp[6] = 1;
PS2_temp[7] = 0;
PS2_temp[8] = 2;
PS2_temp[9] = 4;
PS2_temp[10] = 9;
PS2_temp[11] = 4;
PS2_temp[12] = 8;
flash_MuxByteWrite(SaveTableIndexAddress,PS2_temp,13);
IndexPam.maxspeed = 2700;
IndexPam.minspeed = 800;
IndexPam.maxtemp = 80;
IndexPam.mintemp = 10;
IndexPam.fengjiworktime = 1;
IndexPam.fireworktime = 1;
IndexPam.bigsongliaoworktime = 2;
IndexPam.bigsongliaostoptime = 25;
IndexPam.smallsongliaoworktime =2;
IndexPam.smallsongliaostoptime =65;
IndexPam.stopfengjiworktime = 1;
IndexPam.setbigholdtime = 1;
IndexPam.setsmallholdtime = 1;
flash_MuxByteWrite(SaveTableIndexAddress+13,
(unsigned char*)&IndexPam,sizeof(IndexPam));
PS2_temp[0] = 9;
PS2_temp[1] = 7;
PS2_temp[2] = 8;
PS2_temp[3] = 7;
PS2_temp[4] = 5;
PS2_temp[5] = 0;
PS2_temp[6] = 5;
PS2_temp[7] = 3;
PS2_temp[8] = 8;
PS2_temp[9] = 1;
PS2_temp[10] = 5;
PS2_temp[11] = 3;
PS2_temp[12] = 7;
flash_MuxByteWrite(SaveTableIndexAddress+13+sizeof(IndexPam),PS2_temp,13);
IndexPam.maxspeed = 800;
IndexPam.minspeed = 800;
IndexPam.maxtemp = 60;
IndexPam.mintemp = 20;
IndexPam.fengjiworktime = 1;
IndexPam.fireworktime = 1;
IndexPam.bigsongliaoworktime = 2;
IndexPam.bigsongliaostoptime = 5;
IndexPam.smallsongliaoworktime =2;
IndexPam.smallsongliaostoptime =15;
IndexPam.stopfengjiworktime = 1;
IndexPam.setbigholdtime = 1;
IndexPam.setsmallholdtime = 1;
flash_MuxByteWrite(SaveTableIndexAddress+13+sizeof(IndexPam)+13,
(unsigned char*)&IndexPam,sizeof(IndexPam));
}
void ReadScanTable(void)
{
unsigned char i;
unsigned int addr;
unsigned char *p;
EA = 0;
addr = SaveTableAddressSum;
ScanTableindex.sum = flash_byte_read(addr++);
ScanTableindex.current = flash_byte_read(addr++);
p = (unsigned char *)&IndexPam;
addr = SaveTableIndexAddress + (13 + sizeof(IndexPam))*ScanTableindex.current+13;
for(i=0;i<sizeof(IndexPam);i++)
{
*p++ = flash_byte_read(addr++);
}
EA = 1;
}
void UpdateCurrentPam(void)
{
unsigned char i,j;
unsigned int addr;
unsigned char *p;
EA = 0;
addr = SaveTableAddressSum;
ScanTableindex.sum = flash_byte_read(addr++);
ScanTableindex.current = flash_byte_read(addr++);
for(i=0;i<ScanTableindex.sum;i++)
{
addr = SaveTableIndexAddress + (13 + sizeof(IndexPam))*i;
if( (PS2_temp[0] == flash_byte_read(addr++) ) &&
(PS2_temp[1] == flash_byte_read(addr++) ) &&
(PS2_temp[2] == flash_byte_read(addr++) ) &&
(PS2_temp[3] == flash_byte_read(addr++) ) &&
(PS2_temp[4] == flash_byte_read(addr++) ) &&
(PS2_temp[5] == flash_byte_read(addr++) ) &&
(PS2_temp[6] == flash_byte_read(addr++) ) &&
(PS2_temp[7] == flash_byte_read(addr++) ) &&
(PS2_temp[8] == flash_byte_read(addr++) ) &&
(PS2_temp[9] == flash_byte_read(addr++) ) &&
(PS2_temp[10] == flash_byte_read(addr++) ) &&
(PS2_temp[11] == flash_byte_read(addr++) ) &&
(PS2_temp[12] == flash_byte_read(addr++) ) )
{
p = (unsigned char *)&IndexPam;
for(j=0;j<sizeof(IndexPam);j++)
{
*p++ = flash_byte_read(addr++);
}
break;
}
}
if(ScanTableindex.current != i) // 更新当前索引
{
ScanTableindex.current = i;
sector_erase(SaveTableAddressSum);
flash_MuxByteWrite(SaveTableAddressSum,(unsigned char*)&ScanTableindex,sizeof(ScanTableindex));
}
EA = 1;
}
void savesystemstatus(unsigned char status)
{
ScanTableindex.systemstatus = status; //
sector_erase(SaveTableAddressSum);
flash_MuxByteWrite(SaveTableAddressSum,(unsigned char*)&ScanTableindex,sizeof(ScanTableindex));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -