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

📄 main_stop2.c.bak

📁 基于485的51单片机多机通讯程序
💻 BAK
📖 第 1 页 / 共 5 页
字号:
					{
						POINTER1=0;
						RSUM=0;
					}
					S_ANSW=OK;
					data_type();
				}
				else
				{
					S_ANSW=FAIL;
					if(resend==0)
						resend=1;
				}
			}
		}
		else
			POINTER1=0;
	}
}

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)
	{
		if(readEEPbyte==1||readEEPpage==1||writeEEPpage==1||writeEEPword==1||writeEEPbyte==1)
		{
			nums++;
			if(readEEPbyte==1)
			{
				if(nums==1)
				{
					if(getPRG==1)
						S1DAT=0X00;
					S1CON=0xC5;//STA=0   STO=0    SI=0     AA=1
				}
				if(nums==2)
				{
					if(getPRG==1)
						SLA=0XA1;
					S1CON=0XE5;
				}
			}
			else
			{
				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(writeEEPpage==1)
					{
						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;
							writeEEPpage=0;
						}
					}
					else
					{
						if(writeEEPword==1)
						{
							if(nums<4)
							{
								if(param==1)
								{
									if(nums==1)
										COMM=(mainDDR+secondDDR)%256;
									if(nums==2)
										COMM=general_param/256;
									if(nums==3)
										COMM=general_param%256;
								}
								if(in_sector==1)
								{
									if(nums==1)
										COMM=(mainDDR+152+nonce_sec*60+p_sec*2)%256;
									if(nums==2)
										COMM=rbuffer[p_sec*2+3];
									if(nums==3)
										COMM=rbuffer[p_sec*2+4];
								}
	
								S1DAT=COMM;
								S1CON=0xC5;//STA=0   STO=0    SI=0     AA=1
							}
							else
							{
								S1CON=0xD5;
								writeEEPword=0;
							}
						}
						else
						{
							if(writeEEPbyte==1)
							{
								if(nums<3)
								{
									if(savePRG==1)
									{
										if(nums==1)
											COMM=0X00;
										else
											COMM=PRG;
									}
									S1DAT=COMM;
									S1CON=0xC5;//STA=0   STO=0    SI=0     AA=1
								}
								else
								{
									S1CON=0xD5;
									writeEEPbyte=0;
								}
							}
						}
					}
				}
			}
		}
		else
			S1CON=0XD5;
	}
	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==0X40)
	{
		if(readEEPbyte==1)
			S1CON=0XC1;
//		if(readEEPpage==1)
		else
			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)
	{
		GET=S1DAT;
		if(readEEPpage==1)
		{
			nums1++;
			if(times<5&&nums1<130||times==5&&nums1<114)
			{
				if(nums1%2==1)
					temp_GET=GET;
				else
				{
					temp_GET=temp_GET*256+GET;
					*(point+(times*64+nums1-delt))=temp_GET;
					delt++;
				}
				S1CON=0XC5;
			}
			else
				S1CON=0XC1;
		}
		else
			S1CON=0xC1;
	}
	if(S1STA==0x58)
	{
		
		if(readEEPbyte==1||readEEPpage==1)
		{
			GET=S1DAT;
			if(readEEPbyte==1)
			{
				S1CON=0xD5;//STA=0   STO=1    SI=0     AA=1
				readEEPbyte=0;
			}
			else
			{
				if(readEEPpage==1)
				{
					S1CON=0XD5;
					temp_GET=temp_GET*256+GET;
					*(point+(times*64+nums1-delt))=temp_GET;
					readEEPpage=0;
				}
			}
		}
		else
			S1CON=0xD5;
	}
	ES1=1;
}

