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

📄 复件.c

📁 单片机TCP IP software
💻 C
📖 第 1 页 / 共 5 页
字号:
			asm("	NOP	 ");
		}
		SPITXBUF=0;
		while((SPISTS&0x0040)==0)
		{}
		b1=SPIRXBUF;
		b1&=0x00FF; /*屏蔽所读数据高8位*/
		*p1 |=b1;   /*取低8位*/
		p1++;
	} 
    for(i=1;i<10;i++)
	{
		asm("	NOP	 ");
	}
	DIS_SROM();
	for(i=1;i<15;i++)
	{
		asm("	NOP	 ");
	}	
}

	/*读数据*/
void Read_Data()
{ 
    EN_SROM(); 
    for(i=1;i<15;i++)
	{
		asm("	NOP	 ");
	}
	SPITXBUF=0x0300;
	while((SPISTS&0x0040)==0)
	{}
	b=SPIRXBUF;
    SPITXBUF=b2; 	/*高位地址*/
	while((SPISTS&0x0040)==0)
	{} 
	b=SPIRXBUF;
	SPITXBUF=b3;	/*低位地址*/	
	while((SPISTS&0x0040)==0)
	{}
	b=SPIRXBUF;
	for(i=1;i<10;i++)
	{
		asm("	NOP	 ");
	}
	SPITXBUF=0;
	while((SPISTS&0x0040)==0)
	{}
	b1=SPIRXBUF; 
    for(i=1;i<10;i++)
	{
		asm("	NOP	 ");
	}
	DIS_SROM();
	for(i=1;i<15;i++)
	{
		asm("	NOP	 ");
	}	

}    	 		




void Watch_dog()
{
	WDKEY=0x0055;
	WDKEY=0x00AA;
	
	O_DATA5=0x0001;
	IO_OUT1();
	asm("	NOP	 ");
	asm("	NOP	 ");
	asm("	NOP	 ");
	O_DATA5=0;
	IO_OUT1();
	asm("	NOP	 ");
	asm("	NOP	 ");
	asm("	NOP	 ");
	O_DATA5=0x0001;
	IO_OUT1();
}
	

void can_read()
{
	if(CANRCR&0x0010)	 /*是否邮箱接收到数据*/
	{
		CANIDBUF=CANID0H;
		CANIDBUF>>=5;
		CANIDBUF&=0x00FF;
		if(CANIDBUF==0x0004) /*当前数据为轿厢呼叫信号*/
		{           
			zz1box1=zz1box2;
			zz1box2=CANBX0A; 
			if(zz1box1==zz1box2)
			{
				zz1++;
			}
			else
			{
				zz1=0;
			}
			if(zz1>=5)
			{     
				zz1=0;
				CAN_P=(unsigned int*)&BOXDATE0; /*轿厢呼叫首址0380H*/
				*CAN_P=CANBX0A;  /*0380H*/
				CAN_BUF3=CANBX0A;      
				CAN_BUF3>>=8; 
				CAN_P++;         /*0381H*/
				*CAN_P=CAN_BUF3; 
			
				CAN_P++;         /*0382H*/
				*CAN_P=CANBX0B;
				CAN_BUF3=CANBX0B;
				CAN_BUF3>>=8;
				CAN_P++;         /*0383H*/
				*CAN_P=CAN_BUF3; 
			
				CAN_P++;         /*0384H*/
				*CAN_P=CANBX0C;
				CAN_BUF3=CANBX0C;
				CAN_BUF3>>=8;  
				CAN_P++;         /*0385H*/
				*CAN_P=CAN_BUF3; 
			
				CAN_P++;         /*0386H*/
				*CAN_P=CANBX0D;
				CAN_BUF3=CANBX0D;
				CAN_BUF3>>=8;
				CAN_P++;         /*0387H都是低8位代表呼叫*/
				*CAN_P=CAN_BUF3;  
			
				CAN_FLAG=0x0001;
			}
		}
		else if(CANIDBUF==0x0003)	/*当前数据为轿厢状态*/
		{
			zz2box1=zz2box2;
			zz2box2=CANBX0A; 
			if(zz2box1==zz2box2)
			{
				zz2++;
			}
			else
			{
				zz2=0;
			}
			if(zz2>=10)
			{
				zz2=0;
				
				STATEBOX=CANBX0A;
				CAN_FLAG=0x0002;
			}
		}
		else if(CANIDBUF>0x0010) 	/*当前数据为呼梯信号*/
		{

				//CAN_BUF0=CANID0L; 
				CAN_BUF0=CANIDBUF;
				CAN_BUF0-=0x0010;
				CAN_BUF1=CANBX0A;		/*上行*/
 				if(CAN_BUF1==0)/*无上行*/
				{
					CAN_P=(unsigned int*)&UPDATE0;
					CAN_P+=(CAN_BUF0/8);
					CAN_BUF2=0x0001;
					CAN_BUF2<<=(CAN_BUF0%8-1);
					CAN_BUF2=~CAN_BUF2;
					*CAN_P&=CAN_BUF2;
				}
				else if(CAN_BUF1==0x0FFFF)/*有上行*/
				{
					CAN_P=(unsigned int*)&UPDATE0;
					CAN_P+=(CAN_BUF0/8);
					CAN_BUF2=0x0001;
					CAN_BUF2<<=(CAN_BUF0%8-1);
					*CAN_P|=CAN_BUF2;
				}
				
				CAN_BUF1=CANBX0B;		/*下行*/
				if(CAN_BUF1==0)/*无下行*/
				{
					CAN_P=(unsigned int*)&DOWNDATE0;
					CAN_P+=(CAN_BUF0/8);
					CAN_BUF2=0x0001;
					CAN_BUF2<<=(CAN_BUF0%8-1);
					CAN_BUF2=~CAN_BUF2;
					*CAN_P&=CAN_BUF2;
				}
				else if(CAN_BUF1==0x0FFFF)/*有下行*/
				{
					CAN_P=(unsigned int*)&DOWNDATE0;
					CAN_P+=(CAN_BUF0/8);
					CAN_BUF2=0x0001;
					CAN_BUF2<<=(CAN_BUF0%8-1);
					*CAN_P|=CAN_BUF2;
				}	
				CAN_FLAG=0x0004;
		}
		else
		{
			CAN_FLAG=0;
		}
		CANRCR=0x00F0;     /*复位RMP0和MIF0*/ 
		asm("	CLRC   INTM ");/*开中断*/ 
	}
	CANIFR=0x0FFFF;		/* 清除全部CAN中断标志 */
}			

