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

📄 untitled.c

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

	//---------------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;
		}
		if(KEYUPIN)
		{
			systemflag2 |= 0x04;
		}
		if(KEYONOFFIN)						//Read card 
		{
			systemflag2	|= 0x01;
		}
		if(KEYSELIN)
		{
			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;						//
		while(!KBINTIN);
		Delay10KTCYx(1);
		while(!KBINTIN);
		KBINTINTEN;
		CLR_INT3F;		
	}
	//---------------RBINT
	if(_RBINTF)
	{
		CLR_RBINTF;
		if(systemflag4&0x02)	//will close velue
		{
			if(!VELSTACLIN)
			{
				Delay10TCYx(2);
				if(!VELSTACLIN)
				{
					RSTVEL;
					IBINTDS;
					Delay10TCYx(2);
					OPVEL;
					Delay10KTCYx(100);
					RSTVEL;
					systemflag4 &= 0xfd;
					systemflag3 |= 0x01;
	
				}
			}

		}		
		if(systemflag4&0x04)	//will open velue
		{
			if(!VELSTAOPIN)
			{
				Delay10TCYx(2);
				if(!VELSTAOPIN)
				{
					RSTVEL;
					IBINTDS;	
					Delay10TCYx(2);
					CLVEL;
					Delay10TCYx(2);
					RSTVEL;
					systemflag4 &= 0xfb;

				}
			}
		}
		CLR_RBINTF;
	}



	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;
		CLR_INT0F;
 		SIN1INTDS;
		SOUT2OUT = 0;

		if(!SIN2IN)					//two count key on at same time set error flag ?
		{
			cntkeyerr |= 0x02 ;

		}
//		if(SIN1IN)				     //SIN1 disturb?
//		{
//			cntkeyerr |= 0x01;
//		}
		if(cntorder==0x01)		     //SIN1 key on two times?
		{
			cntkeyerr |= 0x04;	
	
		}
		else
		{
			cntorder &= 0x01;		
		}
		systemflag3 |= 0x80;
		AddUsingValueOp();
	}
	//---------------------------------------------------------------
	if(_INT1F)				//SIN2
	{
		SOUT2OUT = 1;
		CLR_INT1F;
 		SIN2INTDS;
		SOUT1OUT = 0;
		if(!SIN1IN)						//two count key on at same time set error flag
		{
			cntkeyerr |= 0x20;
		}
//		if(SIN2IN)
//		{
//			cntkeyerr |= 0x10;
//		}
		if(cntorder == 0x02)
		{
			cntkeyerr |= 0x40;		
		}
		else
		{
			cntorder &= 0x02;
		}
		systemflag3 |= 0x40;
		AddUsingValueOp();
	}

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

		SOUT3OUT = 0;
	}
	*/

	ENPIE; 
	ENGIE;	
}

//*****************************************************************//
//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];
							CdBnk5Grp[11] = RevBuffer[13];

⌨️ 快捷键说明

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