TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: piriots en 22 de Junio de 2005, 05:32:00

Título: Cosa muy rara con retardos y 16f876
Publicado por: piriots en 22 de Junio de 2005, 05:32:00
Hola todopic! Tengo un problema muy extraño con el puerto a de un 16f876. El puerto lo uso como salidas digitales. El caso es que en mis pruebas siempre pongo un led a parparear para asegurarme que el pic sigue activo, y esta vez no se porque no logro que parpadee, hace cosas rarisimas. Primero enciendo Ra1, pongo el retardo y apago y luego enciendo ra2 pongo el retardo y apago. Lo que hace el pic es encender ra1, encender ra2 y luego parparpadea ra1 y ra2 se queda fijo. Que ocurre? He probado en un pic nuevo y hace lo mismo. Si quereis ver el codigo me lo diceis.

Salu2
Título: RE: Cosa muy rara con retardos y 16f876
Publicado por: artgos en 22 de Junio de 2005, 06:28:00


La verdad es que asi sin el codigo es dificil saberlo.

Título: RE: Cosa muy rara con retardos y 16f876
Publicado por: piriots en 22 de Junio de 2005, 15:00:00
Este es el codigo, a parte de que el led no parpadea, en la funcion menu_config solo me hace el primer if por mas veces que pulso el boton. Alguien sabe decirme porque?

Codigo:

#include <16f876.h>
#org 0x1F00, 0x1FFF void loader16F876(void) {}
#use delay (clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#byte port_b=6
#byte port_a=5
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
static int tecla;
void menu_config (void)
{

int var=2;
///////////////boton abajo////////////////////

   if (tecla==1 && var==2)
   {
      tecla=0;
      var=3;
      output_high(pin_a1);
   }
   if (tecla==1 && var==3)
   {
      tecla=0;
      var=4;
      output_low(pin_a1);
   }
   if (tecla==1 && var==4)
   {
      tecla=0;
      var=5;
      output_high(pin_a2);

   }
   if (tecla==1 && var==5)
   {
      tecla=0;
      var=6;
      output_low(pin_a2);
   }
   if (tecla==1 && var==6)
   {
      tecla=0;
      var=7;
      output_high(pin_a3);
   }
   if (tecla==1 && var==7)
   {
      tecla=0;
      var=8;
     output_low(pin_a3);
   }
   if (tecla==1 && var==8)
   {
      tecla=0;
      var=9;

   }
//////////////////////////  tecla arriba /////////////////////////////

   if (tecla==2)
   {
   tecla=1;
   var=var-2;
   }
   return;
}



#int_rb
void rb (void)
{
delay_ms(100);
if(!(port_b^0xF0))
  return;

if (!input(pin_b4))
   {
   tecla=1;
   return;
   }
if (!input(pin_b5))
   {
   tecla=2;
   return;
   }
if (!input(pin_b6))
   {
   tecla=3;
   return;
   }
if (!input(pin_b7))
   {
   tecla=4;
   return;
   }

}

void main()
{
set_tris_a(0);
set_tris_b(0xF0);
set_tris_c(0);
enable_interrupts(global);
enable_interrupts(int_rb);

   while(1)
   {
   output_high (pin_a0);
   delay_ms(1000);
   output_low (pin_a0);
   menu_config();
   }
}



Título: RE: Cosa muy rara con retardos y 16f876
Publicado por: antoniof en 23 de Junio de 2005, 03:59:00
No se si el CCS desactiva el conversor analógico-digital, pero en asm hay que desactivarlo si no se va a utilizar, antes de escribir nada en el puerto A
Título: RE: Cosa muy rara con retardos y 16f876
Publicado por: piriots en 23 de Junio de 2005, 05:18:00
De esto ya se encarga el CCS, yo empece a programar en asm pero al ver la comodidad del c no me pude resistir Giño

Salu2