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

📄 waterctrlv3.c

📁 一个基于PIC18F单片机的开发的流量计量仪表
💻 C
📖 第 1 页 / 共 5 页
字号:
	CLR_RBINTF;


	/*	timer1	*/ 
/*

	//Do 0.131s timer for system Open/Close valve   
	T1CONbits.TMR1ON	= 0;
	T1CONbits.TMR1CS = 0;						//using internal clock
	T1CONbits.T1OSCEN = 0;						//
	T1CONbits.T1CKPS0 = 1;						//1:8 
	T1CONbits.T1CKPS1 = 1;						//
	T1CONbits.RD16 = 1;							//set 16 bit timer
	PIR1bits.TMR1IF   = 0;							//
	IPR1bits.TMR1IP = 0;							//low interrupt pirnoty
	TMR1L = 0x00; 
	TMR1H = 0x00;
	PIE1bits.TMR1IE = 0;
*/

	/*	timer2	*/ 
/*

	//ues for infrared
//	TCON2bits.TMR2ON = 0;
//	TCON2bits.T2CKPS1 = 0;  
//	TCON2bits.T2CKPS0 = 0;						//Fclk/1=4MHz   Tt2 = 0.25uS
//	TCON2bits &= 0x00;							//0.25uS one 
//	PR2 = 26;									//for 38K
//	PR2 = 17;									//for 56K
//	PR2 = 8;										//for 115K
	IPR1bits.TMR2IP = 0;
	PIR1bits.TMR2IF = 0;
	PIE1bits.TMR2IE = 0;
*/

	/*	timer3	*/ 
/*

	//ues for 
	T3CONbits.TMR3ON  = 0;
	T3CONbits.T3CKPS1 = 1;						// 1/4 
	T3CONbits.T3CKPS0 = 0;
	T3CONbits.RD16    = 1;						//16 bit timer
	T3CONbits.TMR3CS  = 0;						//clock from fosc/4	T3CONbits.TMR3ON  = 0;
	IPR2bits.TMR3IP   = 0;						//low interrupt pirnoty
	PIE2bits.TMR3IE   = 0;
	PIR2bits.TMR3IF   = 0;
	TMR3L = 0x00;
	TMR3H = 0x00;
*/

	/*	System Device initialez	*/ 
	InitE2prom();
	En_dswork();  
	InitHT1623Port();
	InitLcdDpy();
	for(systemtemp =0;systemtemp<40;systemtemp++)
	{
		Wr1BCDNumToLcd( 19, systemtemp);
	}

	READ_E2PROM(&carderrorbyte,BeingUserFlagADD,1,0);	
	if(carderrorbyte!=0xa5)
	{
		KEY_B[0]=0xff;
		KEY_B[1]=0xff;
		KEY_B[2]=0xff;
		KEY_B[3]=0xff;
		KEY_B[4]=0xff;
		KEY_B[5]=0xff;
		WRITE_E2PROM(KEY_B,HartCardLoadPWAdd,6,0);
		Systemnum[0]=0xff;
		Systemnum[1]=0xff;
		Systemnum[2]=0xff;
		WRITE_E2PROM(Systemnum,SystemNumADD,3,0);
	}

	/*	enaible all key	*/ 

	KEYUPEN;
	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);// 0.16s
		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;
		}
}

//*****************************************************************//

⌨️ 快捷键说明

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