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

📄 waterctrl4.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
		Systemnum[2]=0xff;
		WRITE_E2PROM(Systemnum,SystemNumADD,3,0);
	}

	/*	enaible all key	*/ 

	KEYDOWNEN;
	KBINTINTEN;
	
	/*	INTERRUPT	*/ 
	RCONbits.IPEN  = 1;								//enaible interrput pirnoty						
	INTCONbits.PEIE  = 1;                              			//Open low interrupt enailbe 
	INTCONbits.GIE = 1;								//Open interrupt enaible

	/*	WDT	*/
//	CONFIG2Hbits.WDTPS2 =  
//	CONFIG2Hbits.WDTPS1 =  
//	CONFIG2Hbits.WDTPS0 =  
//	WDTCOMbits.SWDTEN = 1;						//enaible WDT  	
//	CLRDOG;
	systemflag	= 0;
	systemflag2	= 0;
	systemflag3	= 0;
	systemflag3 |= 0x01;
}

//*****************************************************************//
//Name 		:Interrupl
//Input		:void
//Output	:void
//Function	:Low address interrupt ISR(low prinoty)
//D.R.P		:QiuHao
//Date		:06.06.11
//*****************************************************************//
void interruptl(void)
{
	//---------------timer0
	if(TIMER0INTF)
	{
		CLRTIMER0INTF;
	}	

	//---------------timer1
	if(TIMER1INTF)							//openning velve at this time
	{
		CLRTIMER1INTF;

	}
	//---------------timer2
	if(TIMER2INTF)
	{
		CLRTIMER2INTF;		

	}
	//---------------timer3
	if(TIMER3INTF)
	{
		CLRTIMER3INTF;
	}

	//---------------UART1 RXD1
	if(UART1RXINTIF)
	{
		CLRUART1RXINTF;

	}
	//---------------UART2 RXD2
	if(UART2RXINTIF)
	{
		CLRUART2RXINTF;

	}

	//---------------A/D module

	//---------------KBINT-INT3
	if(_INT3F)
	{
		CLR_INT3F;
		KBINTINTDS;

		SETKEYDOWNIN;
		SETKEYUPIN	;
		SETKEYONOFFIN	;
		SETKEYSELIN;	

		SETKBINTOUT;
		KBINTOUT = 1;
		Delay10KTCYx(15);
		if(KEYDOWNIN)
		{
			systemflag2	|= 0x08;				//give water
		}
		if(KEYUPIN)
		{
			systemflag2	|= 0x01;				//setting

		}
		if(KEYONOFFIN)						//Add 
		{
			systemflag2 |= 0x04;
		}
		if(KEYSELIN)							//DCE
		{
			systemflag2	|= 0x02;
		}
								
		if((systemflag2&0x0f)==0x03)				//more than one key turn on that is user error opeation 
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x05)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x06)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x07)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x09)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x0a)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x0b)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x0c)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x0d)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x0e)
			systemflag2 &= 0xf0;
		if((systemflag2&0x0f)==0x0f)
			systemflag2 &= 0xf0;
		
		SETKBINTIN;
		KBINTOUT = 1;
		SETKEYDOWNOUT;
		SETKEYUPOUT;
		SETKEYONOFFOUT;
		SETKEYSELOUT;
							
		KEYDOWNOUT = 0;					//all keys are close	
		KEYUPOUT = 0;						//
		KEYONOFFOUT = 0;					//
		KEYSELOUT = 0;						//
		Delay10KTCYx(10);// 
		while(!KBINTIN);
		KBINTINTEN;
		CLR_INT3F;		
	}
	//---------------RBINT
	/*
	if(_RBINTF)
	{
		CLR_RBINTF;
		if(systemflag4&0x02)
		{
			if(VELSTACLIN=0)
			{
				RSTVEL;
				RSTVEL;
				IBINTDS;
				systemflag4 &= 0xfd; 
			}
		}
	}
	*/
	ENPIE; 
	ENGIE;
}						

