Cómo hacer un contador en pic16f877a [cerrado]

-3

Este es un programa en pic16f877a que debe contar con incrementos automáticos y luego reiniciarse en 0X0F. Sin embargo, no funciona (no cuenta con proteus, solo muestra cero). ¿Cómo consigo que el contador funcione?

#include    <16f877a.h>
#fuses      XT,NOWDT
#use        delay(clock=4000000)
int c;
int  portb;   
int trisb;
void main()
{
   int c=0;
   portb=0;
   trisb=0b00000000;
   while(1)
   {
      if(c<=16) {
      portb=c;
      c=c+1;
      delay_ms(100);
   }
   else if (c>=0x0F)
   { c=0x00;}
   }
}
    
pregunta esha123

2 respuestas

1

"No funciona" no es una descripción útil. Indique cualquier error o advertencia del compilador y describa exactamente cuáles pueden ser las discrepancias funcionales. Sin embargo, hay algunas cosas obvias mal.

Está declarando variables int con nombres similares a los registros char PORTB y TRISB, que se definen en el archivo .h. Tenga en cuenta que el caso es significativo en los identificadores de C.

Normalmente se definirán de esta manera:

  

extern volatile unsigned char PORTA @ 0x00C;

pero busca en el archivo .h ..

Puede haber otras cosas incorrectas: ¿pretendías escribir C + = 1; ? Y si es así, ¿por qué? dos veces?

Los IDE de Microchip tienen una capacidad de simulación decente que puede utilizar para un solo paso a través del programa desde la fuente C. Vale la pena aprender a usarlo.

    
respondido por el Spehro Pefhany
0

No estás incrementando tu contador en ningún lugar que pueda decirte.

while(1)
   {
      if(c<=16) {
      c=1;
      portb=c;
      c=1;
      delay_ms(100);
   }
   else if (c>=0x0F)
    { c=0x00;}

}

No hay ningún lugar en este bloque donde la variable c salga de 1. Se establece en 1 si es menor que 16, y eso es todo. Es probable que desee configurar uno como c++ para que se incremente en uno, y elimine el segundo c=1 . O tal vez su portb = c está al revés, y ninguno de los dos c=1 debería estar allí. No lo sé.

    
respondido por el Andy Foster

Lea otras preguntas en las etiquetas