SALUDOS!!... es cierto q el 877 tienen 8k de memoria de programa, pero dividida en 4 paginas... lo q hace muy engorroso la programacion de software mayores a 2k ya q cada pagina es de ese tamaño, las paginas son la 0,1,2 y 3, lamentablemente el 877 no direcciona directamente a las paginas 1,2 o 3 hay q setear unos bits que tiene el pclatch para poder cabiarse de pagina lo q lo hace mas engorroso aun.... pero hay una forma muy sencilla de conseguir el acceso a estas paginas, es importante saber que si una rutina esta an la pagina 2 y es llamada de la pagina 0 culakiera otra q no sea la pagina donde la ruitna se encuentra el micro se reiniciara o no arrancara... lo que yo hago es colocar las rutinas mas largas y las tablas en la pagina 1,2,3 segun necesite espacio, y tratar en lo maximo q el cuepro principal del programa y las rutinas mas usadas tales los retardos y dato y control de la lcd en la pagina 0... para colocar las rutinas en una pagina selecionada lo haces con la directiva ORG XXXXH las X representan el inicio de la pagina y debajo de eso colocas lo q kieras de esa manera ya estas poniendo el codigo en el lugar q kieres... ahora el problema esta en q si yamas a una rutina que se encuentra en la pagina 2 por ejemplo es dificil determinar en dodne se encuetra para cambiarte de pagina y ademas de eso esa posicion va estar variando segun vayas programando asi q hay 2 instrucciones muy comodas q hacen todo el trabajo que son PAGESEL y LCALL....
PAGESEL(SELECIONA PAGINA)
LCALL(LONG CALL O LLAMADO LARGO)
ejemplo:
voy a llamar una rutina que no esta en pagina 0 desde la pagina 0, tampoco se donde esta ubicada la rutina, la rutina se llama EJEMPLO
PAGINA 0
PAGESEL EJEMPLO
LCALL EJEMPLO
;continua progrmanando
ORG XXXXH;(COLOCA LAS RUTINAS EN OTRA PAGINA)
RUTINA
....
....
.....
RETURN
RUTINA
.....
...
RETURN
EJEMPLO MOVLW "H";carga el ascii de H en el acumulador
RETURN
espero te ayude!!!!!!!!!!!!