//*****************************************************************//
//Name 		:Interruph
//Input		:void
//Output	:void
//Function	:High address interrupt ISR (high prinoty)
//D.R.P		:QiuHao
//Date		:06.12.6
//*****************************************************************//	
void interrupth(void)												
{   
	//---------------------------------------------------------------	
	if(_INT0F)     		//SIN1 
	{  
//		SOUT1OUT = 1;
//		SOUT1OUT = 0;
 		SIN1INTDS;
		if(cntorder & 0x01)
		{
			cntkeyerr |= 0x04 ;
			countWTRCNT +=1;
			GuHGERRCNT+=1;			
		}
		cntorder = 0x01;				//set sin1 flag 
		if(!SIN2IN)					//two count key on at same time set error flag ?
		{
			cntkeyerr = 0x02 ;

		}
		countWTRCNT +=1;
		CLR_INT0F;
		SIN1INTEN;
//		ENPIE; 
//		ENGIE;
		return;	
	}
	//---------------------------------------------------------------
	if(_INT1F)						//SIN2
	{
//		SOUT2OUT = 1;
//		SOUT2OUT = 0;
 		SIN2INTDS;
		if(cntorder & 0x02)
		{
			cntkeyerr |= 0x40 ;
			countWTRCNT +=1;	
			GuHGERRCNT+=1;			
		}
		cntorder = 0x02;				//set sin2 flag 
		if(!SIN1IN)					//two count key on at same time set error flag
		{
			cntkeyerr |= 0x20;
		}
		countWTRCNT +=1;
		CLR_INT1F;
		SIN2INTEN;
//		ENPIE; 
//		ENGIE;
		return;	
	}
}

//*****************************************************************//
//Name 		:Uart1senddata
//Input		:unsigned char num        //Number of bytes that will sent 
//			:unsigned char *dpoint    //data area pointer
//Output	:void
//Function	:Uart1 sent data
//D.R.P		:QiuHao
//Date		:06.06.11
//*****************************************************************//
void Uart1senddata(unsigned char num , unsigned char *dpoint)
{
	for(;num>0;num--)
	{ 
		TXREG1 = *(dpoint++);
		while(!TXSTA1bits.TRMT);  //if TRMT == 1 that RCREG! is empyt, the data did been sent   
 	}
}

//*****************************************************************//
//Name 		:Uart2senddata
//Input		:unsigned char num        //Number of bytes that will sent 
//			:unsigned char *dpoint    //data area pointer
//Output	:void
//Function	:Uart2 sent data
//D.R.P		:QiuHao
//Date		:06.06.11
//*****************************************************************//
void Uart2senddata(unsigned char num , unsigned char *dpoint)
{
	for(;num>0;num--)
	{
		RCREG2 = *dpoint;
		while(!TXSTA2bits.TRMT);  
		//if TRMT == 1 that RCREG2 is empyt, the data did been sent   
		dpoint++;
 	}
}

//*****************************************************************//
//Name 		:IsFindCard
//Input		:void				
//Output		:unsigned char :0x01:Been find Card
//							0x00:found on Card 
//Function		:Estimate has find card?  
//D.R.P		:QiuHao
//Date			:06.07.05
//*****************************************************************//
unsigned char IsFindCard(void)
{
		unsigned char tempa;
		RevBuffer[0] = 0x02 ;						 //Load Command 
		RevBuffer[1] = 0x26 ;						 //Load Command
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
		{							 
		if((RevBuffer[0] == 0x03) && (RevBuffer[1] == 0x00))
			return 0x01;
		}
		return 0x00;
}

//*****************************************************************//
//Name 		:IsConflictOk
//Input		:void				
//Output		:unsigned char :0x01:ok
//							0x02:defeated 
//Function	:
//D.R.P		:QiuHao
//Date			:06.07.05
//*****************************************************************//
unsigned char  IsConflictOk(void)
{
		unsigned char tempa; 
		RevBuffer[0] = 0x03 ;						 //Load Command
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
		{							 
		if((RevBuffer[0] == 0x05) && (RevBuffer[1] == 0x00))
			return 0x01;
		}
		return 0x02;
}

//*****************************************************************//
//Name 		:IsSelectCradOk
//Input		:void				
//Output		:unsigned char :0x01:ok
//				 0x03:defeated 
//Function	:
//D.R.P		:QiuHao
//Date			:06.7.05
//*****************************************************************//
unsigned char  IsSelectCradOk(void)
{
		unsigned char tempa;
		RevBuffer[0] = 0x04 ;						 //Load Command
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
		{							 
		if((RevBuffer[0] == 0x01) && (RevBuffer[1] == 0x00))
			return 0x01;
		}
		return 0x03;
}