void c_int1()
{
	asm("	CLRC   INTM ");/*开中断*/
}

void c_int3()
{
   	asm("	CLRC   INTM ");/*开中断*/
}


void c_int2()
{ 
    if(PIVR==0x002F)  /*是否定时器10MS到*/
    {
        timeint=0;
        TIMER_CHECK=0; 
        k1++;
     	b4++;
   	   	TIMEUP1|=0x0003;	/*10MS定时到标志*/
  	    T100MS--;
  	    if(T100MS==0)
  	    {
   	    	TIMEUP1|=0x000C;
  	    	T100MS=10;
  	    	T1S--;
  	    	if(T1S==0)
  	    	{
  	    	   	TIMEUP1|=0x0030;
  	    		DLY1S=1;
  	    		T1S=10;
    		}
  	    }
 	} 
        EVBIFRB=0x0FFFF;
  	    EVBIFRA=0x0FFFF;
  	    IFR|=0x0002;   
 		asm("	CLRC   INTM ");/*开中断*/
}



void c_int4()
{
    asm("	CLRC   INTM ");/*开中断*/
}

void c_int6()
{
	asm("	CLRC   INTM ");/*开中断*/
}

void c_int5()
{    
   asm("	CLRC   INTM ");/*开中断*/
  }


void IO_init()
{
	MCRA=0x001B;		/*A,B口配置0000000000011011B*/
	MCRB=0x00DC;		/*C,D口配置0000000011011100B*/
	MCRC=0;				/*E,F口配置0000000000000000B*/
	PADATDIR=0x00FF;	/*A口输入,初始高电平*/
	PBDATDIR=0x00FF;	/*B口输入,初始高电平*/
	PCDATDIR=0x20DF;	/*C口输入,C5输出,初始低电平*/
	PDDATDIR=0x01FF;	/*D口输入,D0口输出,初始高电平*/
	PEDATDIR=0x00FF;	/*E口输入,初始高电平*/
	PFDATDIR=0x00FF;	/*F口输入,初始高电平*/ 
}