void CT0_int (void) interrupt 6
{
	CTI0=0;
	IEN1=IEN1&0XFE;
	CTCON=CTCON&0XFC;
	
	if(enter==0)
	{
		SLA=0X40;
		COMM=0X02;
		start_i2a();
		delay(5);
		SLA=0X43;
		start_i2a();
		delay(5);
		switch(GET)
		{
			case 0xFB:	{
						start=1;
						enter=1;
					}break;
			case 0xF7:	{
						decrease=1;
						enter=1;
					}break;
			case 0xEF:	{
						current_add=1;
						enter=1;
					}break;
			case 0xDF:	{
						current_dec=1;
						enter=1;
					}break;
			default:	break;
		}
		if(enter==0)
		{
			SLA=0X40;
			COMM=0X01;
			start_i2a();
			delay(5);
			SLA=0X43;
			start_i2a();
			delay(5);
			switch(GET)
			{
				case 0xFE:	{
							rot_front=1;
							enter=1;
						}break;
				case 0xFD:	{
							rot_reverse=1;
							enter=1;
						}break;
				case 0xFB:	{
							wire_add=1;
							enter=1;
						}break;
				case 0xF7:	{
							wire_dec=1;
							enter=1;
						}break;
				case 0xEF:	{
							avc_up=1;
							enter=1;
						}break;
				case 0xDF:	{
							avc_down=1;
							enter=1;
						}break;
				case 0xBF:	{
							osc_l=1;
							enter=1;
						}break;
				case 0x7F:	{
							osc_r=1;
							enter=1;
						}break;
				default:	break;
			}
		}
		SLA=0X40;
		COMM=0X03;
		start_i2a();
		delay(5);
	}
	else
	{
		motor_stop=1;
		enter=0;
	}
	if(enter==1)
		CTCON=CTCON|0X01;
	else
		CTCON=CTCON|0X02;
	IEN1=IEN1|0X01;
}
	
void CM0_int (void) interrupt 11		//流程时钟,100ms中断一次
{
	CMI0=0;
	if(auto_return==0)
		c_flow++;
	else
	{
		if(c_end>0)
			c_end--;
		else
			IEN1=IEN1&0XEF;		//禁止CM0
	}
	CML0=TML2+0XD4;
	if(CML0>TML2)
		CMH0=TMH2+1+0X30;
	else
		CMH0=TMH2+0X30;				//100ms
}

