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  
CIS

Programa executando somente a metade

Recommended Posts

Ola a todos! Pessoal, será que alguem ja teve um PIC ( o meu é o 16F877A) execunatndo apenas a metade do programa ? Fiz um codigo no MiCkroC PRO 5.61, com varios laços de repetição for dentro de um while. O codigo compila normal, e grava tambem sem nenhum erro no PIC, mas não hora de executar ele faz apenas a metade, e as vezes nem isso, mas sempre voltando ao inicio, sem travar.... ja tentei mudar a ordem das repetições mas não resolveu nada... alguem ja passou por isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o programa para analisarmos.

Você está com o WDT desativado? O programa ocupa quantas instruções?

Quando se programa em assembly esse problema pode ser de selação de página de memória (algo bem chatinho na arquitetura do PIC16). Como você está usando um compilador C era para este já se encarregar de mudar as páginas de memória, mas o compilador pode ter um bug.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Eu não entendo tanto ainda e não sei o que é bug... não tenho o codigo aqui porque estou no trabalho, mas mais a noite eu coloco o ele aqui... so uma duvida que talvez você possa me esclarecer...

    Se eu declaro uma variavel antes da função main(), e faço ela = 0, ela é uma variavel universal, correto ?

    agora eu uso essa variavel num laço for, ela sera incrementada e tal... quando eu fecho esse laço for, a variavel sera zerada ?? e eu posso inicia-la em outro laço c om valor = 0 ??

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Se eu declaro uma variavel antes da função main(), e faço ela = 0, ela é uma variavel universal, correto ?

    Ela só vai funcionar para a função main(). Se quiser declarar uma variável universal (que possa ser acessada por qualquer função ou sub-rotina) você declara no começo do código fora de qualquer função.

    agora eu uso essa variavel num laço for, ela sera incrementada e tal... quando eu fecho esse laço for, a variavel sera zerada ?? e eu posso inicia-la em outro laço c om valor = 0 ??

    Isso vai depender de como você configurou o seu laço FOR. Se você configurou para quando chegar a 0 sair do laço, ai sim a variável estará zerada.

    Lembrando que você pode definir o valor inicial da variável no começo do laço FOR:

    for (count=0;count<100;count++){

    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • entendi, acho que vou ler uns tutorais sobre a linguagem... obrigado pelo esclarecimento... tambem tava lendo aqui sobre o "bug", pra pegar uma noção ... valeu... logo mais eu posto o codigo, se puder me dar um ajuda...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • eis aqui o codigo... os comentários estão fora de questão.

    unsigned short x = 0, y = 0;
    void main() {
    ADCON1 = 0x06;
    CMCON = 0x07;
    trisb = 0b00000000;
    portb = 0b00000000;
    portd = 0b00000000;
    trisd = 0b00000000;
    trisc = 0b00000000;
    portc = 0b00000000;
    trise.pspmode = 0;


    while(1) { //enquanto houver alimentação.
    for(y = 0; y <= 10; y++){ // repete 5 vezes o laço abaixo:
    for(x = 0; x <= 6; x++){
    portb = 1<<x;
    delay_ms(50);
    portb = 0b00000000;
    }
    for(x = 0; x <= 6; x++){
    portd = 1<<x;
    delay_ms(50);
    portd = 0b00000000;
    }
    for(x = 0; x <= 6; x++){
    portc = 1<<x;
    Delay_ms(50);
    portc = 0b00000000;
    }
    }
    delay_ms(1000);


    for(y = 0; y <= 4; y++){ // repete 5 vezes o laço abaixo:
    for(x = 0; x <= 6; x++){
    portb = 1<<x;
    delay_ms(100);
    portb = 0b00000000;
    }
    for(x = 0; x <= 6; x++){
    portd = 1<<x;
    delay_ms(100);
    portd = 0b00000000;
    }
    for(x = 0; x <= 6; x++){
    portc = 1<<x;
    Delay_ms(100);
    portc = 0b00000000;
    }
    }

    for(y = 0; y <= 4; y++){ // repete 5 vezes o laço abaixo:
    for(x = 0; x <= 6; x++){
    portb = 1<<x;
    portd = 1<<x;
    portc = 1<<x;
    delay_ms(500);
    portb = 0b00000000;
    portd = 0b00000000;
    portc = 0b00000000;
    }
    }

    for(y = 0; y <= 9; y++){ // repete 5 vezes o laço abaixo:
    for(x = 0; x <= 6; x++){
    portb = 1<<x;
    portd = 1<<x;
    portc = 1<<x;
    delay_ms(50);
    portb = 0b00000000;
    portd = 0b00000000;
    portc = 0b00000000;
    }
    }

    for(y = 0; y <= 9; y++){ // repete 5 vezes o laço abaixo:
    for(x = 0; x <= 6; x++){
    portb = 0b00101010;
    portd = 0b00010101;
    portc = 0b00101010;
    delay_ms(100);
    portb = 0b00010101;
    portd = 0b00101010;
    portc = 0b00010101;
    delay_ms(100);
    }
    }

    for(y = 0; y <= 4; y++){ // repete 5 vezes o laço abaixo:
    for(x = 0; x <=2; x++) {
    portb = 0b00111111;
    portd = 0b00111111;
    portc = 0b00111111;
    delay_ms(500);
    portb = 0b00000000;
    portd = 0b00000000;
    portc = 0b00000000;
    delay_ms(500);
    }
    }
    }
    }

    Editado por Bcpetronzio
    Inserir code

    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

    ×