⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ini_ram.c

📁 基于485的51单片机多机通讯程序
💻 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 + -