Autor Tema: Cosa muy rara con retardos y 16f876  (Leído 2353 veces)

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

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
Cosa muy rara con retardos y 16f876
« 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

Desconectado artgos

  • PIC10
  • *
  • Mensajes: 20
RE: Cosa muy rara con retardos y 16f876
« Respuesta #1 en: 22 de Junio de 2005, 06:28:00 »


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


Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Cosa muy rara con retardos y 16f876
« Respuesta #2 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();
   }
}




Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Cosa muy rara con retardos y 16f876
« Respuesta #3 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

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Cosa muy rara con retardos y 16f876
« Respuesta #4 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


 

anything