Code:
	INCLUDE "DT_INTS-14.bas"     ; Base Interrupt System
INCLUDE "ReEnterPBP.bas"     ; Include if using PBP interrupts
Include "modedefs.bas"
DEFINE LOADER_USED 1     ' Using boot-loader for initial prototype
DEFINE DEBUG_REG PORTB
DEFINE DEBUG_BIT 0 
DEFINE DEBUG_BAUD 19200
define DEBUG_MODE 0 ' 1 = inverted, 0 = true 
Enter     CON     11      'Enter key on remote
Out       VAR     BYTE(4) '7 seg display
TChange   VAR     BYTE(4) 'Time change digits
Enable1   VAR     BYTE(4) 'Power goes on for memory 1
Disable1  VAR     BYTE(4) 'Power goes off for memory 1
Enable2   VAR     BYTE(4) 'Power goes on for memory 2
Disable2  VAR     BYTE(4) 'Power goes off for memory 2
TimeSet   VAR     BIT     '1 = Enabled 0= Disabled
Second    var     byte
Minute2   VAR     BYTE    ' Ones column for minutes
Minute1   VAR     BYTE    ' Tens column for minutes
Hour2     VAR     BYTE    ' Ones column for hours
Hour1     VAR     BYTE    ' Tens column for hours
Counts    VAR     BYTE    ' Counts for timer
Loop      VAR     BYTE     ' Loop counter
Index     VAR     BYTE     ' Index counter
IR_PULSE  VAR     BYTE(13) ' 13-bytes. 8 data ; 5 address
PULSE_IN  VAR     WORD     ' Raw pulsin value
DBYTE     VAR     BYTE     ' Holds 8-bit data byte
ABYTE     VAR     BYTE     ' Holds 5-bit hardware address
Second = 0
Minute1 = 0
Minute2 = 0
Hour1 = 1
Hour2 = 2
Loop = 0 
ASM
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler   TMR1_INT,   ReloadTMR1,   ASM,  no    ; MUST be first
        INT_Handler   TMR1_INT,   _T1handler,   PBP,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM
;--- Change these to match the desired interrupt frequency -------------------
;--- See http://DarrelTaylor.com/DT_INTS-14/TimerTemplate.html for more Info.
@Freq       = 10                  ; Frequency of Interrupts in Hz
@Prescaler  = 2                   ; Timers Prescaler setting
T1CON = $10                       ; $30 = Prescaler 1:8, TMR1 OFF
; $00=1:1, $10=1:2, $20=1:4, $30=1:8 --  Must match @Prescaler value
@ INT_ENABLE  TMR1_INT            ; enable Timer 1 interrupts
GOSUB StartTimer                  ; Start the Timer
Main:
@ INT_ENABLE TMR1_INT
   PULSIN PORTB.7,0,PULSE_IN        '// Read-in start pulse
IF (PULSE_IN < 200) OR (PULSE_IN = 0) THEN '// Less than Start pulse, then keep looking
   GOTO Main                       '// so clear outputs & return.
ENDIF
@ INT_DISABLE TMR1_INT
GOTO Verify
'--Main 2 used after values have been entered without Enter press to get around INT
Main2:
PULSIN PORTB.7,0,PULSE_IN            '// Read-in start pulse
IF (PULSE_IN < 200) OR (PULSE_IN = 0) THEN '// Less than Start pulse, then keep looking
   GOTO Main2                       '// so clear outputs & return.
ENDIF
Verify:                              '// Read, Decode, then verify data
   FOR Index = 0 TO 12               '// Setup to read-in 13 pulses
    PULSIN PORTB.7,0,IR_PULSE[Index] '// Read 13 low-going pulses on RA.7
   NEXT Index                        '// Loop x times
   DBYTE = $FF                       '// Start with all 1's and find each 0
   FOR Index = 0 TO 7                '// Get 8 "data" bits
    IF IR_PULSE[Index] < 100 THEN DBYTE.0[Index]=0 '// Less than 1mS = 0
   NEXT Index
