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

📄 waterctrlv2.c

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

	/*	timer0	*/ 
	//Do 1s timer for system	display
	T0CONbits.TMR0ON	= 0;
	T0CONbits.T08BIT	= 0;								//16bit timer
	T0CONbits.T0CS		= 0;
//	T0CONbits.T0SE		= 0;
	T0CONbits.PSA		= 0;
	T0CONbits.T0PS2	= 1;								//64:1	
	T0CONbits.T0PS1	= 0;
	T0CONbits.T0PS0	= 1;
	INTCONbits.TMR0IF	= 0;								//Clear interrupt flag
	INTCON2bits.TMR0IP	= 0;								//low  interrupt pironty
	TMR0L	= 0x00; 
	TMR0H	= 0x00;
	INTCONbits.TMR0IE	= 1;								//Enable interrupt Timer0

	/*	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 = 1;


	/*	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 = 1;


	/*	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   = 1;
	PIR2bits.TMR3IF   = 0;
	TMR3L = 0x00;
	TMR3H = 0x00;
	/*	System Device initialez	*/ 
	En_dswork();  
	InitHT1623Port();
	InitialFM1702(0);
	InitLcdDpy();
	ReadTime(systemtime);
	Wr1BCDNumToLcd(systemtime[0]&0x0f, 28);      	 //X
	Wr1BCDNumToLcd((systemtime[0]&0xf0)>>4, 27); //X*10
	Wr1BCDNumToLcd(systemtime[1]&0x0f, 26);
	Wr1BCDNumToLcd((systemtime[1]&0xf0)>>4, 25);
	Wr1BCDNumToLcd(systemtime[2]&0x0f, 24);
	Wr1BCDNumToLcd((systemtime[2]&0xf0)>>4, 23);
	Wr1BCDNumToLcd(systemtime[3]&0x0f, 21);
	Wr1BCDNumToLcd((systemtime[3]&0xf0)>>4, 20);
	Wr1BCDNumToLcd(systemtime[4]&0x0f, 19);
	Wr1BCDNumToLcd((systemtime[4]&0xf0)>>4, 18);
	Wr1BCDNumToLcd(systemtime[6]&0x0f, 17);
	Wr1BCDNumToLcd((systemtime[6]&0xf0)>>4, 16);
	READ_E2PROM(&carderrorbyte,BeingUserFlagADD,1);	
	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);
		Systemnum[0]=0xff;
		Systemnum[1]=0xff;
		Systemnum[2]=0xff;
		WRITE_E2PROM(Systemnum,SystemNumADD,3);
	}

	KEYDOWNEN;	 
	KEYONOFFEN;
	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;
}

//*****************************************************************//
//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;
		if(systemflag3 & 0x01)
		{
			if(!VELSTAOPIN)
			{
				RSTVEL;
				TIMER1OFF;
				CLRTIMER1INTF;
				TURNADOFF;
				DYP_OpenValve_Flg();
			}
			else
			{
				if(!ADSTA)
				{
					adresult = ADVALH;
					adresult <<= 8;
					adresult += ADVALL; 
					if(adresult<=0x0001)
					{
						RSTVEL;
						TIMER1OFF;
						TURNADOFF;
						CLRADINTF;
						CLRTIMER1INTF;
						DYP_OpenValve_Flg();
					}	
				}	
			}
		}
		else								//closing velve at this time
		{
			if(!VELSTACLIN)
			{
				RSTVEL;
				TIMER1OFF;
				CLRTIMER1INTF;
				TURNADOFF;
				DPY_CloseValve_Flg();
			}
			else
			{
				if(!ADSTA)
				{
					adresult = ADVALH;
					adresult <<= 8;
					adresult += ADVALL; 
					if(adresult<=0x0001)
					{
						RSTVEL;
						TIMER1OFF;
						TURNADOFF;
						CLRADINTF;
						CLRTIMER1INTF;
						DPY_CloseValve_Flg();
					}	
				}	
			}

		}
	}
	//---------------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 = 0;

		if(!KEYDOWNIN)
		{
			systemflag2	|= 0x08;
		}
		if(!KEYUPIN)
		{
			systemflag2 |= 0x04;
		}
		if(!KEYONOFFIN)						//Read card 
		{
			systemflag2 |= 0x02;
		}
		if(!KEYSELIN)
		{
			systemflag2	|= 0x01;
		}
								
		if(systemflag2&0x03)				//more than one key turn on that is user error opeation 
			systemflag2 &= 0xf0;			
		if(systemflag2&0x05)
			systemflag2 &= 0xf0;
		if(systemflag2&0x07)
			systemflag2 &= 0xf0;
		
		SETKBINTIN;
		KBINTOUT = 1;
		SETKEYDOWNOUT;
		SETKEYUPOUT;
		SETKEYONOFFOUT;
		SETKEYSELOUT;
							
		KEYDOWNOUT = 1;					//all keys are close	
		KEYUPOUT = 1;						//
		KEYONOFFOUT = 1;					//
		KEYSELOUT = 1;						//

		KBINTINTEN;
		CLR_INT3F;		
	}




	INTCONbits.PEIE  = 1; 
	return;
}						

//*****************************************************************//
//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 
	{
		CLR_INT0F;  
		SOUT1OUT = 1;
		if(!SIN2IN)					//two count key on at same time set error flag ?
		{
			cntkeyerr |= 0x02 ;
			systemflag2 |= 0x10;	
		}
		if(SIN1IN)				     //SIN1 disturb?
		{
			cntkeyerr |= 0x01;
			systemflag2 |= 0x10;
		}
		if(cntorder==0x01)		     //SIN1 key on two times?
		{
			cntkeyerr |= 0x04;	
			systemflag2 |= 0x10;		
		}
		else
		{
			cntorder &= 0x01;		
		}
		AddUsingValueOp(panma);
		carderrorbyte=WrCdOneBnk(5);
		if(carderrorbyte!=0x01)
		{
			systemflag2 |= 0x10;
			carderrorbyte = 0x22;
		}
		SOUT1OUT = 0;
	}
	//---------------------------------------------------------------
	if(_INT1F)				//SIN2
	{
		CLR_INT1F;
		SOUT2OUT = 1;
		if(!SIN1IN)						//two count key on at same time set error flag
		{
			cntkeyerr |= 0x20;
			systemflag2 |= 0x10;
		}
		if(SIN2IN)
		{
			cntkeyerr |= 0x10;
			systemflag2 |= 0x10;
		}
		if(cntorder == 0x02)
		{
			cntkeyerr |= 0x40;		
		}
		else
		{
			cntorder &= 0x02;
		}
		AddUsingValueOp(panma);
		carderrorbyte=WrCdOneBnk(5);
		if(carderrorbyte!=0x01)
		{
			systemflag2 |= 0x10;
			carderrorbyte = 0x22;
		}
		SOUT2OUT = 0;
	}

	/*SIN3 is not be use
	//---------------------------------------------------------------
	if(_INT2F) 			// SIN3
	{
		ICLR_INT2F;
		SOUT3OUT = 1;

		SOUT3OUT = 0;
	}
	*/

	INTCONbits.GIE = 1;	
	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;
}

⌨️ 快捷键说明

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