Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Joao Fabri

Acionamento de leds com PIC 16F883

Recommended Posts

Boa Noite, desenvolvi um código para quando determinado botão for acionado os LEDS ligados ao PORTB serão acionados de uma sequencia diferente.. o codigo compila e funciona quando gravado no PIC, porém ao desligar a alimentação e ligar novamente o programa foi apagado e não funciona mais nada... Só resolve regravando e assim vai... O que poderia ser ? Segue programa comentado..

 

#define B1 RA3_bit
#define B2 RA4_bit
#define B3 RA5_bit
#define B4 RE3_bit
#define LED1 RB0_bit
#define LED2 RB1_bit
#define LED3 RB2_bit
#define LED4 RB3_bit
#define LED5 RB4_bit
#define LED6 RB5_bit
#define LED7 RB6_bit
#define LED8 RB7_bit

void interrupt ()                             // função de interrupção
{
 if (T0IF_bit)                                // Testa Flag estouro TMR0
 {
  T0IF_bit = 0x00;                            // Limpa flag
  TMR0     = 0x69;                            // Reenicia TMR0

  if (B1 == 0)                                // Se B1 for pressionado segue a sequencia de funcionamento
  {                                           // dos leds
   Delay_us (40);
   LED8   = 1;
   Delay_ms(100);
   LED7   = 1;
   Delay_ms(100);
   LED6   = 1;
   Delay_ms(100);
   LED5   = 1;
   Delay_ms(100);
   LED4   = 1;
   Delay_ms(100);
   LED3   = 1;
   Delay_ms(100);
   LED2   = 1;
   Delay_ms(100);
   LED1   = 1;
   Delay_ms(100);
   PORTB  = 0x00;
   }
     if (B2 == 0)                             // Se B2 foi pressionado segue sequencia
  {                                           // de funcionamento dos leds
   Delay_us (40);
   LED1   = 1;
   Delay_ms(100);
   LED2   = 1;
   Delay_ms(100);
   LED3   = 1;
   Delay_ms(100);
   LED4   = 1;
   Delay_ms(100);
   LED5   = 1;
   Delay_ms(100);
   LED6   = 1;
   Delay_ms(100);
   LED7   = 1;
   Delay_ms(100);
   LED8   = 1;
   Delay_ms(100);
   PORTB  = 0x00;
   }
        if (B3 == 0)                         // Se B3 foi pressionado segue a sequencia
  {                                          // de funcionamento dos leds
   Delay_us (40);
   LED5   = 1;
   Delay_ms(100);
   LED4  = 1;
   Delay_ms(100);
   LED6   = 1;
   Delay_ms(100);
   LED3   = 1;
   Delay_ms(100);
   LED7   = 1;
   Delay_ms(100);
   LED2   = 1;
   Delay_ms(100);
   LED8   = 1;
   Delay_ms(100);
   LED1   = 1;
   Delay_ms(100);
   PORTB  = 0x00;
   }
       if (B4 == 0)                        // Se B4 foi pressionado segue sequencia
 {                                         // de funcionamento dos leds
 PORTB = 0xFF;
 Delay_ms(500);
 PORTB = 0x00;
 Delay_ms(500);
 }

 else  PORTB = 0x00;

 }
}


void main()
{
OPTION_REG    =  0b00001110;                    // TMR0, Prescaller 1:128
GIE_bit       =  0x01;                          // Habilita interrupção geral
PEIE_bit      =  0x01;                          // Habilita interrupção por perifericos internos
T0IE_bit      =  0x01;                          // Habilita interrupção por estouro TMR0
TMR0          =  0x69;                          // Inicia TMR0 para contagem de 150 (tempo de estouro 20ms)
ANSEL         =  0x00;                          // todas como pinos digitais
ANSELH        =  0x00;                          // todos como pinos digitais
TRISB         =  0x00;
TRISA         =  0b00111000;
TRISE.RE3     =  0x01;
TRISC.RC3     =  0x00;
PORTA         =  0b00111000;
PORTB         =  0x00;
RC3_bit       =  0x01;
RE3_bit       =  0x01;


while (1)
{
  PORTB = 0xFF;                               // enquanto nada acontece todos os LEDS ficam acesos
}
}

 

adicionado 1 minuto depois

Segue os fusesbits 

fuses.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que achas que teu programa devia fazer? Numa análise superficial parece que há poucas condições onde se vê alguma  'vida' nele ou seja alternãncia de status dos leds.

Tente habilitar a função reset no pino e claro, coloque o rc do reset.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×