Ir ao conteúdo
  • Cadastre-se
ilovepic

PIC Incrementar no PORTB PIC16F690 no mikroC como configurar

Recommended Posts

Olá a todos,

Estou a seguir esta playlist:

E pretendo fazer com que o PORTB do pic16f690 altere entre 1 e 15 valores, para assim acender os leds. Como ele faz no vídeo.

Acontece que não consegui colocar o PORTB a fazer isso. Por isso comecei a testar algumas soluções à medida que fui pesquisando na net. Para já tenho este trecho de código:

void main() {
     ANSEL = 0;
     ANSELH = 0;
     TRISB = 0b00000000;
     PORTB = 0;
     TRISC = 0b00000000;
     PORTC = 0b00000000;
     
     while(1){
       // Pinos do PortB
       //PORTB++; // PORTB = PORTB + 1; - Quanto todos tiverem em 1 volta a ser 0;
       PORTB.RB7 = 1;
       delay_ms(1000);
       PORTB.RB7 = 0;
       /*
       RB4_bit = 1;
       delay_ms(2000);
       RB4_bit = 0;
       */

       // Pinos do PortC
       RC0_bit = 1;
       delay_ms(1000);
       RC0_bit = 0;
       delay_ms(1000);
       PORTC++;
       delay_ms(5000);
     }
}

Estive a ler no datasheet sobre o ANSEL e ANSELH mas não percebi bem. Segundo alguns posts que encontrei na net, em inglês, devo configurar o ANSEL e ANSELH porque estou a lidar com um port onde tenho saída ou entradas analógicas. Para que consiga trabalhar com esses pinos em modo digital tenho que configurar estas duas configurações. Resumindo, estou à deriva nesta parte da matéria. Todas as luzes serão bem vindas. Por onde aconselham recomeçar?

Obrigado

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não está funcionando, pois provavelmente você está usando a parte baixa da variável do PORTB e pelo que verifiquei no manual desse PIC (na página 67), os primeiros quatro bits do PORTB (os bits menos significativos) não estão implementados. Então se você atribuir o valor de, por exemplo 10 decimal ao PORTB, você estará setando 0b00001010. Isso significa que não vai acontecer nada mesmo, pois esses bits não tem função. Já para usar a parte alta do PORTB (bits mais significativos), você precisaria setar o valor 0b10100000 ou 0b10101111 para conseguir o mesmo "10 decimal" (tanto faz, pois os quatro primeiros bits não fazem nada como já disse).

Também não vi outros registradores relevantes para o que você precisa, que estejam relacionados com o PORTB (página 73);

 

Imagino que isso seja o que você precisa:

void main() {

    TRISB = 0x00; // ou 0b00000000
    PORTB = 0x00; // ou 0b00000000

    unsigned char MeuContador = 1;

    while (1) {
        // Mantém a contagem entre 1 e 15
        if (MeuContador >= 15) {
            MeuContador = 1;
        }

        // Seta os valores na parte alta de PORTB
        PORTB = MeuContador << 4;        

        MeuContador++;
        Delay_ms(1000);
    }
}

 

Editado por wBB
Editado para correção

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





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

×