📄 waterctrlv2.c
字号:
/* 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 + -