Autor Tema: Consulta sobre Bucle For dentro de un While(1) - Lenguage C  (Leído 2281 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jhoser

  • PIC10
  • *
  • Mensajes: 14
Consulta sobre Bucle For dentro de un While(1) - Lenguage C
« en: 03 de Marzo de 2016, 22:01:22 »
Buenas a todos,

Un gusto entrar nuevamente en contacto con la gente del foro.
Tengo una consulta es acerca de un bucle for dentro de un while(1). Se trata de un programa que muestra los numeros del 0 - 9 tomados de un array modo automatico. Mi consulta es porque cuando la condicion For es NO (es decir i = 10) no me muestra el valor 0x5e? y vuelve a empezar. A continuacion muestro el codigo, tambien realice un dibujo del diagrama de flujo, si esta equivocado les ruego por favor me lo aclaren.

Muchas gracias de antemano.

Saludos,

//==============CONTADOR AUTOMATICO DE 0-9 ================================
//======================ENCABEZADO DE PROGRAMA ==========================
#include <16F84A.h>
#fuses XT, NOWDT, PUT, NOPROTECT
#use delay(clock=4Mhz)
//=======================DEFINICION DE VARIABLES===========================


//======================CONFIGURACION DE PUERTOS==========================
#use standard_io(A)
#use standard_io(B)

//===========================PROGRAMA=====================================

void main()
{
   set_tris_b(0x00);               
   disable_interrupts(GLOBAL);     
   int i;
   byte TABLANUM [10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
   
while(1)
   {
      for(i=0; i<10; i++)
         {
           output_B(TABLANUM);
           delay_ms(350);
         }
      output_B(0x5e);
   }
}

« Última modificación: 03 de Marzo de 2016, 22:06:38 por jhoser »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Consulta sobre Bucle For dentro de un While(1) - Lenguage C
« Respuesta #1 en: 03 de Marzo de 2016, 22:30:11 »
Código: C
  1. void main()
  2. {
  3.    set_tris_b(0x00);                
  4.    disable_interrupts(GLOBAL);      
  5.    int8 i;
  6.    int8 TABLANUM [10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7.    
  8. while(1)
  9.    {
  10.       for(i=0; i<10; i++)
  11.          {
  12.            output_b(TABLANUM[i]);
  13.            delay_ms(350);
  14.          }
  15.       output_b(0x5e);
  16.       delay_ms(350);
  17.    }
  18. }

Te recomiendo que no te acostumbres a byte. Y uses int8, int16 que da una mejor idea. O si queres seguir la nomeclatura clasica, usa char para 8 bits. CCS lo toma como unsigned.

Si queres acceder al valor de un array lo haces de esa forma, donde la i es la posicion accedida. Precaucion se debe tomar de no excederse en valor el indice

Código: C
  1. TABLANUM[i]

Otro posible problema es que entre la linea output_b(0x5e) y el comienzo del nuevo for() no hay ningun delay (Por que el while comienza de nuevo), por lo tanto va a durar microsegundos. Por eso le agregue un delay mas.

Si usas standard_io() no hace falta setear el tris, por que CCS agrega instrucciones cada ves que escribis o lees. Esto por ahi limita la velocidad del pin, por eso si uno quisiera tener los pines como salida si o si, deberia usar fast_io() y si usar el tris.

Todo lo demas me parece correcto. Solo una convencion la de no usar nombres todos en mayusculas los cuales indican constantes.

Desconectado jhoser

  • PIC10
  • *
  • Mensajes: 14
Re:Consulta sobre Bucle For dentro de un While(1) - Lenguage C
« Respuesta #2 en: 03 de Marzo de 2016, 23:06:32 »
Exacto KILLERJC  :-/, tienes toda la razon solo le faltaba un delay para mostrar el valor cuando el lazo for no se cumple y pasar nuevamente al while(1). Gracias por las recomendaciones las tendre en cuenta.

Creo que cuando alguien quiere aprender a programar Pics es necesario volver atras, hay mucha bilbiografia para programar Pics en C pero muy pocos ensenan la metodologia de programacion que hace falta para encarar los proyectos incluso los mas sencillos. Y pienso es ahi donde muchos nos confundimos y no avanzamos.

Gracias nuevamente, estare por aqui mas seguido, saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Consulta sobre Bucle For dentro de un While(1) - Lenguage C
« Respuesta #3 en: 03 de Marzo de 2016, 23:13:19 »
Si muchas cosas son de propias del lenguaje como el caso del array, del "flujo" del programa, y tutoriales sobre "programacion C" hay muchisimos en internet, libros, etc.

Por otro lado luego tenes que aprender a usar el micro y saber que cosas tiene.

Y finalmente el compilador. A mi particularmente me gusta mas XC8 por que tiene una relacion mas directa con el datasheet, manejar registros etc. Y puedo hacer las librerias que a mi me gusten, pero CCS tiene tambien cosas muy buenas como la facilidad de implementar algunas cosas ( como RS232 ) sin necedidad que la persona sepa exactamente que registros hay que modificar. En XC8 podes hacer algo parecido, pero normalmente uno termina modificando los registros directamente.

Cualquier otra duda que tengas, podes preguntarla aca (por mas que sea distinto a lo que dice el titulo si es que son varias) o crear un nuevo post.

Desconectado jhoser

  • PIC10
  • *
  • Mensajes: 14
Re:Consulta sobre Bucle For dentro de un While(1) - Lenguage C
« Respuesta #4 en: 05 de Marzo de 2016, 00:31:35 »
Gracias KILLERJC  :) conozco muy poco estoy comenzando, pero con muchas ganas de aprender. Sobre lo que comentas, que libro piensas que es justo y necesario que un no programador tiene leer para comenzar en C?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Consulta sobre Bucle For dentro de un While(1) - Lenguage C
« Respuesta #5 en: 05 de Marzo de 2016, 02:26:13 »
Realmente no conosco ningun libro, yo aprendi C con unas hojas que trajo un profesor, ni siquiera era un libro y encima de las cuales la mitad eran de punteros.
Pienso que cualquier tutorial que puedas encontrar por internet de C te serviria. Especialmente sobre los arrays, for/while/do..while/if , continue,break,etc.