You never go to "toggleleds".
I suggest you the following:

Checkswitch
 BTFSS PORTB,7
 BSF PORTA,4
 BTFSC PORTB,7
 BCF PORTA,4
            &nbs p;       GOTO Checkswitch *delete this line*
 

toggleleds
 
 BTFSS PORTA,1
 goto LedsOFF
            &nbs p;   BTFSC PORTA,1  *delete this line
            &nbs p;   goto Ledson *delete this line
 
Ledson
 
 MOVLW 15
 MOVWF PORTA
 CALL Initmr
 GOTO Checkswitch
 

LedsOFF
 
 MOVLW 0
 MOVWF PORTA
 CALL Initmr
 GOTO Checkswitch
Mathew Cohen a écrit :

  Hi All, Can someone tell me why the following code will not work. Is this the correct way to initilise the timer and use the timer overflow interupt. Thanks in advance Mathew Cohen               ORG     H'50' Start
 Call Initporta
 Call Initportb
 Call Initmr
 GOTO Checkswitch ;------------ --------------------------------------------------------------   ORG H'03'
TmrInterupt  BTFSC PORTB,7

 call Initmr
 goto toggleleds Initmr
 CLRF TMR0
 BSF STATUS,RP0 ;select bank 1
 CLRF OPTION_REG
 MOVLW B'00000111'
 IORWF OPTION_REG,1
 BCF INTCON,T0IF
 BSF INTCON,T0IE  RETURN  
Initporta  BSF STATUS,RP0
 MOVLW 0
 TRIS PORTA
 BCF STATUS,RP0
 MOVLW 31
 MOVWF PORTA  RETURN Initportb  BSF STATUS,RP0
 MOVLW H'FF'
 MOVWF TRISB
 BCF STATUS,RP0
 RETURN Checkswitch
 BTFSS PORTB,7
 BSF PORTA,4
 BTFSC PORTB,7
 BCF PORTA,4
 GOTO Checkswitch  
toggleleds

 BTFSS PORTA,1
 goto LedsOFF
 BTFSC PORTA,1
 goto Ledson

Ledson  MOVLW 15
 MOVWF PORTA
 CALL Initmr
 GOTO Checkswitch  
LedsOFF

 MOVLW 0
 MOVWF PORTA
 CALL Initmr
 GOTO Checkswitch

 END