main()
{
	unsigned char k;

	TMOD=0x22;			//定时器1,方式2;
	TL1=0XFD;			//波特率9600
	TH1=0XFD;
	TR1=1;				//启动定时器
	TMOD=0x23;			//定时器0,方式3,两个8位定时器;
	TR1=0;
	TF1=0;
	S0CON=0XC0;			//串口方式3,SM2=0,REN=0,TB8=1,RB8=0,TI=0,RI=0
	IP0=0X9C;			//S0=1,T1=1,EX1=1
	ES0=1;				//开串口中断
	ET1=1;
	ES1=1;				//I2C
 	EA=1;				//中断总允许
	start_t2();	
	
	stop=1;
	err=0;
	urgent_stop=0;
	main_err=0;
	p_forbid=0;
	rc_forbid=0;
	p_active=0;
	rc_active=0;
	calling=0;
	getPRG=0;
	readEEPbyte=0;
	readEEPpage=0;
	send_p_ok=0;
		
	rc_err=1;
	EX0=1;
	stop=0;
	while(rc_err==1);
	urgent_stop=0;
	EX0=1;
	
	S_ANSW=0;
	ans=0;
	R_ANSW=0;
	r_byte_nums=4;
	noans_ok=1;
	overtime=0;
	wait_ans=0;
	s_p=0;				//1,发送参数
	resend=0;
	
	last_FINISH=0;
	FINISH=0;
	readPRG();			//从EEPROM中读取上次使用的程序号
	delay(5);
	ini_ram();			//从EEPROM中读取当前程序号下的参数存入RAM	
	call_slave();			//点名	
	
//	delay(3);
AA:	while(send_p_ok==0)
	{
		ini_sbuf(M_ALL,command,com_send_p,0,0,0,0);
		s_byte_nums=4;
		TR_noans();
		send_param();		//更新RAM,及向从板发送参数
		if(urgent_stop==1)
		{
			urgent_stop=0;
			goto AA;
		}
		if(existent[4]==1)
		{
			delay(2);
			send_param1();
			if(urgent_stop==1)
			{
				urgent_stop=0;
				goto AA;
			}
		}
		ini_sbuf(M_ALL,command,com_send_p_ok,0,0,0,0);
		s_byte_nums=4;
		TR_noans();
		send_p_ok=1;
	}
	 send_p_ok=0;
	 switch_state();

BEGIN:	if(urgent_stop==1)
	{
		POINTER1=0;
		RSUM=0;
		r_byte_nums=4;
		urgent_stop=0;
		EX0=1;
	}
	IEN1=IEN1&0XEF;
//	reset=0x5555;
	send_p_ok=0;
	p_send=0;
	work=0;				//工作状态
	err=0;				//错误编号
	editing=0;			//正在编程
	change_sec_num=0;
	edit_finish=0;			//编程结束
	temp_edit_finish=0;
	param=0;
	p_out=0;
	change_prg=0;
	savePRG=0;
	copy=0;
	start=0;
	start_again=0;
	ignit_ok=0;			//引弧成功信号
	c_flow=0;
	c_sum=0;
	c_current=0;
	c_end=0;
	in_sector=0;
	nonce_sec=0;			//当前区间号
	t31OK=0;			//送丝已经开始=1
	t41OK=0;			//横摆已经开始=1
	t51OK=0;			//弧长已经开始=1
	wire_stoped=0;
	avc_stoped=0;
	
	CURRENT=0;
	VOLTAGE=0;
	AVC=0;
	decrease=0;
	decrease_ok=0;
	lift_ok=0;
	auto_return=0;
	return_ok=0;

	writeEEPbyte=0;
	writeEEPword=0;
	writeEEPpage=0;
	
	S_ANSW=0;
	ans=0;
	R_ANSW=0;
	r_byte_nums=4;
	noans_ok=1;
	overtime=0;
	wait_ans=0;
	s_p=0;				//1,发送参数
	resend=0;
	c_c_t1=0;

	rot_front=0;
	rot_reverse=0;
	wire_add=0;
	wire_dec=0;
	osc_l=0;
	osc_r=0;
	breadth_add=0;
	breadth_dec=0;
	avc_up=0;
	avc_down=0;
	motor_stop=0;
	new_switch11=0;
	new_switch22=0;
	delt_switch=0;
	rc_demand=0;
	c_ex1=0;
	enter=0;	

	CML0=TML2+0XD4;
	if(CML0<TML2)
		CMH0=TMH2+1+0X30;
	else
		CMH0=TMH2+0X30;			//CM0 100ms
	SLA=0X40;
	COMM=0X03;
	start_i2a();
	CTCON=CTCON|0X02;
	IEN1=IEN1|0X01;

	REN=1;
	while(start==0)
	{
		if(p_forbided==1&&p_forbid==0)
		{
			REN=0;
			ini_sbuf(M_P,command,com_forbid_p,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			REN=1;
			p_active=0;
			p_forbid=1;
		}

		if(rc_forbided==1&&rc_forbid==0)
		{
			REN=0;
			ini_sbuf(M_RC,command,com_forbid_rc,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			REN=1;
			rc_active=0;
			rc_forbid=1;
		}

		if(p_active==0&&p_actived==1&&p_forbided==0)
		{
			ini_sbuf(M_P,command,com_p_active,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			REN=1;
			p_forbid=0;
			p_active=1;
		}

		if(rc_active==0&&rc_actived==1&&rc_forbided==0)
		{
			ini_sbuf(M_RC,command,com_rc_active,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			ini_sbuf(M_RC,command,com_weld_simu,0,0,0,0);
			s_byte_nums=4;
			TR_ans();
			YOUHU=rbuffer[3];
			new_switch11=0;
			ini_sbuf(M_current,infor,com_weld_simu,YOUHU,0,0,0);
			s_byte_nums=6;
			TR_noans();
			ini_sbuf(M_RC,command,com_wire_on_off,0,0,0,0);
			s_byte_nums=4;
			TR_ans();
			WIRE=rbuffer[3];
			new_switch22=0;
			ini_sbuf(M_RW,infor,com_wire_on_off,WIRE,0,0,0);
			s_byte_nums=6;
			TR_noans();
			rc_forbid=0;
			rc_active=1;
			REN=1;
		}

		if(change_prg==1&&editing==0)	//程序号改变
		{
			PRG=rbuffer[2];
			save_prg();
			delay(2);
			ini_ram();
			delay(2);
			while(send_p_ok==0)
			{
				ini_sbuf(M_ALL,command,com_send_p,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				send_param();
				if(urgent_stop==1)
					goto AA;
				delay(2);
				send_param1();
				if(urgent_stop==1)
					goto AA;
				ini_sbuf(M_ALL,command,com_send_p_ok,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				send_p_ok=1;
			}
			send_p_ok=0;
			ini_sbuf(M_P_RC,program,PRG,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			change_prg=0;
			REN=1;
		}

		if(editing==1)		//编程
		{
			ini_sbuf(M_ALL,command,com_edit,0,0,0,0);
			s_byte_nums=4;
			TR_noans();
			work=1;
			edit();
			while(send_p_ok==0)
			{
				ini_sbuf(M_ALL,command,com_send_p,0,0,0,0);
				s_byte_nums=4;
				TR_noans();
				send_param();
				if(urgent_stop==1)
					goto AA;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -