' ========================================================================= ' ' File....... Life_Test_2.BS2 ' Purpose.... ' Author..... ' E-mail..... ' Started.... ' Updated.... ' ' {$STAMP BS2} ' {$PBASIC 2.5} ' ' ========================================================================= ' -----[ Program Description ]--------------------------------------------- ' -----[ Revision History ]------------------------------------------------ ' -----[ Conditional Definitions ]----------------------------------------- ' -----[ I/O Definitions ]------------------------------------------------- CircPump PIN 0 ' outputs Heater PIN 1 Pump1 PIN 2 Pump2 PIN 3 Pump3 PIN 4 Fault PIN 6 ' input Alarm PIN 7 V1Fwd PIN 8 ' motor control outputs V1REv PIN 9 V2Fwd PIN 10 V2REv PIN 11 V3Fwd PIN 12 V3REv PIN 13 ' -----[ Constants ]------------------------------------------------------- #SELECT $STAMP #CASE BS2, BS2E, BS2PE T1200 CON 813 T2400 CON 396 T4800 CON 188 T9600 CON 84 T19K2 CON 32 TMidi CON 12 T38K4 CON 6 #CASE BS2SX, BS2P T1200 CON 2063 T2400 CON 1021 T4800 CON 500 T9600 CON 240 T19K2 CON 110 TMidi CON 60 T38K4 CON 45 #CASE BS2PX T1200 CON 3313 T2400 CON 1646 T4800 CON 813 T9600 CON 396 T19K2 CON 188 TMidi CON 108 T38K4 CON 84 #ENDSELECT SevenBit CON $2000 Inverted CON $4000 Open CON $8000 Baud CON T9600 IsOn CON 0 ' active-low i/o IsOff CON 1 VlvBase CON 8 ' start of motor pins VlvStop CON 0 VlvOpen CON 1 VlvClose CON 2 ' -----[ Variables ]------------------------------------------------------- secs VAR Byte mins VAR Byte cycles VAR Nib valve VAR Nib ' 1 - 3 status VAR Nib ' VlvStop..VlvClose ' -----[ EEPROM Data ]----------------------------------------------------- ' -----[ Initialization ]-------------------------------------------------- Reset: OUTS = %0011111101011111 ' all off DIRS = %0011111101011111 ' enable outputs ' -----[ Program Code ]---------------------------------------------------- Main: CircPump = IsOn mins = 10 GOSUB Delay_Mins FOR cycles = 1 TO 11 Pump1 = IsOn Pump2 = IsOn Pump3 = IsOn mins = 60 GOSUB Delay_Mins Pump1 = IsOff Pump2 = IsOff Pump3 = IsOff secs = 10 GOSUB Delay_Secs NEXT CircPump = IsOff FOR valve = 1 TO 3 ' open valves status = VlvOpen GOSUB Valve_Ctrl NEXT secs = 60 GOSUB Delay_Secs FOR valve = 1 TO 3 ' stop valves status = VlvStop GOSUB Valve_Ctrl NEXT mins = 10 GOSUB Delay_Secs FOR valve = 1 TO 3 ' close valve status = VlvClose GOSUB Valve_Ctrl NEXT secs = 60 GOSUB Delay_Secs Heater = IsOn mins = 10 GOSUB Delay_Mins Heater = IsOff GOTO Main END ' -----[ Subroutines ]----------------------------------------------------- Delay_Secs: FOR secs = 1 TO secs PAUSE 1000 IF (fault = IsOn) THEN Big_Problem ' terminate on fault NEXT RETURN ' ------------------------------------------------------------------------- Delay_Mins: FOR mins = 1 TO mins secs = 60 GOSUB Delay_Secs IF (fault = IsOn) THEN Big_Problem ' terminate on fault NEXT RETURN ' ------------------------------------------------------------------------- Valve_Ctrl: SELECT status CASE = VlvStop OUTS.LOWBIT(valve - 1 + VlvBase) = 1 OUTS.LOWBIT(valve - 1 + VlvBase + 1) = 1 CASE = VlvOpen OUTS.LOWBIT(valve - 1 + VlvBase) = 0 OUTS.LOWBIT(valve - 1 + VlvBase + 1) = 1 CASE = VlvClose OUTS.LOWBIT(valve - 1 + VlvBase) = 1 OUTS.LOWBIT(valve - 1 + VlvBase + 1) = 0 ENDSELECT RETURN ' ------------------------------------------------------------------------- Big_Problem: Alarm = IsOn ' ' set outputs to desired state ' DO : LOOP ' stay here until reset