//*****************************************************************//
//Name 		:DownLoadm1CradKey
//Input		:unsigned char :sectornum (0-15)
//			:unsigned char :keyab   (0x60 keya || 0x61 keyb)						
//Output	:unsigned char :0x01:download m1 crad key code ok
//		      	0x04:mater is be using and download m1 crad key code defeated 
//				0x05:mater is not be using and download m1 crad key code defeated 
//
//Function	:download m1 crad key code ok
//D.R.P		:QiuHao
//Date		:06.07.05
//*****************************************************************//
unsigned char DownLoadm1CradKey(unsigned char sectornum,unsigned char keyab)
{
		unsigned char tempa;
		unsigned char tempab;
		RevBuffer[0] = 0x06;
		RevBuffer[1] = keyab;                        //load keya or keyb
		RevBuffer[2] = sectornum;				     //load sector number
		READ_E2PROM(&tempa,BeingUserFlagADD,1,0);
		if(tempa==0xa5)
		{
			READ_E2PROM(RevBuffer+3,HartCardLoadPWAdd,6,0);
		}
		else
		{
			RevBuffer[1]=0x60; 
			RevBuffer[3]=0xff;
			RevBuffer[4]=0xff;
			RevBuffer[5]=0xff;
			RevBuffer[6]=0xff;
			RevBuffer[7]=0xff;
			RevBuffer[8]=0xff;
		}
		DsInt;
		Cmd_process();
		OpInt;		
		for(tempab=100;tempab>0;tempab--)
		{
			if(RevBuffer[0]==1)
				if(RevBuffer[1]==0)
					return 0x01;                     //Down load mi crad key ok
		}
		if(tempa==0xa5)	
		{
			return 0x04;
		}
		else
		{
			return 0x09;
		}
}

//*****************************************************************//
//Name 		:RdCdOneBnk
//Input		:unsigned char banknum:which bank in the card
//Output	:unsigned char :0x01:ok
//			0x05:read card is error
//			0x06:read data checksun is error				
//Function	:
//D.R.P		:QiuHao
//Date		:06.12.4
//*****************************************************************//
unsigned char RdCdOneBnk(unsigned char whichbank)
{
		unsigned char tempa=0,tempb=0,tempc=0;		
		RevBuffer[0] = 0x08;
		RevBuffer[1] = whichbank;
		DsInt;
		Cmd_process();
		OpInt;	
		for(tempa=100;tempa>0;tempa--)
		{
			if((RevBuffer[0]== 0x11)&&( RevBuffer[1]==0x00))
				{
					for(tempb=2;tempb<17;tempb++)
					tempc += RevBuffer[tempb]; 
					if(tempc!=RevBuffer[17])        //check bank cs
						return 0x06;                //bank cs error 

					if(whichbank == 4)
					{
							CdBnk4Grp[0] = RevBuffer[2];
							CdBnk4Grp[1] = RevBuffer[3];
							CdBnk4Grp[2] = RevBuffer[4];
							CdBnk4Grp[3] = RevBuffer[5];
							CdBnk4Grp[4] = RevBuffer[6];
							CdBnk4Grp[5] = RevBuffer[7];
							CdBnk4Grp[6] = RevBuffer[8];
							CdBnk4Grp[7] = RevBuffer[9];
							CdBnk4Grp[8] = RevBuffer[10];
							CdBnk4Grp[9] = RevBuffer[11];
							CdBnk4Grp[10] = RevBuffer[12];
							CdBnk4Grp[11] = RevBuffer[13];
							CdBnk4Grp[12] = RevBuffer[14];
							CdBnk4Grp[13] = RevBuffer[15];
							CdBnk4Grp[14] = RevBuffer[16];
							CdBnk4Grp[15] = RevBuffer[17];
					}
					if(whichbank == 5)
					{
							CdBnk5Grp[0] = RevBuffer[2];
							CdBnk5Grp[1] = RevBuffer[3];
							CdBnk5Grp[2] = RevBuffer[4];
							CdBnk5Grp[3] = RevBuffer[5];
							CdBnk5Grp[4] = RevBuffer[6];
							CdBnk5Grp[5] = RevBuffer[7];
							CdBnk5Grp[6] = RevBuffer[8];
							CdBnk5Grp[7] = RevBuffer[9];
							CdBnk5Grp[8] = RevBuffer[10];
							CdBnk5Grp[9] = RevBuffer[11];
							CdBnk5Grp[10] = RevBuffer[12];
	

⌨️ 快捷键说明

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