void Io_Receive()
{
	IA_BUF1=IA_BUF;
	IB_BUF1=IB_BUF;
	IE_BUF1=IE_BUF;
	IF_BUF1=IF_BUF;
	
	IA_BUF=PADATDIR;
	IB_BUF=PBDATDIR;
	IC_BUF=PCDATDIR;
	ID_BUF=PDDATDIR;
	IE_BUF=PEDATDIR;
	IF_BUF=PFDATDIR; 
	IA_BUF^=0x00FF; /*与1异或信号取反,与0异或无影响*/
	IB_BUF^=0x00FF;
	IC_BUF^=0x00FF;
	ID_BUF^=0x00FF;
	IE_BUF^=0x00FF;
	IF_BUF^=0x00FF; 
	
	IA_BUF1&=0x00C4;
	IA_BUF&=0x00C4;
	
	IB_BUF&=0x00FF;
	IB_BUF1&=0x00FF;
	
	IE_BUF&=0x00FE; 
	IE_BUF1&=0x00FE;
	
	IF_BUF&=0x007F; 
	IF_BUF1&=0x007F; 
	
	
	b1=(IA_BUF1==IA_BUF)&&(IB_BUF==IB_BUF1);
	b2=(IE_BUF1==IE_BUF)&&(IF_BUF==IF_BUF1);
	if(b1&&b2)
	{
		b13++;
	}
	else
	{
		b13=0;
	}
	if(b13==50)
	{		 
		b13=0; 
		IN_AB=IN_BB=IN_CB=0; 
       	if(IA_BUF&0x0004)	/*XD2*/
		{                  
			IN_AB|=0x0008;  			
		}  
		if((IF_BUF&0x0008)&&(~IB_BUF&0x0001))     /*SGM且无RUN*/	
		{                  
			IN_BB|=0x0020; 			
		}  
        if(IA_BUF&0x0040)  /*SK*/ 
		{
			IN_AB|=0x0004;  
		}
		if(IA_BUF&0x0080)  /*XD1*/
		{
			IN_AB|=0x0002;
		}
		if(IE_BUF&0x0002)   /*KV*/
		{
			b15++;
			if(b15==2)
			{
				b15=0;
				IN_AB|=0x0001;
			}
		}
        if((IE_BUF&0x0004)&&(~IB_BUF&0x0001))     /*猫眼且无RUN*/   
		{
			IN_AB|=0x0080;
		}
        if((IE_BUF&0x0008)&&(~IB_BUF&0x0001))     /*SKM且无RUN*/	    
		{
			IN_AB|=0x0040;
		}
		if(IE_BUF&0x0010)     /*BZ触点闭合*/
		{
			IN_AB|=0x0020;
		}
		if(IE_BUF&0x0020)      /*门区*/
		{
			IN_AB|=0x0010;   
		}   
		if(IE_BUF&0x0040)     /*主接触器触点粘连*/
		{
			IN_BB|=0x0001;
		} 
		if(IE_BUF&0x0080)     /*MX*/
		{
			IN_BB|=0x0002;
		} 
		if(~IF_BUF&0x0001)     /*GX2*/
		{
			IN_BB|=0x0004;
		} 
		if(IF_BUF&0x0002)     /*MS*/
		{
			IN_BB|=0x0008;
		} 
		if(IF_BUF&0x0010)     /*SD1*/
		{
			IN_BB|=0x0040;
		}
		if(IF_BUF&0x0020)     /*XF*/
		{
			IN_BB|=0x0080;
		}   
		if(~IF_BUF&0x0040)     /*MB*/
		{
			IN_CB|=0x0001;
		}  
		if(IB_BUF&0x0001)     /*RUN*/
		{
			IN_CB|=0x0002;
		}
		if(IB_BUF&0x0002)     /*ZS*/
		{
			IN_CB|=0x0004;
		}
		if(~IB_BUF&0x0004)     /*GX*/
		{
			IN_CB|=0x0008;
		}
		if(IB_BUF&0x0008)     /*XK*/
		{
			IN_CB|=0x0010;
		}
		if(IB_BUF&0x0010)     /*SD2*/
		{
			IN_CB|=0x0020;
		}
		if(IB_BUF&0x0020)     /*MSR*/
		{
			IN_CB|=0x0040;
		}
		if(~IB_BUF&0x0040)     /*GV*/
		{
			IN_CB|=0x0080;
		}
		if(IB_BUF&0x0080)     /*CB1*/
		{
			IN_BB|=0x0010;
		} 
	}
}