Result:
Loop = Loop + 1  
Out[Loop] = DBYTE + 1
If Out[Loop] = 10 then 
Out[Loop] = 0
EndIF
DEBUG "D", Out[1],out[2],out[3],out[4]
PAUSE 500
IF Loop = 5 Then
Loop = 0
EndIF
If TimeSet = 1 then                   'Time change
   IF OUt[5] = 12 THEN                 'If enter pressed, with valid time entry
      IF (Out[1] = 2 AND OUt[2]<=4) AND (Out[3]<=5) And (out[4] <=9) Then
       Second = 0
       HOur1 =Out[1]                   'Set new time
       Hour2 =Out[2] 
       Minute1 =Out[3] 
       Minute2 =Out[4]                 'Clear time entry bit.
       Out[1] = 20
       Out[2] = 20
       Out[3] = 20
       Out[4] = 20
       Out[5] = 20
       TimeSet = 0
       GOTO Main
       ENDIF
       IF (Out[1] <= 2 AND OUt[2]<=4) AND (Out[3]<=5) And (out[4] <=9) Then
       Second = 0
       HOur1 =Out[1]                   'Set new time
       Hour2 =Out[2] 
       Minute1 =Out[3] 
       Minute2 =Out[4]                 'Clear time entry bit.
       Out[1] = 20
       Out[2] = 20
       Out[3] = 20
       Out[4] = 20
       Out[5] = 20
       TimeSet = 0
       GOTO Main                    
       EndIF
    GOTO Main    
    ENDIF
ENDIF
IF OUT[1]=1 AND Out[2]=7 and OUt[3]=7 and Out[4]=12 THEN  'TimeSet entry correct  (177 + enter)?
     
Out[1] = 20
Out[2] = 20
Out[3] = 20
Out[4] = 20
Out[5] = 20
TimeSet = 1                          'If they enter the correct code, then unlock features
 
GOTO Main
ENDIF
GOTO Main2
T1handler:
Counts = Counts + 1  ;   Increase the 1/10th sec count
IF counts = 10 then 
Counts = 0
Second = Second + 1      'Calculate time and change values
If Second = 60 then 
   Minute2 = Minute2 +1
   Second = 0
     IF Minute2 = 10 THEN
     Minute1 = Minute1 + 1
     Minute2 = 0
        IF Minute1 = 6 then
        Hour2 = Hour2 + 1
        Minute1 = 0
           IF Hour2 = 10 THEN
           Hour1 = Hour1 + 1 
           Hour2 = 0
           endif
        endif   
     endif
endif
              
IF Hour1 = 2 AND HOUR2 = 4 THEN      'Roll clock over from 23 to 0
   Hour1 = 0
   Hour2 = 0
   
endif
If Hour1 = 0 then                    'If hour 1 is 0 then do not display it
   Hour1 = 20                        'SLED-C4 will not display anything if the
Endif                                'value is above 10
       
DEBUG "D", Hour1,Hour2,Minute1,Minute2 ' Display time
DEBUG "P",12,"~"                       ' Display Colon  
ELSE
@ INT_RETURN
ENDIF
@ INT_RETURN
;---[TMR1 reload - interrupt handler]-----------------------------------------
ASM                               ; Calculate Timer Reload Constant
ReloadInst  = 8                   ; # of Intructions used to reload timer
  if ((Prescaler == 1)||(Prescaler == 2)||(Prescaler == 4)||(Prescaler == 8))
MaxCount    = 65536 + (ReloadInst / Prescaler)
TimerReload = MaxCount - (OSC*1000000/4/Prescaler/Freq)
    if ((TimerReload < 0) || (TimerReload > (65535-ReloadInst)))
        error Invalid Timer Values - check "OSC", "Freq" and "Prescaler"
    endif
  else
      error Invalid Prescaler
  endif
ENDASM
@Timer1 = TMR1L                   ; map timer registers to a word variable
Timer1       VAR WORD EXT
TimerReload  CON EXT              ; Get the External Constant
TMR1ON       VAR T1CON.0          ; Alias the Timers ON/OFF bit
;---Reload Timer1------
ASM
ReloadTMR1
    MOVE?CT  0, T1CON, TMR1ON     ;  1     stop timer
    MOVLW    LOW(TimerReload)     ;  1     Add TimerReload to the 
    ADDWF    TMR1L,F              ;  1     value in Timer1
    BTFSC    STATUS,C             ;  1/2
    INCF     TMR1H,F              ;  1
    MOVLW    HIGH(TimerReload)    ;  1
    ADDWF    TMR1H,F              ;  1
    MOVE?CT  1, T1CON, TMR1ON     ;  1     start timer
  INT_RETURN
ENDASM
;---Start/Stop controls -----
StartTimer:
    Timer1  = TimerReload         ; Load Timer
    TMR1ON = 1                    ; start timer
RETURN
StopTimer:
    TMR1ON = 0                    ; stop timer
RETURN
 Thanks for the help
				
Bookmarks