📄 ini_ram.c
字号:
#include <ini_ram.h>
bit writeEEP,save_PRG;
unsigned char PRG;
unsigned int mainDDR,nums,delt,nums1;
unsigned char COMM,SLA,FF,GET,times;
unsigned int *point;
bit readEEPpage;
void start_i2a()
{
P1_6=1; //SCL
P1_7=1; //SDA
S1CON=0x47; //ENS1=1 STA=0 STO=0 SI=0 AA=1
PS1=1;
EA=1;
ES1=1;
STA=1;
}
void delay(int num)
{
data unsigned int i,ii;
for(i=0;i<num;i++)
{
for(ii=0;ii<255;ii++);
}
}
void get_SLA1()
{
unsigned char temp_PRG;
if(PRG<50)
{
SLA=0XA0;
temp_PRG=PRG;
}
else
{
if(PRG<100)
{
SLA=0XA2;
temp_PRG=PRG-50;
}
else
{
if(PRG<150)
{
SLA=0XA4;
temp_PRG=PRG-100;
}
else
{
SLA=0XA6;
temp_PRG=PRG-150;
}
}
}
mainDDR=temp_PRG*768;
}
void writeEEP_word()
{
nums=0;
writeEEP=1;
SLA=0XA0;
COMM=0XFF;
start_i2a();
while(writeEEP==1);
}
void writeEEP_page(unsigned char t) //将指定专家参数复制到目的程序号下
{
nums=0;
delt=2;
writeEEP=1;
get_SLA1();
COMM=(mainDDR+t*128)/256;
start_i2a();
while(writeEEP==1);
}
void S1_INT (void) interrupt 5 //I2C
{
ES1=0;
if(S1STA==0x00)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0X08)
{
S1DAT=SLA;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0X10)
{
S1DAT=SLA;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0X18)
{
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(S1STA==0X20)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0X28)
{
nums++;
if(readEEPpage==1)
{
if(times<6&&nums<130)
{
if(nums==1)
{
COMM=(mainDDR+times*128)%256;
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
if(nums==2)
{
SLA=SLA+1;
S1CON=0XE5;
}
}
}
else
{
if(save_PRG==1)
{
if(nums<3)
{
if(nums==1)
COMM=0X00;
else
COMM=PRG;
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
else
{
S1CON=0xD5;
writeEEP=0;
}
}
else
{
if(times<6&&nums<130)
{
if(nums==1)
COMM=(mainDDR+times*128)%256;
else
{
if(times==5&&nums>=114)
COMM=0xFF;
else
{
if(nums%2==0)
{
COMM=*(point+(times*64+nums-delt))/256;
delt++;
}
else
COMM=*(point+(times*64+nums-delt))%256;
}
}
S1DAT=COMM;
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
}
else
{
S1CON=0xD5;
writeEEP=0;
}
}
}
}
if(S1STA==0x30)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0x38)
S1CON=0xE5;//STA=1 STO=0 SI=0 AA=1
if(S1STA==40)
S1CON=0xC5;//STA=0 STO=0 SI=0 AA=1
if(S1STA==0x48)
{
FF=1;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
if(S1STA==0x50)
{
// j++;
GET=S1DAT;
// if(j%2==1)
// temp_GET=(int)(GET*256);
// else
// {
// jj++;
// temp_GET=temp_GET+GET;
// *(point+j-jj)=temp_GET;
// }
// if(j<numbers)
S1CON=0XC5;
// else
// S1CON=0XC1;
}
if(S1STA==0x58)
{
GET=S1DAT;
// temp_GET=temp_GET+GET;
// if(getPRG==1) //获取上次使用的程序号
// {
// PRG=temp_GET; //当前程序号
// lastPRG=temp_GET; //上次使用的程序号
// readEEPword=0;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
// }
// else
// {
// if(readEEPpage==1) //按页读取EEPROM
{
// *(point+j-jj)=temp_GET;
FF=1;
// readEEPpage=0;
S1CON=0xD5;//STA=0 STO=1 SI=0 AA=1
}
// }
}
ES1=1;
}
main()
{
unsigned char m,n;
save_PRG=0;
pp.t01=20;
pp.t02=50;
pp.gas2=OFF;
pp.t03=20;
pp.t04=50;
pp.k1=PDC;
pp.ignit=HF;
pp.i11=200;
pp.t12=20;
pp.i12=400;
pp.t13=2;
pp.t13_sd=0;
pp.t14=20;
pp.i14=1000;
pp.t15=20;
pp.i15=400;
pp.di=20;
pp.ahf=OFF;
pp.i16=50;
pp.f=100;
pp.t16=50;
pp.n11=3660;
pp.n11_sd=1;
pp.t17=50;
pp.i17=200;
pp.k2=CW;
pp.rn=1000;
pp.d=254;
pp.k21=OFF;
pp.v21_p=90;
pp.v21_b=90;
pp.t21=10;
pp.t21_sd=0;
pp.dv21=10;
pp.b=OFF;
pp.k3=OFF;
pp.k31=OFF;
pp.wn=1000;
pp.t31=20;
pp.t31_sd=1;
pp.t32=1;
pp.t32_sd=0;
pp.v31_p=200;
pp.v31_b=200;
pp.dv31=20;
pp.t33=3620;
pp.t33_sd=1;
pp.v32=1000;
pp.t34=5;
pp.k4=OFF;
pp.syn_type=LR;
pp.t41=20;
pp.t41_sd=1;
pp.t42_l=5;
pp.t42_r=5;
pp.v41=400;
pp.a41=50;
pp.dc41=2;
pp.da41=2;
pp.t43=1;
pp.t43_sd=0;
pp.k5=OFF;
pp.pgj=OFF;
pp.h51=20;
pp.t51=10;
pp.t51_sd=1;
pp.t52=3660;
pp.t52_sd=1;
pp.avc_type=SP;
pp.u51_p=100;
pp.u51_b=100;
pp.sens=5;
pp.du51=1;
pp.h52=0;
pp.sec_num=0;
for(m=0;m<10;m++)
{
pp.x[m][0]=0;
pp.x[m][1]=2;
pp.x[m][2]=20;
pp.x[m][3]=1000;
pp.x[m][4]=20;
pp.x[m][5]=400;
pp.x[m][6]=OFF;
pp.x[m][7]=50;
pp.x[m][8]=100;
pp.x[m][9]=50;
pp.x[m][10]=254;
pp.x[m][11]=OFF;
pp.x[m][12]=90;
pp.x[m][13]=90;
pp.x[m][14]=10;
pp.x[m][15]=OFF;
pp.x[m][16]=OFF;
pp.x[m][17]=1;
pp.x[m][18]=200;
pp.x[m][19]=200;
pp.x[m][20]=OFF;
pp.x[m][21]=5;
pp.x[m][22]=5;
pp.x[m][23]=400;
pp.x[m][24]=50;
pp.x[m][25]=1;
pp.x[m][26]=100;
pp.x[m][27]=100;
pp.x[m][28]=5;
pp.x[m][29]=1;
}
for(PRG=0;PRG<100;PRG++)
{
pp.pn=PRG;
point=&pp.pn;
for(times=0;times<6;times++)
{
writeEEP_page(times);
delay(5);
}
}
PRG=0;
save_PRG=1;
writeEEP_word();
while(1)
{
P1_2=0;
delay(300);
P1_2=1;
delay(300);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -