Abstract:
A programmable wall switch for controlling the time for turning on and for turning off an incandescent light includes a rectifying circuit for producing from the AC power line a selected DC voltage. The switch includes a microprocessor powered by this DC voltage for turning on a light at any one of several selected times and for turning off the light at one of an additional corresponding several selected times. A time display is provided for displaying the time as well as for allowing a user to review the programmed status of the switch at any one of several selected times. A signal is generated at each zero crossing of the AC power line which is supplied to the microprocessor. The microprocessor produces output signals which turn on, turn off or dim the light at selected times. The ability of the microprocessor to dim the light further enhances the appearance of human occupancy when the switch is used to simulate occupancy of a vacant building.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     This invention relates to light switches and in particular to a light switch which is capable of being programmed by the user to turn on in response to selected times, as well as to provide automatic dimmer control. 
     2. Prior Art 
     The use of timers for turning on and off lights to simulate the occupancy of rooms and homes is well-known. Numerous patents have issued describing such structures. Thus, U.S. Pat. No. 3,979,601 issued Sept. 7, 1976 dicloses a combination dimmer and timer switch mechanism which is capable of turning on and off the power to a receptacle in accordance with a predetermined time switch. U.S. Pat. No. 4,151,515 issued Apr. 24, 1979 discloses a similar structure which not only reduces energy consumption by turning lights off after business hours but also cycles lights in a predetermined manner to discourage burglaries. These structures are limited in that the pattern set for one day repeats on adjacent days unless the system is reset daily. Accordingly, the very system designed to give the appearance of occupancy can, by its precise repetitiveness, indicate that the building is not occupied. 
     In addition, occupants of buildings typically do more than merely turn on and off lights. Accordingly, prior art programmable switches have been limited in their ability to accurately simulate the occupancy of a building. 
     SUMMARY OF THE INVENTION 
     This invention overcomes certain of the disadvantages or prior art timed switches by providing a swith which is user-programmable and capable not only of controlling a light but, in addition, of automatically dimming the light in accordance with a program, whether or not a building is occupied. The programmable switch of this invention possesses several functions such as time-keeping, dimmer control, power supply and power control, and provides user inputs and an LCD display. 
     In accordance with this invention, a user-programmable module is provided which is, in the preferred embodiment, microprocessor controlled and which includes a real time display. The system provides a program interval between an ON signal and an OFF signal of 30 minutes with a variable ON/OFF capability to make the ON/OFF commands appear random. The system is structured so that the settings can be reviewed by the user and the program modified or cleared as desired. The system is also structured to operate either in the manual or automatic mode with a manual override being provided. The system is capable of acting as a dimmer and provides a display which indicates system status (such as load, ON/OFF/DIM and programming). The display also indicates AM and PM. 
     As a feature and for ease of installation and maintenance, no grounding is provided and an air gap switch is provided to turn off the module and lamps for installation and service. 
     As a further feature, the switch is designed to maintain memory and program in power failure for at least 50 milliseconds minimum, thereby removing the sensitivity of prior art programmed switches to temporary power failures of a type all too common. 
     As a special feature of the invention, the display shows &#34;PF&#34; when the switch installed or after power failure. PF is deleted and time is displayed when real time is set. 
     An ON/OFF switch, preferably air gap, is provided to isolate power from the unit when OFF. Program memory and real time are cleared when the switch has been turned OFF for approximately one second. The switch has three positions: OFF, manual and automatic. 
     A time-set button is also provided for setting the real time and advancing times for ON/OFF/DIM programming. 
     Of particular utility is a command button which is used to manually turn a light ON/OFF/DIM, to enter ON/OFF/DIM commands during programming, and to dim the light to one-half intensity when pressed and held for greater than a selected time, typically two seconds. The particular dimming method used is selected to minimize radio frequency interferece. The module replaces an ordinary single pole wall switch and uses a standard outlet box and wall switch plate. Power and timekeeping base are derived from the line signal (typically sixty (60) hertz and 110 volts). 
     This invention will be more fully understood in conjunction with the following detailed description taken together with the attached drawings. 
    
    
     DESCRIPTION OF THE DRAWINGS 
     FIGS. 1a and 1b illustrate the system diagram for the switch; 
     FIG. 1c shows the relationship between FIGS. 1a and 1b; 
     FIG. 2a illustrates the normal triac triggering waveform and FIG. 2b illustrates the waveform associated with the zero crossing circuit in accordance with this invention; 
     FIG. 3 illustrates a waveform generated by the skip cycle method of dimming the light to one-half its normal intensity to avoid radio frequency interference; and 
     FIG. 4 shows the relationship of FIGS. 4a, 4b, 4c and 4d; and 
     FIGS. 4a, 4b, 4c and 4d illustrate software flow charts used with this invention. 
    
    
     DETAILED DESCRIPTION 
     The overall system is illustrated in FIGS. 1a and 1b. The system as shown in FIG. 1a divided into four main blocks together with ancillary components and certain command and input switches. Thus, block 101 illustrates the three position slide switch 10 capable of assuming automatic, manual and OFF positions. Block 102 illustrates the novel synchronous rectifier and regulator of this invention suitable for producing a fixed output voltage of about 9.5 volts required to drive the selected microprocessor 103. Microprocessor 103 in the preferred embodiment comprises the four bit TMS 1000 manufactured by Texas Instruments. This specification is not meant to be limiting. Other embodiments will become obvious to those skilled in the art. Microprocessor 103 produces output signals which are then used to control the state of display driver 104 which drives display 105. Display 105 is, in the preferred embodiment, a liquid crystal display. 
     The circuitry of regulator 102 is shown in detail in FIG. 1 a. An input signal which typically comprises the AC line signal of 60 cycles and 115 volts (hereinafter called the &#34;AC power line&#34;) is applied across lines 12 and 13 through the lamp load 51 and switch 101 and then through diode D2 (1N4003) to zener diode Z2, (BZX-83C91) normally rated at about 91 volts. Zener diode Z2 is back-biased relative to ground and its cathode is conneced to V SS  bus 11 (held at about nine volts) to which are connected one terminal of resistor R2 and the collectors of transistors T2 and T3 (shown as NPN transistors). 
     As the signal on line 13 rises, current flows through diode D2 and resistor R2 to the base of transistor T2, thereby turning on transistor T2. The emitter current from transistor T2 then flows to the base of transistor T3, thereby turning on transistor T3. Resistor R7 (470K ohms) is used to shunt the ICBO leakage current around transistor T3 to avoid temperature induced thermal runaway. The emitter current from transistor T3 charges capacitor C2. When capacitor C2 reaches the desired voltage level of about 9.5 volts relative to ground V DD  (bus 12), zener diode Z3 (BZX-83C11) breaks down and thereby limits the voltage to which capacitor C2 is charged to 9.5 volts. Zener diode Z3 breaks down at approximately 9.5 volts plus two voltage drops across two forward-biased PN junctions, or at about 10.7 volts. FIG. 2a shows the voltage level C2 on capacitor C2 at which zener diode Z3 breaks down. The current through resistor R2 also passes through zener diode Z3 as well as maintaining the charge on capacitor C2 at about 9.5 volts. As the input voltage continues to rise, ultimately the voltage across zener diode Z2 breaks down zener diode Z2. Z2 is selected to break down at about 91 volts. Accordingly, when Z2 breaks down, the voltage drop across resistor R3 turns on transistor T1 through base resistor R1. T1 then saturates, thereby dropping its collector voltage substantially close to ground. Thus, transistors T2 and T3 are shut off. Capacitor C2 maintains the voltage at approximately 9.5 volts for the remainder of the cycle. Capacitor C2, which is 470 microfarads, serves as the power source for the microprocessor and discharges current of about 10 milliamps into the microprocessor. Circuit 102, called a synchronous rectifier, is activated once each cycle of the input signal. 
     The synchronous rectifier 102 is self-starting (that is, has no lock up modes) and charges capacitor C2 fairly rapidly with current from transistors T2 and T3. Capacitor C2 is fully charged each cycle before triac TR1 is turned on (TR1 is turned on at most once per cycle of the line signal on lead 13) thus ensuring that capacitor C2 is fully charged once each cycle regardless of the state of triac TR1. The microcomputer 103 is programmed to ensure that triac TR is not turned on before capacitor C2 is charged to about 9.5 volts. Thus, the voltage on capacitor C2 drops no more than 300 millivolts between charging cycles but during the initial part of the power cycle the current from transistors T2 and T3 rapidly replenishes that charge which has been drawn from capacitor C2 to run the microprocessor. The power circuit typically reaches 90 volts in about 800 microseconds or 0.80 milliseconds. Because the cycle time of a 60 cycle current is 16.67 milliseconds, the circuit is on only for less than about 1/20th of the total cycle time. Accordingly, very little heat is dissipated in the circuit. Because this unit is mounted in a wall socket box, there is no efficiency way to remove heat from this container and thus a low duty cycle for the power supply is important. 
     Another circuit used in the structure of this invention and shown in FIG. 1a within the boundary 102 extends the pulse normally generated in a zero crossing triggering circuit used for triggering a triac for substantially a half cycle (as shown in FIG. 2b). This circuit takes the positive half cycle of the waveform on line 13 (FIG. 1a) and uses this information to generate a full cycle of timing information. The input signal on line 13 typically comprises a 115 VAC, 60 cycle line signal. The signal is applied through diode D2, resistor R2 and resistor R5 to the input of diode D8 (FIG. 1a). On the positive half cycle, diode D8 is forward-biased, thereby charging capacitor C1. The signal on capacitor C1 increases to a peak magnitude of about 10.5 volts as controlled by the breakdown voltage of zener diode Z3. Capacitor C1 stores this peak amplitude. Typically, C1 is about 0.01 microfarads. The input line voltage (which is AC) continues to increase in the first quarter of the cycle and then drops in the second quarter of the cycle and for the last half of each cycle goes negative. As the input line voltage drops, diode D8 becomes reverse-biased, thereby trapping on capacitor C1 the charge previously stored on this capacitor. As the input voltage drops toward zero volts, diode Z4 (which is connected through diode D3 and resistor R6 (100K ohms) to the non-grounded plate of capacitor C1 and thus is reverse biased once the voltage on C1 is above the voltage on line 13) will break down when the voltage on capacitor C1 is above the voltage on line 13 by the breakdown voltage of the zener diode Z4. This is designed to occur just after the input voltage on line 13 goes negative. When this occurs, the charge stored on capacitor C1 discharges through zener diode Z4 back to the signal source. Diode D1 (connected between V DD  (zero volts) and the non-grounded side of capacitor C1) the forward-biases to clamp the non-grounded plate of capacitor C1 to a voltage slightly beneath ground. Diode Z4 stays broken down until the input signal on line 13 goes positive at which time diode D8 again conducts in its forward-biased direction until capacitor C1 is again charged to the breakdown voltage of zener diode Z3 during the next cycle of input current. Note that diode D3 is connected to present a low impedance when the voltage on the non-grounded plate of C1 is above the voltage on line 13 and a high impedance otherwise. The voltage on the positive plate of capacitor C1 as a function of time is shown in FIG. 2b. This figure illustrates how two zero crossings are produced each cycle of the signal on line 13 using only the information contained in the first half of each cycle. 
     During normal operation of the light 51 (i.e. during the times when the light is to have substantial current flowing through it so as to turn on the light), triac TR1 is turned on by a pulse from microprocessor 103 in a well-known manner once each cycle just after zener diode Z2 breaks down, thereby to provide a low impedance path for the load current from the voltage source (line 13) through triac TR1. 
     When it is desired to dim the load, the pulse which turns on triac TR1 is delayed one-half (1/2) cycle (i.e., the turning on of triac TR1 is &#34;skipped&#34; for one-half (1/2) cycle) thereby to allow power to flow through the load only during one-half of each cycle. Consequently, the light intensity can be varied from full ON to one-half (1/2) ON. This variation provides an extra degree of live-in authenticity (particularly when this dimming is randomly programmed in microprocessor 103), saves energy and extends light bulb life. This technique generates the waveform shown in FIG. 3 wherein the solid line indicates the portion of time during which triac TR1 is off thereby generating a positive half-cycle of voltage across the regulator circuit and the dashed line indicates when triac TR1 is turned on during the negative half-cycle thereby to allow current to flow through the load. Another advantage of this technique is that the even harmonics of power flowing through the load substantially eliminate the radio frequency interference associated with standard prior art dimming circuits. Skipping more than every other half cycle causes flicker in the light and thus is to be avoided. 
     As a feature of this invention, triac TR1 triggers about 800 microseconds after the zero crossing of the signal on line 13. The TMS1000 microprocessor 103 sees the zero crossing approximately 100 microseconds after it has occurred. The TMS1000 is then programmed to trigger triac TR1 about 700 microseconds after it sees the zero crossing. The triac TR1 triggers after zener diode Z2 breaks down. However, the triggering of triac TR1 is not related to the breakdown of zener diode Z2. 
     A parallel RC network comprising capacitor C3 and resistor R8 is added in the line between the &#34;01&#34; and &#34;00&#34;  output leads from microcomputer 103 and triac TR1. Until the system power turns on and a &#34;INIT&#34; pulse has been generated, it is not desired to have triac TR1 turn on. Thus, capacitor C3 and resistor R8 provide a differentiator so that triac TR1 is prevented from being held on if the state of the 00 and 01 output leads from microprocessor 103 is &#34;on&#34; when microprocessor 103 is turned on. If this occurs triac TR1 is held on only for eight milliseconds and the circuit thereafter operates correctly. 
     The capacitor C5 together with internal circuity in the TMS1000 creates a delay of about one second during start-up to allow microprocessor 103 to be properly reset during the power-up portion of the operation of the system. Capacitor C6 and resistor R9 form a standard RC oscillator for providing clock signals to microprocessor 103. Resistors R10, R11 and R12 are standard pull-down resistors. Diodes D6 and D7 clamp the sensed input voltage to either V DD  or V SS . D5 in conjunction with capacitor C7 stretches the zero crossing signal so the microcomputer 103 can sense its state even if triac TR1 has ben turned on. 
     The system of this invention is suitable primarily for turning on an incandescent lamp rather than an appliance because the triac TR1 creates a net DC voltage which would heat any motor used to run a typical appliance. Accordingly, the circuit is primarily suitable mainly for an incandescent light or a similar type structure. Note that the timing circuit does not use the voltage drop across the load element but rather a voltage spike to charge the capacitance C2 and thereby provide the drive voltage to run the microcomputer. The lamp 51 is in series with the load created by the structure of circuit 102, microcomputer 103, liquid crystal display driver circuit 104 and liquid crystal display 105. The current continuously flows through lamp 51 in accordance with this invention but at such a low level then triac TR1 is not triggered on as to prevent lamp 51 for lighting. The combination of the capacitor C2 and load 51 creates a time constant which must be carefully sized to allow the voltage across capacitor C2 to reach 9.5 volts. Thus, zener diode Z3 controls the height of the voltage across capacitor C2 while the width of the voltage pulse before triac TR1 turns on is controlled by the line voltage on line 13 before zener diode Z2 breaks down thereby turning on transistor T1. As the lamp 51 increases in impedance reflecting a lower wattage rating, the time constant associated with the circuit as shown in FIG. 1a increases. The system shown in FIG. 1a can work with an incandescent light bulb as low as 40 watts. Otherwise, the system takes too long to charge capacitor C2 to the desired operating voltage of microprocessor 103. 
     The programmable wall switch of this invention has two modes of operation, manual and automatic. In the automatic mode, the switch turns lights on and off at the preprogrammed times. In the manual mode, it operates as a regular light switch without disturbing the previously inserted program. The wall switch can even be operated manually when it is in the automatic mode. 
     The programmable wall switch can be programmed to turn lights ON, DIM or OFF up to eight (8) times per day. By programming in DIM as well as ON and OFF settings, the house containing the programmable wall switch appears even more lived in while the owners are away than with a standard prior art type automatic switch. 
     The programmable wall switch has a variable time feature further described below in connection with the Software Program, that turns the lights on and off at varying times up to ten minutes after the program time. This creates a randomness in the turning on and off of lights which further heightens the appearance of occupancy and thus further discourages any intruder who may be observing a house containing the wall switch. 
     If power fails, the programmable wall switch of this invention will lose its memory. When the power is restored, the wall switch will turn the light on until the occupant turns it off. The display will read &#34;PF&#34; after a power failure. Whenever a light bulb controlled by the programmable wall switch burns out, the programmable wall switch loses its memory and the display will go blank. This reflects the fact that the power for operating the display and the programmable wall switch of this invention is derived from a current which passes through an incandescent light bulb. However, the current pulse which is used to power this light exists for only a very short interval (typically about 800 microseconds) and therefore the total average current over a given cycle when the light is off is very small. As the wattage on the blub decreases, this average current becomes smaller. 
     Whenever a light bulb connected in series with the programmable wall switch of this invention is changed, the pre-position slide switch 101 must be placed in the OFF position so that there is no power to the socket. After changing the light bulb the programmable wall switch of this invention must be reprogrammed. 
     As a feature of this invention, the regulator for supplying power to operate the microprocessor is charged during the first fractional portion of each cycle of line current before the triac TR1 is turned ON each cycle to activate the load 51. Accordingly, the line current is used to supply power to the microprocessor and timer. Because the microprocessor is located in the normal light switch receptacle or box, which is a relatively poor dissipator of heat, it is important that the system dissipate very little power. The current flowing in the electronic circuitry of this invention and in the regulator to charge capacitor C2 flow for less than 1/20th of each cycle of the line current. Accordingly, very little power is dissipated in this circuit and there is very little heat to be removed from the structure. This also extends the life of the circuit components. 
     The programmable wall switch of this invention (hereinafter referred to as &#34;PWS&#34; or the &#34;system&#34;) is operated in the following manner. When the switch 101 (FIG. 1a) is in the automatic or manual mode, the LCD display 105 (which functions as a digital clock among other things and which is shown in FIG. 1b) will show &#34;PF&#34; (indicating power failure) immediately after installation, after a power failure, or after clearing a program. To set the time clock (i.e., to set the liquid crystal display 105) the automatic manual OFF slide switch 101 (FIG. 1a) is placed in manual (center) position. The time set button 21 (FIG. 1b) is depressed for at least two seconds. The LCD display will then reset to 12:00 P.M. (noon). To then set the time correctly, the time set button 21 is continuously despressed to advance the LCD display 105 to the proper time. The microprocessor 103 constantly strobes the leads G and E (FIGS. 1a, 1b) and then tests the node between resistor R15 and either button 22 or button 21 to measure the voltage on this node. If this voltage is high and a pulse has been applied to the &#34;G&#34; lead, then the microprocessor knows that switch 21 has been closed. If the signal on lead E is high level and the microprocessor tests a high level voltage on the node between switches 21 and 22 and resistor R15, then the microprocessor knows that switch 22 has been closed. If both switches are closed simultaneously, whichever switch is interrogated first by the microprocessor will be interpreted by the microprocessor as being activated and the microprocessor will then behave accordingly. The continued holding closed of time set switch 21 advances the time display on LCD display 105 to the desired time. At this instant, the switch 21 is released and the clock no longer is advanced. To minimize the time required to program the switch, a two-speed advance is used. First, time advances slowly (in one minute increments) and then speeds up after a selected time (typically five (5) seconds) to advance in ten minute increments. To set the correct time, the time switch 21 must be released before reaching the desired time and then depressed again to advance at the slower rate in one minute increments to the correct time. Each press of the time set button 21 will advance the clock one minute. When the correct time is reached, the programmable wall switch is then ready to be programmed. The programmable wall switch can not be programmed until a real time is set. 
     During programming, the programmable wall switch does not actually turn the light on or off. This is a special feature to help the user program the PWS in dark areas such as halls, cellars, attics or in the evening. Before programming begins, the light should be turned on if necessary to allow the user to see the PWS. The light will then stay on during programming. The light is turned on by pressing command button 22 (also called &#34;control&#34; button 22 or &#34;switch&#34; 22) before the PWS is placed in the &#34;program&#34; mode. 
     To start programming, the automatic, manual OFF switch 101 is placed in the automatic (upper) position. The time set switch 21 is pushed and held at least two seconds. The clock (LCD display 105) will reset to 12:00 P.M. and another indicator on the clock will show that the system is in the &#34;program&#34; mode and that the programmed state of the light is off even if the light is actually on. This is an important feature of this invention because the wall switch allows the light to remain on while the display indicates the status of the light as a function of the times which are being programmed by the user. Thus, the user will read on the display whether at a given time the light is to be ON, OFF or DIM while the light remains on to allow the user to continue the programming. In programming, the time set button 21 is held to advance to the first desired time. The LCD display 105 will indicate this time. The clock advances in 30 minute increments. To stop the advance, the time set button 21 (also called &#34;switch&#34;  21) is released before reaching the desired time and the clock is then advanced slowly by appropriately pressing and releasing the time set button 21. The desired event to occur at the time is then entered into memory by pressing the command button 22 at least once. The PWS then will turn &#34;ON&#34;, &#34;OFF&#34; or &#34;DIM&#34; (if button 22 is held for two seconds). In sequence as indicated on the display after the control button 22 is pressed and released. For example, when switch 22 is pressed once, if the light at this time is OFF, the unit will interpret the command as an instruction to turn ON the light at the time then shown in LCD display 105. If the command button 22 is pressed twice, the system will interpret this as a signal to turn OFF the light at the time displayed and if the signal is pressed three times, the system will interpret the three presses as a command to turn ON the light at the time indicated. The prompt on the display changes in sequence from ON to OFF with each pressing so that the user can visually see as part of the display the particular command which is being entered into the programmable wall switch. If the user completes two presses and then decides that the light should be turned OFF rather than ON at this time, pressing command switch 22 again begins the instruction cycle over again. DIM is programmed by depressing command button 22 once or twice until the indicator shows OFF and then depressing and holding command button 22 for at least two seconds unitl DIM shows on the display. Time set button 22 is then pressed again and the above steps are repeated to program in up to eight different ON, OFF or DIM time sets. 
     If the program memory is exceeded, that is, if the user tries to program in a ninth setting, the display will show &#34;EEE&#34; indicating error. The first eight times entered into memory will not be affected. 
     After the desired times and events are entered into the memory, the clock will reset to the correct real time in thirty seconds and begin automatic operation. Returning the auto/manual off switch 101 to manual will reset the time displayed on LCD display 105 immediately to the correct time. 
     The user then selects the automatic or manual mode of operation. If the automatic mode of operation is selected, the unit will then turn ON, turn OFF, or DIM the light automatically in accordance with the preset program. If the manual mode of operation is selected, the unit will then respond merely to the user turning the light on or off by pressing the command button 22. One feature of this invention is that the user can always override the automatic mode of operation by pressing the command button 22. If the light is on, pressing command button 22 will turn it off. If the light is off, pressing command button 22 will turn it on. Holding the command button for two seconds will dim the light. 
     To review the program already placed in the wall switch, the automatic/manual/off switch is placed in automatic (upper) position. The time set switch 21 is then pressed and held down for at least two seconds. The clock 105 then resets automatically to noon, 12:00 P.M. By then continuing to hold the time set switch 21 down, the clock is advanced in thirty minute increments. The clock will stop at the first program time and show ON, OFF or DIM indicating the particular event programmed to occur at that time. Releasing time set button 21 and then pressing button 21 again advances the clock to the next programmed event. During this review, if the user discovers an error (for example, an OFF has been programmed when the user intended to program an ON), the event can be changed by simply pressing the command button 22 to change the status indicator on the display. If eight events have been programmed, any programmed status can be changed at a given time but to change the time at which an event takes place the program will have to be cleared and programming will have to begin again. The programmable wall switch will automatically reset LCD display 105 to the correct time and begin automatic operation thirty seconds after the review is complete. 
     To clear the program, the automatic/manual/off switch 101 is placed in the OFF (lower) position for one second; the display will then read &#34;PF&#34; when returned to the manual position to reset the correct time. The user will then have to reset the correct time into the unit because shutting the unit off deprives the clock and related circuitry of power. 
     Significant advantages are obtained through the use of only two buttons to carry out all programming and time setting functions. These advantages include a simplicity of operation which is a major advantage of the programmable wall switch and low cost through reduction of the number of switches compared to prior art systems. 
     The software utilized for programming the microprocessor 103 in conjunction with this invention is listed in Appendix A. The flow charts associated with the logic of the software are shown in FIGS. 4a through 4d. These materials are self-explanatory and thus will not be further described here. 
     SOFTWARE PROGRAM 
     FIG. 4a illustrates the initial portion of the software program used with this invention. At the start of the program, the system is initialized. At this step, which is associated with the TMS-1000 microprocessor used with the preferred embodiment this invention, the RAM memories within the TMS-1000 are cleared, timers are reset to initial values and selected RAMS have set in certain BCD to LCS display conversion codes. 
     The system next transmits to the display the bit pattern that loads &#34;PF&#34; (denoting power failure) into the display. Next the &#34;Autman&#34; part of the program is implemented. First a &#34;zero crossing&#34; and &#34;update time&#34; routine is implemented. The zero crossing routine determines from the zero crossing input waveform on lead K8 to microprocessor 103 (FIG. 1a) whether or not the zero crossing signal is going from a low to a high level or from a high to a low level. If the waveform is going from a low to a high level, the system then determines whether or not at that time the light should be on or off and, if it should be on, produces an output pulse from microprocessor 103 on output lead 00 to triac TR1 (FIG. 1a). If the light should be off, the triac is not fired and the routine exits the zero crossing portion of the program. If the transition however from the zero crossing is from high to low, then the software determines whether or not the light should be on fully or dimly and if on full fires the triac. If on dimly, the program exits the routine again. If the light is to be on full, then the triac is again fired by microprocessor 103 putting an output signal on lead 00 to triac TR1 to trigger it during the second half cycle. In the zero crossing and update time block (illustrated in detail in FIG. 4a) the exit from the zero crossing routine is followed by a test labeled 0 to 1 to determine if the signal on input lead K8 (FIG. 1a) has gone from a zero to a one. If it has not, then the microprocessor updates time and returns to the zero crossing routine. The update time routine increments a seconds counter in microprocessor 103 (FIG. 1a) initially set at 59 which keeps track of the number of high to low level crossings of the signal on input lead K8 and which is decremented by the update time signal. After 60 of these signals, one second has passed. The microprocessor includes, in addition to the seconds counter, a minutes counter initially set at zero which is incremented up to 9, a 10-minute counter which is incremented up to 5, and an hour&#39;s counter which is incremented from zero to 12. Thus, the microprocessor is capable of keeping track of time in 12-hour increments. In addition, an AM/PM flag is provided to allow the system to keep track of a whole day. The updating of time is carried out by the UPDTIM routine (FIGS. 4a and 4c) in the software. Following the update time routine, the program goes on to the next logic block which is &#34;decrement 30-second counter.&#34; The 30-second counter comprises the number 59 initially stored in the RAM. This number is decremented every half second if neither the command key 22 nor time set key 21 (FIG. 1b) is pressed by the user within that time. If the time set or command key is pressed within this time (as determined by microprocessor 103 sensing a low level signal on input R1 or R3), this counter is reset to 59. If the number in the counter equals zero, the counter is left at zero and the program automatically sends the system to operate in whatever mode has been set by the placement of switch 101 (FIG. 1a). Typically this mode will be the automatic mode although it might be the manual mode. 
     In the automatic mode, the system is then set to automatically turn lights on and off or dim the lights in accordance with pre-arranged instructions in the program. In the UPDTIM routine, the remote switch (shown as &#34;three-way sense&#34; in FIG. 1b) provides either a square wave if power is available on this line or no signal if power is not available. The microprocessor 103 (FIG. 1a) detects the presence or absence of power on the three-way sense line at input lead K4 and uses this information to test whether or not remote switch is on. If it is on, microprocessor 103 resets a remote toggle flag. If the remote switch is not on, it resets the remote switch flag and then asks whether or not the light was toggled. If the light was toggled, then the remote toggle flag is reset and the system proceeds into the scan key mode of operation. If the light was not toggled, then the system toggles the light and again proceeds to the scan key operation. If the remote switch flag had not been set, then the system automatically asks whether the remote switch is on. If it is, then it sets the remote switch flag and then asks was the light toggled. If it was not, it toggles the light and then goes to the scan key operation. If it was, it resets the remote switch toggle flag and again returns to scan key operation. The microprocessor passes through this routine once each cycle of the AC line voltage. 
     Before the rest of the program is described, it should be noted that typically the TMS 1000 requires twelve microseconds to execute an instruction. The zero crossing signals provided to the microprocessor occur approximately every half cycle of the 60-cycle line current or about every 7 or 8 milliseconds. The microprocessor 103 can execute up to about 700 instructions in seven milliseconds. The clock driving the microprocessor 103 runs at approximately 500 kilohertz. Six clock periods, each of 2 microseconds, are required to execute one instruction. 
     Returning now to the software program, the system&#39;s scan key instruction results in the microprocessor 103 scanning the input terminals D, E and G connected to the command key 22 or the time set key 21, respectively (FIG. 1b) to determine whether or not either of these two keys have been depressed. Microprocessor 103 also scans the setting of switch 101 to determine its status. These inputs are sent to the computer on leads K1 and K2. This scanning determines whether or not switch 101 has been set in the automatic or the manual mode. If the system has been set in the automatic mode, a flag has been set during the initialization routine that stated whether or not there had been a power failure. If there had been a power failure, then the system exits from the software and goes to subroutine DUPRUT. The DUPRUT routine (shown in FIG. 4c) asks whether a control key 21, 22 had been pushed and if one has been pressed, then the software executes the NEWTGL routine (shown in FIG. 4d). The NEWTGL routine asks first whether the control key flag is set. If the answer is yes, this means that the last time through this routine, the command button was also pressed. The program then decrements the 2-second counter and then asks whether or not 2 seconds have elapsed. If 2 seconds have elapsed, then the light is dimmed or the program status is set to dim, depending upon the mode of operation of the system. If the control key flag was not set, then the control key flag is set as would happen the first time the NEWTGL routine is used. The light will then be toggled on or off (i.e., the light state will be changed) and the program will then ask if it is in the program mode. If it is not, it will decrement the 2-second counter and then ask if 2  seconds have elapsed. If 2 seconds have not elapsed, it returns to the appropriate position on the DUPRUT subroutine. If 2 seconds have elapsed, then it sets the light status to &#34;dim&#34; and returns to the DUPRUT routine (FIG. 4c). If the system is in the program mode, it sets the toggle flag. The toggle flag reflects the fact that the command button has been pushed. The system then decrements the 2-second counter and asks whether or not 2 seconds have elapsed. If 2 seconds have elapsed, again it sets the real operation or the program status of the light to &#34;dim&#34; and then returns to the appropriate point in the DUPRUT routine. If 2 seconds have not elapsed, it returns to this same point. 
     Returning to the DUPRUT subroutine, the system then goes to the AUTMAN routine and begins operation again as described above. 
     Returning now to the auto routine, if a power failure flag is not showing, then the system sets the automatic mode flag and asks if the system is operating in the program mode. If the time set switch has been pushed the system determines that it is operating in the program mode. If the time set switch has not been set, it determines that it is not in the program mode and goes to the scan keys operation. The scan keys routine involves turning on either R1 or R2 in TMS 1000 microprocessor 103 and then looking at K1 or K2 to determine the voltage on the appropriate input lead. This routine is known as the &#34;R2 keys&#34; routine and the &#34;R1 keys&#34; routine shown in the software listing. 
     Following the scan keys routine, the program asks whether the time set key is pressed. If the answer is no, it returns to the DUPRUT subroutine as described above. If the answer is yes, it goes to the TSKEY routine. The TSKEY routine then asks whether the zero crossing counter is at 00, 20 or 40. Since the zero crossing counter increments once each cycle of the 60-cycle line current, and since it decrements the 2-second counter on a count of 00 or 20 or 40 in the zero crossing counter, in essence the 2-second counter is decremented six times approximately over 2 seconds thereby giving a finer degree of control on the 2-second counter than would otherwise be possible if decremented only once each second. 
     Following the decrementing of the 2-second counter, the program tests to see if the 2 seconds have elapsed. If they have not, it returns to the AUTMAN program as described. If they have, it then resets the 2-second counter and sets the real time to 11:59 A.M. or the set time if the system is operating in the program mode to 11:30 A.M. It also resets the 30-second and the 5-second counters and sets the &#34;time set flag&#34;. Finally, it asks whether the system is operating in the automatic or manual mode and, if it is in the automatic mode, goes to the set program flag and then returns to the SHOZRO subroutine. If it is in the manual mode, it resets the power fail flag to zero and likewise returns to the SHOZRO operating mode. 
     The SHOZRO mode (FIG. 4c) is a relatively simple mode which involves the executing of the zero crossing routine to test for the &#34;zero to one&#34; transition on the zero crossing waveform and to ask whether or not this transition occurs. If it does occur, then the system displays the time on LCD 105 and goes to AUTMAN (see FIG. 4a). If it does not occur, the program asks if the control key 22 (FIG. 1b) is pressed. If key 22 is not pressed, the program updates the time and returns to the execute zero crossing routine. If the control key 22 is pressed, the software again returns to the zero crossing routine (see FIG. 4a). This particular routine ensures that time is updated. This particular routine prevents the system from being in a state such that when the command key 22 (FIG. 1b) is pressed, the zero crossing counter is never able to test for 00, 20 or 40 (see TSKEY and SHOZRO routines, FIGS. 4a and 4c, respectively), for the purpose of decrementing the 2-second counter. Unless the zero crossing counter is able to test for the occurrence of these times, the system will never &#34;dim&#34; after the command button has been pressed for approximately 2 seconds. This routine ensures that the system will &#34;dim&#34; when the command button has been pressed for about 2 seconds. Following the SHOZRO routine, the system returns to the AUTMAN routine described above. 
     If the test for whether or not the system is in the program mode (part of the AUTO routine shown in FIGS. 4a and 4b) is answered yes, then the system again scans keys to determine whether or not the time set key 21 has been pushed. If it has not been pushed, then the system resets the stop and time set flags, again scans the keys 21, 22 to determine if the control or command key 22 (FIG. 1b) has been pushed. If they have not been pushed, the system resets the control key flag, resets the 2-second counter and enters the AUTMAN routine as described above. If the control key 22 has been pushed, then the 30-second counter is reset and the system asks if the COMPAR routine (FIG. 4d) has indicated that this time is a previously-set time by checking the status of the &#34;restore flag set&#34;. If so, the restore flag will have been set and the software will immediately go to NEWTGL and thereby change the programmed status of the light at that time. The program saves the set time and then goes to the SHOZRO routine already described. If a restore flag has not been previously set during the COMPAR routine (see FIG. 4d), then the system asks if the program memory is full. If it is not, it again calls for a new status for the switch at that time. If the answer is yes, the system displays an error signal EEE on the display and returns to AUTMAN. If the program memory is not full, it then sets a new status for the system at that time and saves the time as well as the status. 
     Returning now to the automatic mode query as to whether the time set key 21 (FIG. 1b) has been pressed, if the answer is yes, the software then enters the AUTOTS routine and asks if there is a stop flag at this point. If the answer is yes, it returns to the AUTMAN routine. If there is a stop flag, the user generally will not want to continue to increment the time or will want to stop at that time to give the user a chance either to maintain the status or change the status of the light at that time. If there is not a stop flag at that time, then the system resets the &#34;restore flag&#34; so that if formerly this had been a previously-set time it no longer is and then resets the 30-second counter. The system then asks if there is a toggle flag. If the answer is no, the system immediately asks &#34;Is there a time set key flag&#34;. If the answer is no, it sets the hold off flag. The hold off flag prevents the system from incrementing each time through the loop. If the answer is yes (i.e., a time set flag has been set) then the program asks whether the zero crossing counter is zero or 30. If the answer is yes, it again asks if the hold off flag is set and if the answer is no, it adds 30 minutes to the set time and then sets the time set key flag and enters the COMPAR routine. If the time set key flag inquiry has been answered no and the set hold off flag had been implemented, the system goes directly to the &#34;add 30 minutes to set time&#34; and from there goes to the &#34;set time set key flag&#34; and the COMPAR routines. If the zero crossing counter was not 00 or 30, the system goes to the AUTMAN routine (FIG. 4a). If the hold off flag set had been answered yes, then the system resets the hold off flag and again goes to the AUTMAN routine (FIG. 4a). 
     If the query &#34;is time set memory full&#34; (AUTOTS routine, FIG. 4b) had been answered &#34;no&#34;, the system increments the set time pointer and then returns to the question &#34;is there a time set key flag?&#34; and follows the routine as described above. 
     The COMPAR routine (FIG. 4d) operates in response to the AUTOTS routine reaching the point in the program just described. The COMPAR routine first sets a compare pointer to zero. The zero crossing and update time routine stops the software routine in anticipation of a zero crossing signal and then updates the real time stored within the microprocessor before continuing the routine. Following the update of time, the software compares the real time AM/PM with the set time AM/PM. If the times are not the same, it increments the compare pointer by two and goes to the next location. &#34;Pointer&gt;15&#34; merely means that there are 8 stored times, each of which takes 2 nibbles, so &#34;&gt;15&#34; at this test means that the system has a full capacity of set times. If pointer is not &#34;&gt;zero&#34;, one returns to the COMPAR routine again. If the times are the same (it should be noted that times are matched only to the half hour) the system then compares hours. If the hours are not the same, it then exits over to the &#34;increment COMPAR pointer by 2&#34; routine. If the hours are the same, the program compares the half-hour. Again if they are not the same, the program exits to the &#34;increment COMPAR pointer by 2&#34; routine. If they are the same, it asks if the system is in the program mode. If the system is not in the program mode, then the system knows that it is to turn on, turn off, or dim a light at some time related to this time. The system then enters a routine entitled &#34;save random time&#34;. This routine takes the count in a selected counter in the microprocessor and adds that count to the time to determine the time at which the operation on the light is to be carried out. The selected counter is such that the count in the counter every half hour will vary in somewhat of a random fashion. The counter has the capacity to hold a count from zero to nine but is driven by a signal that goes from zero to 12, thereby ensuring that the count in the counter every half hour will be somewhat different. If the system is not in the program mode, it then compares the random time in the register to the minutes to carry out the designated operation on the light at the set time plus this random time. If the random time equals the minutes, thus indicating that an operation should be carried out on the light, the system then asks is zero crossing counter at 59. If the zero crossing counter is not at 59, the answer is no and the system treats this as a &#34;no match.&#34; This is designed to prevent the system from overriding immediately a user&#39;s command to alter the state of the light from that dictated by the system immediately after the system has set the light in that state. But for this test, such an overriding within one minute of the controlling of the state of the light by the system would be picked up by the system as occurring at the same time as the original operation on the state of the light and thus would override the user&#39;s control if the user entered a new command into the system within one minute of the system&#39;s operation. If the zero crossing counter is 59 it is deemed to be match and the next step is to the program mode. If the zero crossing counter is not in the program mode, then the real time light status is replaced with the saved time light status and the system then goes to the SHOZRO routine (FIG. 4c). If the system is in the program mode, then a stop flag is set and a restore flag is set and the set time light status is replaced with the status saved in a different register associated with that time. Thus, the status of the light associated with the time display is now being displayed. Now, if the user hits the command button, the status associated with that time will change and when the desired status has been achieved, will be stored in the same register with the time. The status of the light is changed as shown in the logic of FIGS. 4a and 4b for the &#34;auto&#34; mode in the &#34;program mode&#34; with the control key 22 pressed and the time set key 21 not pressed. 
     Returning now to the branching point (UPDTIM, FIG. 4a) where the program tested to determine whether the system was in the automatic or the manual mode, if the system determines that it is in the manual mode, it resets the programs and auto flags (i.e., the system is no longer in the automatic or the program modes). It then clears the time set light status. It then scans the keys. It then asks if the time set key 21 is pressed. If the answer is no, it resets the 5-second counter and resets the time set key flag, and enters the DUPRUT routine (FIG. 4c). The system then continues to scan the keys and asks if control key 22 is pressed. If the answer is no, it resets the control key flag, resets the 2-second counter and asks if a power failure flag has been set. If the answer is no, it asks if the system is in the automatic or manual mode and if in the manual mode, goes to the SHOZRO routine (FIG. 4c) and if in the AUTO mode goes to the COMPAR routine (FIG. 4d). Both of these routines have been described above. 
     If the control key 22 is pressed, the system then goes to NEWTGL (FIG. 4d) and sets the control key flag and then returns to the AUTMAN routine (FIG. 4a). 
     If the time set key 21 has been pressed (MANUAL routine, FIG. 4c) the program resets the 30-second counter and asks was a power failure serviced? If the answer is no, it goes to the TSKEY routine (FIG. 4b). If the answer is yes, the program then asks if 5 seconds have elapsed. In the MANUAL mode, the 5-second counter allows the system to increment real time at a slow speed (one minute intervals at a 1 Hertz rate) before 5 seconds have elapsed and then accelerate to a faster speed after 5 seconds. In the fast mode, the system increments real time at 10 minute intervals (at a 2 Hertz rate). If the answer is yes, the system resets the real time minutes to zero and then adds 10 minutes to real time. It then goes to the SHOZRO routine (FIG. 4c). 
     Returning now to the 5-second elapsed test, if the answer is no, it asks if the &#34;time set key flag&#34; is set? If the answer is no, it resets the zero crossing counter to 59 and then adds one minute to the real time and sets the time set flag and then goes to the SHOZRO routine. If the answer is yes (i.e. the time set key flag had been set), the system goes to the zero crossing counter and checks for &#34;00&#34; or &#34;30 &#34;. If the answer is yes, the counter is at either of these two numbers, the system then goes to the decrement 5-second counter which then adds one minute to real time and sets the time set key flag and goes into the SHOZRO routine. This routine increments one-minute intervals at a 2 Hertz rate every half second. After 5 minutes it increments every 1/3 second (i.e., zero crossing counter at 00, 20 and 40) and adds 10 minutes to real time at each incrementation. 
     The Appendix comprises a listing of the actual software used to implement the above. 
     One embodiment of this invention has been described. Other embodiments of this invention will be obvious to those skilled in the art. Thus, the above description is to be considered illustrative only and not limiting. In particular, while the programmable light switch is capable of storing up to eight events at eight different times, the number of event-time combinations capable of being stored can be changed by changing the size of the memory. 
     APPENDIX A 
     SECURITY SWITCH SPECIFICATION 
     Introduction 
     This specification documents the operation and device parameters of a microcomputer controlled light switch for PCI. The unit has a liquid crystal display for user interaction and serves as the output for a real time clock. The user can select between a manual mode (light switch only) and an automatic mode (with programmable on/off times). Two momentary switches will be available to turn the light on or off; or to program time and set points. The unit can also be turned off. When off, power is isolated from the unit. 
     Reference Documents 
     The following documents provide information, specifications, and data relating to the design of the switch. 
     TMS 1000 series data manual 
     HLCD 0438 specification--Serial input LCD driver 
     Owners manual 
     Mechanical Description 
     The switch consists of two parts, a control box and an I/O panel. The control box contains the power supply, auto/manual off switch, the power control circuit, and the microcomputer. The control box connects to the I/O panel through a standard faceplate via a six pin connector. The I/O panel contains a serial input LCD driver, a 31/2 digit liquid crystal display, and two momentary switches. 
     Electrical Specification (see schematic) 
     Power Supply Requirements: The TMS 1000 requires a voltage &#34;box&#34; of 7.5 V to 10 V. The power supply design also provides a square wave output with rising and falling edges synchronized to the zero crossings to allow the computer to keep track of time and insure proper triac firing. 
     Inputs: The TMS 1000 has four input lines. The system uses one K line for an input from the auto/manual switch. One K line allows the computer to monitor the set and control switches selected by two R outputs. One K line monitors the zero crossing input information. The last K input is used to monitor the status of a remote switch in a three way system. 
     Outputs: The TMS 1000 outputs data to the Hughes LCD driver using three R outputs. One R output connects directly to the load input of the HLCD 0438 to latch the segment drive information. Two R outputs connect in parallel to the set and control switches and are used to output and clock serial data into the LCD driver chip. One R output is used to select the auto or manual switch for testing. And one R output line is used to drive a transistor to gate the triac. The triac is gated once every half cycle (full on) or once a cycle (half on). This provides an energy saving feature. 
     Device Operation 
     Special Features: The unit has a RANDOM mode feature where the lights will turn on/off or half at randomly varying deviations (up to 9 minutes) after the user programmed set points. This feature is used for home security and provides a more natural appearance for a vacant home. The user can select eight of 48 set points, each one half hour apart. 
     
         ______________________________________PROGRAM ACTIONSEVENT           RESPONSE______________________________________Return of power Display shows &#34;PF&#34;           Load is turned onSwitch to MAN and           Display shows 12:00 PM after a 2press TIME SET  sec. delay and the &#34;ON&#34; annunci-           ator is turned onPress and hold TIME           Time increments by minutes atSET button      a 1 Hz rate for 5 secondsHold TIME SET more           Resets minutes to zero and incre-than 5 seconds  ments tens of minutes at a 2 Hz           rate.Release TIME SET and           Time increments by minutes atpress again     a 1 Hz rate for 5 seconds.Impulse pressing of           Time increments by one minuteTIME SETNo key entry or mode           Time is entered and timekeepingchange for 30 seconds           begins Unit enters MANUAL           modeAfter time is set,           Time is entered and timekeepingswitch to AUTO mode           begins Unit enters AUTO modePress TIME SET  Display shows 12:00 PM, indicates(AUTO mode) and hold           PROGRAM mode, ON/OFFfor 2 seconds   annunciator segment shows current           status (ie on, half, off)Press TIME SET (AUTO           Display increments in 30 minuteMode) and hold  intervals at a 2 Hz rate. When the(release at desired           key is released the display showsprogram time)   the desired program time.Press COMMAND switch           Toggle through the ON/OFF/           HALF annunciators and saves time           and statusPress TIME SET again           Advances the display in 30           minute intervals at a 2 Hz rate.Holding TIME SET and           Display stops at programmed timea previosly set time           The annuciators show the presetis reached.     statusPress COMMAND (at set           Annunciators toggle from on to offtime)           and go to dim after 2 seconds           also saves program time.Press COMMAND (memory           Display shows &#34;EEE&#34;, returns tofull, not on set time)           normal operation by pressing           TIME SET again.Toggle REMOTE switch           Light changes state(any mode)No key entry or mode           Unit leaves PROGRAM mode,mode change for 30           returns to real time displayseconds.        AUTO mode.______________________________________ 
    
     SECURITY SWITCH ROUTINES 
     (1) INIT 
     CLRSTM 
     CLRSET 
     SCOUN 
     This routine will load in the segment decode information, clear the set time registers, and preset the counter values. 
     (2) BEGPF 
     PF 
     This routine will send segment information to the display RAM for the `PF` display after power up. 
     (3) LOAD 
     This will toggle the load line that transfers the display information from the RAM into the LCD. 
     (4) AUTMAN 
     This is the start of the program. All loops will return to this spot. This part of the program will call routines to check the zero cross and to update the time. 
     (5) THSECK 
     Every 1/2 second this routine branches to DECTHR otherwise it goes to GTOCON. 
     (6) DECTHR 
     STORE 
     This routine decrements the 30 second timer and if it does will reset the power fail acknowledged flag and the program flag. 
     (7) GTOCON 
     CONTIN 
     RSSET 
     CHNG1 
     CHNG2 
     LITTGL 
     CON+A 
     This routine checks the remote switch. If there is a change in the remote switch, then the light in turned on (or off). Also, this routine will make sure that the unit always powers up with the light on. 
     (8) CON+I 
     These instructions test the auto/manual switch and branch accordingly. 
     (9) MANUAL 
     CHKCTL 
     This resets some flags, and checks the time set key. 
     (10) REST30 
     PAGE2 
     The 30 second counter is reset, and a check is made of the &#34;PFACK&#34; flag. 
     (11) TSKEY 
     DEC2KT 
     DEC2CT 
     DC2CT 
     CALL12 
     CALFIN 
     PREDIS 
     VIEW 
     These routines are all `in line` code to check the timeset key and loop back around to the start while decrementing a two second counter. If the key remains pressed for longer than two seconds, then 12:00 PM is loaded into the display and memory. 
     (12) TWELVE 
     TWELVM 
     TWELVP 
     RETTWL 
     These load 12:00 pm into the time registers. 
     (13) FIN12+ 
     This finishes loading the time and resets the 30 and 5 second counters. 
     (14) CLRCHR 
     LOOP3 
     TOLOAD 
     These clear y number of characters from the display 
     (15) DUMPEE 
     EEES 
     FINEEE 
     Loads `EEE` to the display 
     (16) AUTO 
     GOCATO 
     AAAMMM 
     DOAUTO 
     In line code that starts the auto mode. It checks to see if the power fail has been serviced. 
     (17) AUTOTS 
     CHKSTP 
     PRGMTS 
     CONT30 
     HLDOFF 
     CALLL 
     GOAD30 
     TSTHLD 
     RSTHLD 
     AD30+1 
     These routines service the time set key. It will check the stop flag (if present it will not increment the time,) the toggle flag (if present it will go to EXSPTM,) and it will increment the program time by 30 minutes every 1/2 second. 
     (18) R2KEYS 
     R1KEYS 
     SETOUT 
     Keyscan routines. 
     (19) SAVPTM 
     ONZHR 
     TOSHO 
     Save the program time in one of the set time locations. 
     (20) EXSPTM 
     AD2TOM 
     GO+30 
     Resets the toggle flag, increments the pointer to the next empty set time, and sets a flag if the memory overflows. 
     (21) SETUP 
     TCYPTR 
     CONSET 
     This will go to the location pointed to by either the new entry pointer or the review pointer. 
     (22) NUSTUP 
     This will go to the RAM pointed to by the review pointer. 
     (23) SETXST 
     SHO3HZ 
     DO2HZ 
     CALL 
     SHO1HZ 
     AD1 
     These will increment the time (in the manual mode) by 1 minute increments at a 1 hz rate for 5 seconds, then at a 2 hz rate in 10 minute increments. p0 (24) NEWTGL 
     CLMDCK 
     TOGLLL 
     FLGOFF 
     OUTTGL 
     SETBIT 
     BEGDEC 
     D2SEC 
     TGLHLF 
     SAVNSH 
     RETURN 
     TOSAVP 
     These routines will toggle either the status of the lights or the status of the annunciators in the display. If the control key is pressed for more than 2 seconds, the the display or annunciators will go to dim. 
     (25) RSTFLS 
     RSTAFL 
     Resets the program, auto, and reset flags 
     (26) SEND4B 
     DIR4B 
     SEND3B 
     DIR3B 
     LOOP 
     OUTHI 
     OUTDEC 
     TOLOOP 
     These will send 4 bits or 3 bits to the display, either directly or indirectly. 
     (27) NOMCH 
     AGGIN 
     TOSHOT 
     This routine tells the unit what to do if there is no match in the compare routine. 
     (28) COMPAR 
     CONCOM 
     AGAIN 
     PM 
     NOMTCH 
     SAME 
     COMP10 
     CHEKHF 
     CHKRND 
     PCOMP 
     ACOMP 
     This is the compare routine that checks the set times with either the real time or the program time. 
     (29) MATCH 
     ENDMCH 
     STSTOP 
     TOMTCH 
     This will either stop at the current display and replace the program time status with the set time status or it will replace the real time light status with the set time light status. 
     (30) PRGCTL 
     RESTOR 
     CHKFUL 
     PRMEM 
     TOOTGL 
     This tells what to do if there is a control key pressed in the program mode. 
     (31) SAVRND 
     TSTHLF 
     SAVE 
     SAVXIT 
     XITSAV 
     This will save the random time that is used in the compare routine. 
     (32) ZEROX 
     KLOW 
     KHI 
     ZERONE 
     ONEZER 
     LTHLF 
     FIRETC 
     HOLDIT 
     EXITZX 
     This is the routine that checks for the zero crossing and fires the triac, if necessary. 
     (33) AT3HZ 
     TRYTWO 
     AT2HZ 
     TRYZER 
     LEAVE 
     OUTHZ 
     This will set a flag if the zero crossing counter is at the proper value. 
     (34) DUPRUT 
     PFAIL? 
     LIGHTS 
     CONDUP 
     This routine describes what to do if the control key is pressed in any mode, except program. 
     (35) SHOTIM 
     STRTSH 
     ONRUT1 
     ONRUT2 
     RDIMFL 
     NEXT 
     CONSHO 
     AMDIS1 
     PMDIS1 
     TENHR 
     OUTZER 
     OUTONE 
     DIG2B 
     SNDTEN 
     COLON 
     OFFCOL 
     ONCOL 
     DIG3 
     DIMON 
     ANNUN 
     PRGON 
     TSTAP 
     AMDIS2 
     PMDIS2 
     FINSHO 
     These are all part of the routine to send the time to the display. 
     (36) MODCHK 
     OUT 
     This will go to either the program status location or the real status location. 
     (37) CLCTEN 
     TRYOUT 
     GETOUT 
     This will determine whether there will be a 10&#39;s digit. 
     (38) SEND1 
     SEND0 
     CLKOUT 
     This will load either a zero or a one into the display. 
     (39) UPDTIM 
     DECMSN 
     TEST30 
     COLTST 
     COLOFF 
     DECSEC 
     SAVRAN 
     MIN+10 
     MIN+01 
     MN1001 
     CHKAM1 
     RESET0 
     SAVR1 
     DONE1 
     This routine will update the time every 1/60 th of a second. ##SPC1##