Hola chicos.
Bueno, los 16F877 tienen 8Kx 14 words de espacio de memoria de programa, y esto no se cambia por más código que agreguemos. La instrucción #device *=16 solo cambia el modo de acceder a la RAM, lo cual permite ciertas ventajas como por ejemplo poder manejar mas eficientemente ciertos sectores de esta memoria que de otra forma no se pueden usar (Este problema lo tienen algunos dispositivos como los 509, 57, 66, 67, 76 y 77 hasta donde yo sé). Para tu caso vasco esto no te sirve porque en general el manejo de punteros de 16 bits requiere mas ROM lo cual te empeora tu situación, CCS lo aclara en su manual y yo lo he comprobado en la realidad (tratandando de ahorrar memoria en un caso parecido al tuyo).
Me extraña que una sola variable float este desbordando tu capacidad de almacenamiento, habria que ver el código para poder depurarlo un poco. No entiendo tu error, el compilador te indica esto? "Out of ROM, A segment or the program is too large". Si es así el problema esta en que una función es muy larga y no hay suficiente ROM para ejecutarla. lo que se puede hacer en este caso es resignarte un nivel en el stack y cortar la función en dos con la instrucción #separate. Puedes verificar si hay alguna función esta desbordando la página de código mirando el Call Tree que genera CCS, es muy útil porque indica la RAM y la ROM que utiliza cada segmento del programa. Esperamos tu respuesta.
0x01 Saludo.