Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

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

×