Condiciones Infinitas con CCS

Alguien me puede ayudar a aclarar esta duda.
Tengo un codgio parecido a esto, un ciclo infinito dentro de otro ciclo infinito, que problemas me puede causar? al momento de hechar a andar un micro PIC16F876A


while(1)
{
while(1)
{
while(1)
{}
}
}

Les adjunto codigo fuente, la duda es porque nunca he hecho algo parecido, solo uso un ciclo infinito a la vez, y no de esta forma.

Tengo el micro conectado a un LCD 16X2, pero de vez en cuando la intensidad baja, repentinamente, o me envia codigo basura, creen que se me este desbordando el PIC?, ya revise los cortos, y consumo de corriente, todo esta bien, logre que mejorara el desempeño dl circuito al que lo tengo conectado, quitando instrucciones, pero me queda esta duda.

Les comento, la simulacion me la hace perfecta, pero en el circuito real es donde surgen problemas.
Gracias por su ayuda, cualquier duda si no fui claro me la hacen saber por favor.
Les envio mi proyecto completo. Saludos.
 

Adjuntos

  • New Text Document.txt
    8.1 KB · Visitas: 5
  • Test lcd.rar
    61.2 KB · Visitas: 6
Última edición por un moderador:
No entiendo para que quieres hacer eso... simplemente seria un pesimo programa...

Los problemas que vas a tener son un posible desborde de memoria del PIC y que conforme entre a niveles mas profundos nunca regresara al programa principal...
 
Lo se, es un codigo que trato de arreglar, pero nunca habia yo visto, esta estructura asi con while infinitos anidados, y como tengo problemas con el funcionamiento de programa, lo relaciono con estos while, ademas de otras instrucciones que le quite y mejore, de hecho el siguiente paso es eliminar esas while infinitos. pero me surgio la duda de que puede pasar con el micro con estos ciclos infinitos colocados asi.
Nunca he tenido un desborde de memoria y no se que puede pasar con el micro, es decir, con el programa que este corriendo, o que es lo que se apreciaria en un lcd por ejemplo con un desbordamiento?, asi que si me lo pueden explicar estare muy agradecido.
Saludos otra vez.
 
Lo se, es un codigo que trato de arreglar, pero nunca habia yo visto, esta estructura asi con while infinitos anidados, y como tengo problemas con el funcionamiento de programa, lo relaciono con estos while, ademas de otras instrucciones que le quite y mejore, de hecho el siguiente paso es eliminar esas while infinitos. pero me surgio la duda de que puede pasar con el micro con estos ciclos infinitos colocados asi.
.................
No pasa absolutamente nada. No hay rebase de stack ni nada parecido porque el compilador simplemente escribe un GOTO con destino al comienzo del WHILE.

El código entre los dos primeros WHILEs se ejecuta una sola vez y el posterior no se ejecuta nunca. Si se activan las optimizaciones, todo buen compilador debe eliminar ese código (dead code).


Ahora, si en entre medio de esos WHILEs tenés condicionales, no sólo tampoco pasa nada sino que escribir while(1){ es un recurso muy común. Como podría haber sido también for(;; ){
 
Lo que yo no entiendo del programa que pusiste es que hay funciones que tienen adentro un while infinito y eso no tiene sentido porque la primera vez que llamas a la funcion no salis nunca mas de ella, asi que sinceramente no se como te funciona la simulacion.
 
Bien, ya he mejorado el codigo, de hecho tuve que rehacer todo, esta mejor, pero hay un problema que he tenido desde el principio.

En el LCD me aparecen caracteres basura, o bien se pierde la intensidad del mismo, pero el programa sigue en ejecucion,no hay cortos, no hay caidas de voltaje, el LM7805 no se calienta en lo mas minimo.

Que puedo hacer? ya he revisado soldaduras frias, falsos contactos.

Ha, lo olvidaba, para conectar el LCD use extensiones de cable calibre 22, de aprox 10 cm de largo.
Ya he cambiado la fuente de voltaje.
Que mas? ya no se me ocurre nada mas. a menos que el codigo este mal. que al momento de rehacer todo, esta falla que menciono que tuve desde el principio, disminuyo al 20%. es decir falla menos que antes, pero no he podido erradicar este problema.
Por su ayuda mil gracias.

Les comparto este nuevo codigo.
 

Adjuntos

  • Programa CCS Rev a.rar
    28.5 KB · Visitas: 9
Programa el PIC con el codigo anterior, si el display no muestra diferencia de brillo entonces sabes que el problema esta en el nuevo codigo....
 
El codigo anterior estaba peor, de hecho parece que no es un problema nuevo, estuve buscando en varios foros, y los sintomas son los mismos(caracteres basura, comportamiento extraño de lcd, tal y como me pasa a mi), aunque nadie describe la solucion al menos en los foros que he leido hasta ahora, seguire buscando, si alguien sabe la solucionm adradezco su ayuda.

links realcionados
http://es.edaboard.com/topic-608860.0.html
http://www.robotsperu.org/foros/lcd-vt448.html
ojala alguien me pueda ayudar.



Miren incluso aqui no esta del todo solucionado, que mas puedo hacer?


http://www.ccsinfo.com/forum/viewtopic.php?t=24661&postdays=0&postorder=asc&start=90
 
Última edición:
si a alguien mas le ha pasado este mismo problema.
Hasta ahora me ha funcionado.
#USE fast_io(a)
#USE fast_io(b)


set_up(ADC_OFF);

En sus respectivos lugares.
Lei en algun foro, que el PORT ADC afecta a los LCD, y con esto mejoro mi LCD. no recuerdo en cual, porque lei muchos, no se cuantos.


Es decir.

Aparecen solo 2 caracteres extraños, y luego se quitan cuando se actualiza el LCD, y antes de estas lineas se quedaba con basura en el LCD.

Ahora, Los caracteres basura me aparecen cuando corre la animacion, y como la linea se actualiza, se sobreescriben,.
Aun que la segunda linea se recorre 2 car acteres o aparece un caracter de mas.
Esta linea como no se actualiza, los caracteres basura persisten.

Tratare de hacer un poco de magia con la segunda linea para que no se vean los caracteres basura, y aunque no es la solucion, creo que funcionara.

Si alguien me puede ayudar a resolver el presente problema se los agradezco.

en si mi problema actual sucede al correr la funcion animacion.
Saludos.
 
Atrás
Arriba