I used mpgmike's suggestion and added a 200ms counter for the LCD display. The read or write (i'm not sure which one) statement still isn't working correctly. I was wrong before when I said it worked when I removed the interrupt. After fiddling with it some more, I realized it doesn't work correctly. So I'm not sure what I'm doing wrong. Hopefully it's something obvious. Here's what's going on:

I'm using a PIC16F887. I have an LCD display connected. There are also 3 incremental rotary encoders connected. Each of the rotary encoders also has a pushbutton switch. I want to display each rotary encoder's "position" of 0 - 255 on the LCD. This is part is working.

I want to be able to save and recall the settings of the rotary encoders. I am using the button on encoder2 as a "save" button. I'm using the button on encoder1 to move backwards through the saved settings and the button on encoder3 to move forward through the saved settings. This is the part that is not working. I'm not sure if it isn't writing correctly or isn't reading correctly...well...I'm sure it's doing what it's supposed to do correctly, I just did something wrong.

Code:
CLEAR
define LOADER_USED 1
define OSC 4
define LCD_DREG PORTD
define LCD_DBIT 0
define LCD_RSREG PORTE
define LCD_RSBIT 0
define LCD_EREG PORTE
define LCD_EBIT 1
define LCD_RWREG PORTE
define LCD_RWBIT 2
define LCD_BITS 4
define LCD_LINES 4
define LCD_COMMANDUS 2000
define LCD_DATAUS 50




ANSEL = %00000000
ANSELH = %00000000
TRISD = %00000000
TRISE = %00000000

TRISB = %11111111
TRISC = %10000000

encoder1_counter var byte
encoder1_LastStateA var bit
encoder1_StateA var bit
encoder2_counter var byte
encoder2_LastStateA var bit
encoder2_StateA var bit
encoder3_counter var byte
encoder3_LastStateA var bit
encoder3_StateA var bit
preset_counter var byte
saved_counter var byte
display_counter var byte
encoder1_pinA var PORTB.7
encoder1_pinB var PORTB.6
encoder2_pinA var PORTB.5
encoder2_pinB var PORTB.4
encoder3_pinA var PORTB.3
encoder3_pinB var PORTB.2
button1 var PORTB.1
button2 var PORTB.0
button3 var PORTC.7

encoder1_preset var byte
encoder2_preset var byte
encoder3_preset var byte

encoder1_counter = 50
encoder2_counter = 50
encoder3_counter = 50
preset_counter = 1
display_counter = 0
saved_counter = 0
encoder1_LastStateA = encoder1_pinA
encoder2_LastStateA = encoder2_pinA
encoder3_LastStateA = encoder3_pinA

pause 500

'=====================MAIN LOOP TO READ INCREMENTAL ROTARY ENCODERS========================
mainloop:   
    
    encoder1_StateA = encoder1_pinA                                 ' read first encoder
    if encoder1_StateA != encoder1_LastStateA then
        if encoder1_pinB != encoder1_StateA then
            encoder1_counter = encoder1_counter + 1
        else 
            encoder1_counter = encoder1_counter - 1               
        endif
        encoder1_LastStateA = encoder1_StateA
   endif
   
   encoder2_StateA = encoder2_pinA                                  ' read second encoder
    if encoder2_StateA != encoder2_LastStateA then
        if encoder2_pinB != encoder2_StateA then
            encoder2_counter = encoder2_counter + 1
        else 
            encoder2_counter = encoder2_counter - 1               
        endif
        encoder2_LastStateA = encoder2_StateA
   endif
   
   encoder3_StateA = encoder3_pinA                                  ' read third encoder
    if encoder3_StateA != encoder3_LastStateA then
        if encoder3_pinB != encoder3_StateA then
            encoder3_counter = encoder3_counter + 1
        else 
            encoder3_counter = encoder3_counter - 1               
        endif
        encoder3_LastStateA = encoder3_StateA
   endif
   
 '=====================MAIN LOOP TO RECOGNIZE BUTTON PRESSES==============================  
   
   if button1 = 0 then                                  'when preset down button on encoder1 is pressed
        preset_counter = preset_counter - 1
        gosub read_preset
        pause 25
        do until button1 = 1                            ' debounce
            pause 25
        loop
        pause 25        
   endif
   
   if button2 = 0 then                                  'when save button on encoder2 is pressed
       gosub save_preset
        pause 25
        do until button1 = 1                            ' debounce
            pause 25
        loop
        pause 25
   endif
   
   if button3 = 0 then                                  'when preset up button on encoder3 is pressed
        preset_counter = preset_counter + 1
        gosub read_preset
        pause 25
        do until button3 = 1                            'debounce
            pause 25
        loop
        pause 25
   endif
   
   display_counter = display_counter + 1                '200ms delay between LCD updates
   pause 1
   if display_counter >= 200 then
        gosub display
        display_counter = 0
   endif
   
goto mainloop
end 

read_preset:                                                    ' read presets from EEPROM and change values for encoder positions

    read preset_counter, encoder1_preset, encoder2_preset, encoder3_preset
    pause 25
    encoder1_counter = encoder1_preset
    encoder2_counter = encoder2_preset
    encoder3_counter = encoder3_preset

return

save_preset:                                                    'save encoder positions to EEPROM and display "saved" message
    
    lcdout $fe, 1
    lcdout $fe, $c0, "     PRESET ", dec2 preset_counter
    lcdout $fe, $94, "       SAVED"
    write preset_counter, encoder1_counter, encoder2_counter, encoder3_counter
    pause 1500

return 


display:                                                           ' LCD display text
        lcdout $fe, 1
        
        lcdout $fe, $80, "*****PRESET ", dec2 preset_counter, "******"
    
        lcdout $fe, $94 + 1, "NCDR1"
        lcdout $fe, $d4 + , dec encoder1_counter
    
        lcdout $fe, $94 + 8, "NCDR2"
        lcdout $fe, $d4 + 9, dec encoder2_counter
    
        lcdout $fe, $94 + 14, "NCDR3"
        lcdout $fe, $d4 + 15, dec encoder3_counter
return