;              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

;           -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

;           *-*-                        PAGE 0                      *-*-

;           *-*                         ------                       -*-

;           -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

;              -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

 

;****************************

;*       Reset Vector       *

;****************************

 

      org        00                ;Jump to here on reset

      goto       INIT              ;Goto the Initialisation phase

 

;****************************

;*     Interrupt Vector     *

;****************************

     

      org      04

 

      movwf      TEMP_W            ;preserve W reg(in b1 or 0)

      swapf      STATUS,0          ;preserve 0 flag

      movwf      TEMP_STATUS       ;save the status reg

 

      bcf        STATUS,5          ;set to bank 0

 

      incf       HALFSECONDS       ;increment time

      bcf        PIR1,0            ;clear interrupt flag

      movlw      h'0b'

      movwf      TMR1H

      movlw      h'a4'

      movwf      TMR1L             ;delay to Timer

 

      swapf      TEMP_STATUS,0     ;restore status reg

      movwf      STATUS

 

      swapf      TEMP_W            ;restore W reg without

                                   ;changing STATUS bits

      swapf      TEMP_W,0          ;(double swap)

 

      retfie

 

;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

;*-*-*-*-*-*-*-*-*-* INITIALISATION PHASE *-*-*-*-*-*-*-*-*-*-

;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

 

INIT                               ;Start of code    

 

;****************************

;*  Set up LCD and PORTC    *

;*  --------------------    *

;* The LCD display needs    *

;* certain delays between   *

;* sending control info.    *

;* these are specified in   *

;* AMTEX - Displays comput- *

;* er systems 1997          *

;****************************

 

      movlw     h'1e'              ;30 * 0.5mS = 15mS

      call      X_DELAY500

      movlw     b'00111000'        ;set up inputs and outputs

      tris      PORTC              ;for PORTC

 

      call      LCDINIT

      movlw     h'1e'              ;30 * 0.5mS = 15mS

      call      X_DELAY500

      movlw     00

      call      LCDSDDA

      movlw     h'1e'              ;30 * 0.5mS = 15mS

      call      X_DELAY500

      call      LCDBUSY

      movlw     B'00000100'        ;cursor off

      call      LCDDMODE

 

;****************************

;*   Initialise registers   *

;****************************

 

      movlw      00                ;Set these registers to 0

 

      movwf      TIME_SECS

      movwf      TIME_10SECS

      movwf      TIME_MINS

      movwf      TIME_10MINS

      movwf      TIME_HRS

      movwf      TIME_10HRS

      movwf      HALFSECONDS

 

      movwf      CONTROL2

 

      movwf      SECS

      movwf      SECS10

      movwf      MINS

      movwf      MINS10

      movwf      HRS

      movwf      HRS10

 

      movwf      PAGENUM

 

      movwf      LIGHT1_ON_10HRS        

      movwf      LIGHT1_ON_HRS          

      movwf      LIGHT1_ON_10MINS 

      movwf      LIGHT1_ON_MINS         

     

      movwf      LIGHT1_OFF_10HRS 

      movwf      LIGHT1_OFF_HRS         

      movwf      LIGHT1_OFF_10MINS

      movwf      LIGHT1_OFF_MINS        

 

      movwf      TIMER_ON_10HRS         

      movwf      TIMER_ON_HRS           

      movwf      TIMER_ON_10MINS  

      movwf      TIMER_ON_MINS          

 

      movwf      TIMER_OFF_10HRS  

      movwf      TIMER_OFF_HRS          

      movwf      TIMER_OFF_10MINS 

      movwf      TIMER_OFF_MINS         

 

      movlw      d'00'

      movwf      PUMP_ON_100MINS  

      movwf      PUMP_ON_10MINS

      movlw      d'01'

      movwf      PUMP_ON_MINS     

      movlw      d'00'

      movwf      PUMP_OFF_100MINS

      movwf      PUMP_OFF_10MINS  

      movlw      d'01'

      movwf      PUMP_OFF_MINS    

 

      movlw      b'00000000'          ;** set up porta as outputs

      tris       PORTA            

      movlw      b'00000000'

      movwf      PORTA

 

      bsf        STATUS,5             ;** access bank 1 of registers **

 

      movlw      h'00'

      movwf      PUMP_STAGE

 

      movlw      h'ff'                ;set up a/d to d

      movwf      ADCON1

 

      movlw      h'00'

 

      movwf      CO2_ON_100MINS         

      movwf      CO2_ON_10MINS

      movlw      d'01'      

      movwf      CO2_ON_MINS      

      movlw      d'00'

      movwf      GAS_ON_100MINS         

      movwf      GAS_ON_10MINS    

      movlw      d'01'

      movwf      GAS_ON_MINS      

      movlw      d'00'

      movwf      CO2_HOLD_100MINS 

      movwf      CO2_HOLD_10MINS  

      movlw      d'01'

      movwf      CO2_HOLD_MINS          

      movlw      d'00'

      movwf      CO2_ON_100MINS_DEC           

      movwf      CO2_ON_10MINS_DEC

      movlw      d'01'

      movwf      CO2_ON_MINS_DEC  

      movlw      d'00'

      movwf      GAS_ON_100MINS_DEC           

      movwf      GAS_ON_10MINS_DEC

      movlw      d'01'

      movwf      GAS_ON_MINS_DEC  

      movlw      d'00'

      movwf      CO2_HOLD_100MINS_DEC   

      movwf      CO2_HOLD_10MINS_DEC

      movlw      d'01'

      movwf      CO2_HOLD_MINS_DEC

 

      movlw      d'00'

      movwf      PUMP_ON_100MINS_DEC

      movwf      PUMP_ON_10MINS_DEC

      movlw      d'01'

      movwf      PUMP_ON_MINS_DEC

      movlw      d'00'

      movwf      PUMP_OFF_100MINS_DEC

      movwf      PUMP_OFF_10MINS_DEC

      movlw      d'01'

      movwf      PUMP_OFF_MINS_DEC

 

      movlw      B'00010000'

      movwf      CO2_STAGE

 

      bcf        STATUS,5                ;** access bank 0 of registers **

 

      movlw      b'00001000'             ;Set to b#00001000

      movwf      CONTROL1                ;set cursor flag

 

      movlw      06                      ;Set to 6

      movwf      CURSORPOSITION

 

;****************************

;*    Set CLOCK running     *

;****************************

 

      movlw      b'11000000'             ;Set all interrupts ON

      movwf      INTCON

      bsf        STATUS,5                ;bank1           

      movlw      b'00000001'             ;Turn on interrupt (clock)

      movwf      PIE1

      bcf        STATUS1,5               ;bank0

      movlw      b'00110001'             ;Turn ON clock and prescalar

      movwf      T1CON

 

;****************************

;*    Jump to main code     *

;****************************

 

      bsf        PCLATH,3                ;select PROM page 1

      goto       MAIN