📄 waterctrlv3.c
字号:
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 + -