void Io_Send()
{
	O_DATA1=O_DATA2=O_DATA3=0x0FFFF; 
	
	if(AOPSYMBOL&0x0001)	/*主接触器闭合标志*/
	{
		O_DATA1&=0x0FFFC;	
	}
	if(AOPSYMBOL&0x0002)	/*开门标志*/
	{
		if(DOOR==2)
		{
			O_DATA2|=0x000E;
			O_DATA2&=0x0FFFE;
		}
		else if(DOOR==3)
		{
			O_DATA2|=0x000B;
			O_DATA2&=0x0FFFB;
		}
		else
		{
			O_DATA2|=0x000A;
			O_DATA2&=0x0FFFA;
		}
	}
	else if(BOPSYMBOL&0x0001)	/*关门标志*/
	{
		if(DOOR==2)
		{
			O_DATA2|=0x000D;
			O_DATA2&=0x0FFFD; 
		}
		else if(DOOR==3)
		{
			O_DATA2|=0x0007;
			O_DATA2&=0x0FFF7; 
		}
		else
		{
			O_DATA2|=0x0005;
			O_DATA2&=0x0FFF5; 
		}
	}
	if(BOPSYMBOL&0x0020)	/*上行标志*/
	{
		O_DATA2|=0x0020;
		O_DATA2&=0x0FFEF;
	}
	else if(BOPSYMBOL&0x0040)	/*下行标志*/
	{
		O_DATA2|=0x0010;
		O_DATA2&=0x0FFDF;
	}
	if(DOPSYMBOL&0x0002)	/*检修速度*/
	{
		O_DATA1|=0x00F0;
		O_DATA1&=0x0FFEF;
	}
	else if(COPSYMBOL&0x0080)	/*爬行*/
	{
		O_DATA1|=0x00F0;
		O_DATA1&=0x0FF7F;
	}
	else if(COPSYMBOL&0x0001)	/*高速*/
	{
		O_DATA1|=0x00F0;
		O_DATA1&=0x0FFDF;
	}
	else if(COPSYMBOL&0x0002)	/*中速*/
	{
		O_DATA1|=0x00F0;
		O_DATA1&=0x0FFBF;
	}
	if(COPSYMBOL&0x0040)	/*抱闸*/
	{
		O_DATA1&=0x0FFF3;
	}

	if(DTIMESYMBOL&0x0040)	/*无动作60s*/
	{
		O_DATA2&=0x0FF7F;	/*轿厢照明和风扇控制*/
	}  
	
	
	if(k4==5)
	{
		O_DATA4 ^=0x0001;/*定时器500ms到LED灯闪*/
		k4=0;
	}
		
	if(b11>=1000)     /*收到26次CAN信息LED灯闪*/
	{
		O_DATA4^=0x0002;
		b11=0;
	}
	if(b12>=1000)     /*每次SCI发送LED灯闪*/
	{
		O_DATA4^=0x0004;
		b12=0;
	}
		 
	IO_OUT();
}

void CAN_init()
{
	
	CANLAM0H=0x9FFF;			/* 使用LAM0 */
	CANLAM0L=0x0FFFF;				/* 接收所有信息 */
	 
	CANMCR=0x1000;			/* 配置寄存器改变请求 */ 
	while((CANGSR & 0x0010)==0);
	CANBCR2=0x0003;			/* 设置数据传输率:250Kbps */
	CANBCR1=0x0061;
	CANMCR=0x0000;
	while((CANGSR & 0x0010)==1);
	
	CANMDER=0x0000;			/* 初始化禁止邮箱的使能位 */ 
	CANMCR=0x0100;			/* 数据域改变请求 */
	 	
	CANID0H=0x4000;         /*标准帧,可接收不符信息 */
	CANID0L=0x0000;			/* ID=4000H, 29位 */
	CANCTRL0=0x0008;        /* 数据帧,8个字节 */ 
	
	CANID4H=0x4000;
	CANID4L=0x0000;			/* ID=4000H, 29位 */
	CANCTRL4=0x0008;        /* 数据帧,8个字节 */ 
       	
	CANID5H=0x4040;
	CANID5L=0x0000;			/* ID=4040H, 29位 */
	CANCTRL5=0x0008;        /* 数据帧,8个字节 */
	 
	CANMCR=0x0480; 		/*正常工作模式,升序以及ABO设置*/
	CANMDER=0x0031;		/*Box0和Box4,Box5使能 */

	CANIFR=0x0FFFF;			/* 清除全部CAN中断标志 */
	CANIMR=0x8000;			/* 不允许邮箱0接收中断*/ 
	CANTCR=0x0FFFF;
	CANRCR=0x0FF0;     		/*允许信息覆盖*/
} 

void Can_Receive()
{
	if(CAN_FLAG!=0)		/*是否更新*/
	{
		asm("	SETC   INTM ");/*关闭所有可屏蔽中断*/
		if(STATEBOX&0x0021)	/*有无司机,有无满载信号*/
		{
			if(STATEBOX&0

⌨️ 快捷键说明

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