Bueno disculpa mi torpeza.
hago debugg y por culpa de poner ADCON1=0xFF ( para poner todos los pines I/O digitales) entorpece al LCD, ya que veo que internamente el TRISB ( por lo que has dicho del pin RW, que entrada y salida) va variando el registro TRISB. Si trabajar con puerto A para entradas digitales, con puerto B en LCD es un problema, la solucion seria bastante fácil, cambiar el puerto de leds y ya está. De todos modos, al margen de si los leds se fastidian al no poner la linea de codigo ADCON1=0xFF ( la comento), el programa sigue en un delay permanente.
He visto varias cosas, por ejemplo el error que me dice el debugger es :
CORE-W0015: Out of bounds Memory Access (at address 0x046800 on 0x000001 bytes)
CORE-W0015: Out of bounds Memory Access (at address 0x046000 on 0x000001 bytes)
CORE-W0015: Out of bounds Memory Access (at address 0x046800 on 0x000001 bytes)
CORE-W0015: Out of bounds Memory Access (at address 0x046000 on 0x000001 bytes)
Busco esa dirección de memoria y no la encuentro( sólo hay hasta 0x007FFE), bueno más bien lo que quiero encontrar es qué ha de contener esa dirección de memoria, pero no lo veo, asi que no sé que pasa, sólo sé lo que pone, 1 byte se "escapa" porqué lo lo manda a fuera de rango de la memoria.
Donde se queda clavado, es en :
03A2 2EE7 DECFSZ 0xfe7, F, ACCESS
03A4 EFD1 GOTO 0x3a2
Bueno, con ASM hemos topado... Eso pertenece a C:\MCC18\src\traditional\delays\d10ktcyx.asm, una funcion que no creo que deba ( o debiera ) tocar para nada, así que el "culpable" que el fallo se aloje en esa función, es otro. hasta aqui voy dando palos de ciego, solo soy un mero observador. Ahora veo un poco mas, más claro quiero decir.
en mi programa, donde yo meto mis cosas, veo que en cuanto llamo a la función OpenXLCD, ésta llama a su vez a la siguiente función, donde se introduce manualmente en la cabecera del programa ( como he visto en tu manual y en la guia de funciones de Microchip):
void DelayPORXLCD (void)
{
Delay1KTCYx(15); // Delay of 15ms
return;}
, concretamente, el fallo estará ( después de todas estas suposiciones) en
Delay1KTCYx(15). La conexión entre eso y "out of bonds" se me escapa por completo... Asi que veo cómo esta hecho ese delay, y en el archivo delays.h, veo lo siguiente :
/* Delay1KTCYx
* Delay multiples of 1000 Tcy
* Passing 0 (zero) results in a delay of 256,000 cycles.
* The full range of [0,255] is supported. */
void Delay1KTCYx(PARAM_SCLASS unsigned char);
El parámetro a pasar esta comprendido entre 0 y 255. Esa variable " máxima", ocupa 1 byte ( de 0 a 255, ó 0xFF, ó 0b11111111). Siendo una función por paso de valor, esa copia de la variable ( byte) no sé dónde la guarda, o dónde debiera guardarla mejor dicho, pero creo que la guarda en un sitio donde no debe. Digo esto por sacar una conclusión acerca de esto último y el "out of bounds(...) 1 byte" del principio. Y aquí llega mi conclusión, si el fallo que describo es correcto, no tengo ni idea de cómo solucionarlo, y si la explicación dada para tratar de resolver el fallo, es errónea, pues lo tengo peor ...¿ Qué hago con ese delay ?