TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: amospi en 28 de Mayo de 2008, 14:05:22

Título: Otros problemas con C
Publicado por: amospi en 28 de Mayo de 2008, 14:05:22
Hola Muchachos en mi nuevo programa tengo los sigientes problemas: me ingresa al seguno for, pero no se sale, se queda ahí, únicamente se sale cuando se da uno de los dos IF que están dentro de este for; creo que está bien planteado
Código: [Seleccionar]
for(i=0;i<700;i++).  Realmente no se que es lo que pasa.  Cuando lo llevo al segundo FOR
Código: [Seleccionar]
for(i=0;i<=1000;i++), pasa lo mismo, se queda ahí, no se sale.

Otra consulta: cómo hago para que me salgan los números de las líneas cuando pego un código???.  Las líneas están activas en mi editor pero, no las puedo seleccionar.

Gracias por colaborarme

Este es el código
Código: [Seleccionar]
#include "C:\Archivos de programa\PICC\hopper.h"
char n=' ';
int cont= 0;
unsigned char x=0;
unsigned short i;
int j;
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   output_high (pin_c0);
   output_high (pin_c1);
iter:
   for(;;)

   {
    if (!input (pin_b0))
     {
       for(i=0;i<700;i++)
        {
          delay_ms(10);
          if (input (pin_b0))
            {
              output_low (pin_c1);
              delay_ms (400);
              output_high (pin_c1);
              i==0;
              goto iter;
             }

           if (!input (pin_b1))
             {
              i==0;
              goto iter;
             }
         }
         i==0;
         output_low (pin_c0);
         for(i=0;i<=1000;i++)
         {
          delay_ms(10);
         if(input (pin_b0))
           {
            output_low (pin_c1);
            delay_ms (2000);
            output_high (pin_c1);
            output_high (pin_c0);
            i==0;
            break;
           }
         }
        output_high(pin_c0);
       }
     }
 }

Este es el .H

Código: [Seleccionar]
#include <16F873.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,RC, NOPUT, NOPROTECT, BROWNOUT, LVP, NOCPD, NOWRT, NODEBUG
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8)

Título: Re: Otros problemas con C
Publicado por: RICHI777 en 28 de Mayo de 2008, 15:25:30
Hola deberias verificar cual es el alcance de un unsigned short en tu compilador, porque si es de 0-255 nunca llegas a 700, podrias probar probar reemplazando el int por unsigned long.

Saludos !
Título: Re: Otros problemas con C
Publicado por: MLO__ en 28 de Mayo de 2008, 16:28:51
Hola.

Revisando la ayuda del CCS encontre lo siguiente: El int1 equivale a un numero de un bit, no tiene signo y el equivalente en ansiC es short entonces la declaracion unsigned short i, primero que todo no tiene sentido en el unsigned  y segundo, el valor maximo que puede tomar la variable i es 2!!!! por lo que nunca va a llegar a 700.

Prueba cambiar a int16 i a ver que sucede

Saludos
Título: Re: Otros problemas con C
Publicado por: firepic en 28 de Mayo de 2008, 16:33:24
Saludos!
Totalmente de acuerdo con ustedes, Richi y MLO!
Ese seguramente es el problema... la variable i tiene que ser declarada como int16.
Nos leemos!  :mrgreen:
Título: Re: Otros problemas con C
Publicado por: MLO__ en 28 de Mayo de 2008, 16:37:05
Citar
el valor maximo que puede tomar la variable i es 2!!!!

Lo siento ....... estos dedos solo responden bien en el sweep y en el alternate picking pero en el teclado son un desastre!!!!
Título: Re: Otros problemas con C
Publicado por: amospi en 29 de Mayo de 2008, 14:56:56
Gracias muchachos, esa era la falla, lo probé y me funcionó.  Yo tengo en mis notas que
Código: [Seleccionar]
unsigned short i;
, asigna una variable de 16 bits, no se si tendré un error.
Título: Re: Otros problemas con C
Publicado por: Gonzalo_BlackHawk en 29 de Mayo de 2008, 15:52:59
Hola amospi, La declaración de un tipo de datos unsigned short es en forma predeterminada equivalente a la declaración int1, es decir a la de un bit, con lo cual la variable podrá tomar valores 0 o 1. Digo en forma predeterminada porque puedes cambiar las declaraciónes estándar en tu programa mediante el uso de la directiva de preprocesador #TYPE. Espero haber sido de ayuda.

Saludos!