works perfectly if done correctly the include's order may matter, ioc int needs to configured
if your programmer is still connected to portb.7 that can load things up a bit [I leave mine connected and avoid using b6,b7 pins]
never use portx.x to set or clear pins , its just asking for rmw problems especially with fast fosc settings
always use latx.x when available or use a shadow register



Code:
#CONFIG ; 16F1847.
        __config _CONFIG1, _FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _BOREN_OFF
        __config _CONFIG2, _PLLEN_OFF & _LVP_OFF
#ENDCONFIG
@ ERRORLEVEL -306   ; turn off crossing page boundary message
 
; --- *** Oscillator  *** ---------------------------------------------------
define      OSC         32
OSCCON = %11110000   ; 32 MHz, 
ANSELA = 0           ; all digital          
ANSELB = 0           ; all digital 
TRISA=%10010000
'TRISB=%00000000
TRISB=%11101011           ; Encoder inputs on B5-3
IOCBN = %00101000          ;enable ioc falling edge b3,b5
ch var byte
BUFF VAR BYTE [10]
 ;DEFINES FOR DISPLAY   use   font7x5_16.bas   or  font7x5_18.bas     for pic18
 #DEFINE PIC16 1            
 #define use_mssp 1   ; much faster and less words (1027 vs 1106).
 lcdheight con 5      ;  6 PAGES   
 lcdwidth  con 83     ; 84 PIXELS WIDE
 LCD_RST     var     LATA.4 
 LCD_DC      var     LATA.3
 LCD_CE      var     LATA.6
 LCD_LIGHT   var     LATA.0 
 ;LCD_CLK     var     LATB.4       ' SCK1     pin needs to be set as dig o/p
 ;LCD_DIN     var     LATB.2       ' SDO1     pin needs to be set as dig o/p
 ;--------------ONLY IF MSSP NOT USED---------------
'
Include "nokia_ds.INC"      ' bring it in
include "font7x5_16.bas" 
INCLUDE "DT_INTS-14.bas"    ' Base Interrupt System
INCLUDE "ReEnterPBP.bas"    ' Include if using PBP type interrupts
'
ASM
INT_LIST  macro    ; IntSource,         Label,  Type, ResetFlag?
        INT_Handler    IOC_INT,  _Rot_Encoder,   PBP,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM
@    INT_ENABLE   IOC_INT     ; Port Change Interrupt
'==========================    MAIN  Routine    ==============================
    gosub lcd_init
    LCDCLR
    ARRAYWRITE BUFF,["READY",0]
    LCDSTR 5,0,BUFF 
    LCD_LIGHT  = 0    ' turn on backlight.
    PAUSE 1000
    LCDCLR
    PAUSE 1000  
looper:
    LCDCLR
    
    bigtxt = 1     ; double size chrs
    LCDSTR 0,0,"Noki+12"
    LCDSTR 0,2,"345678@" 
    bigtxt = 0     ; normal size chrs
'    LCDSTR 52,3,"Demo"
'    LCDSTR 0,4,"With@MSSP xfer" 
    LCDSTR 0,4,"Hi" 
   
'    LCDSTR 0,5,"Dble Size Chrs"     
'    LCDSTR 0,5," "  ; this doesn't compile - causes errors and warnings wherever used.     
    LCDC 0,5,"a"    ; use LCDC for single chars.
    
    PAUSE 1000       
    GOTO looper
Rot_Encoder:
   if IOCBF.3 then    LCD_LIGHT  = 0     ' Check if button was pushed.
   if IOCBF.5 then    LCD_LIGHT  = 1
   IOCBF=0 
@ INT_RETURN                   ; Exit accordingly.
'    endif
END