Ir ao conteúdo
  • Cadastre-se

Juhprogramação

Membro Júnior
  • Posts

    6
  • Cadastrado em

  • Última visita

Reputação

0
  1. @Isadora Ferraz juro que tentei fazer o seu varias vezes , olhando datasheet do componente, não consegui ! Fiz de outro jeito que ja tinha vista usando o control, foi por isso que tentei usar o control na interrupção, antes , porque achei que daria certo. obs: por que você usa o while daquele jeito no seu exemplo ? #define S1 RB1_bit #define led1 LATB2_bit #define led2 LATB3_bit #define led3 LATB4_bit int control = 0; void main() { ANSEL8_BIT=0; ANSEL9_BIT=0; TRISB1_bit=1; TRISB2_BIT=0; TRISB3_BIT=0; TRISB4_BIT=0; PORTB=0; LATB=0; while(1) { if (RB1_bit == 0 ) { control = control + 1; delay_ms(200); if (control == 4) control = 1; } if( control == 1) { LATB2_bit = 1; LATB3_bit = 0; LATB4_bit = 0; delay_ms(100); } if(control == 2) { LATB2_bit = 0; LATB3_bit = 1; LATB4_bit = 0; delay_ms(100); } if(control == 3) { LATB2_bit = 0; LATB3_bit = 0; LATB4_bit = 1; delay_ms(100); } }} e minha interrupção esta assim: bit control; void interrupt() { if(INT0IF_bit) { control = ~control ; if(control == 1) RB1_bit = 0x01; if(control==1) RB0_bit = 0x01 ; INT0IF_bit = 0x00; } } void main() { GIE_bit = 0x01; PEIE_bit = 0x01; INT0IE_bit = 0x01; INTEDG0_bit = 0x00; INTEDG1_bit = 0x00; TRISA = 0x01; TRISB = 0x00; PORTA = 1; PORTB = 0; control = 0x00; while(1) { } } eu realmente não sei onde estou errando ( varias vezes por sinal, no que você me mandou e no que estou fazendo ) e queria entender isso. Pesquisei bastante e parece que não estou saindo do lugar . você por acaso sabe algum curso ou sei la aulas que podem me ajudar no estudo de microcontroladores pic?!
  2. @Isadora Ferraz Okk , vou tentar de novo, conferir tudo. Obrigada , dps volto aqui , com certeza haha Ah eu uso Arduíno também , mas para esse projeto em especifico , preciso usar esse microcontrolador, mesmo assim obrigado de novo .
  3. @Isadora Ferraz é então kkk , agora é apenas os leds mudando , dps é o oled kkk, mas ta complicado de rodar isso aqui . fiz desse jeito , sem a interrupção la em cima, no meu microc so ta assim: obs: tentei colocar o CMCON , eu ja tentei outras vezes usa-lo ,mas não foi . ja vi usando esse na familia 16f , acho que na 18f não da, não colocando ele copila certo. ah e aquele TRISE eu so tinha colocado ele porque tinha visto em um video ,e como meu programa não tava funiconando , achei que ele ajudaria, mesmo não achando ele necessário. void main() { TRISA = 0x00; TRISB = 0x01; PORTB = 1; ANSEL1_bit =0; ANSEL10_bit=1; PORTA=0b10; for(;;) { while(RB0); //espera apertar while(!RB0); //e soltar o botão PORTA=0b01; // while(RB0); //espera apertar while(!RB0); //e soltar o botão PORTA=0b10; // } } Novamente o led RA1 comeca acesso é o botão não faz nada . eu ja fiz uma vez um programa( usando os mesmo pinos) sem a interrupção , os leds piscaram certinho , quando abertava um botão , um acendia , abertava de novo , um apaga e outro acende , e assim varias vezes .Ai li que usando as interrupções seria melhor , vi varias aulas e cheguei nisso. Com a interrupção coloquei assim , esse eu realmente não sei se esta correto , mas creio que seria assim . Copilou certo , mas nenhum led acende ainda. void interrupt(){ { PORTA=0b10; for(;;) while(RB0); //espera apertar while(!RB0); //e soltar o botão PORTA=0b01; // while(RB0); //espera apertar while(!RB0); //e soltar o botão PORTA=0b10; // } } void main() { GIE_bit = 1; // habilita a interrupção global PEIE_bit = 1; // habilita a interrupção dos perifericos INT0IE_bit = 1; // habitilia a interrupção extrena TNTEDG0_bit = 0; // alterar o hardware ( configurar a borda de decida ) void main() { TRISA = 0x00; TRISB = 0x01; PORTB = 1; ANSEL1_bit =0; ANSEL10_bit=1; while (1) { } }
  4. @Isadora Ferraz Então estava tentando fazer em interrupção porque meio que foi uma "lição de casa " para eu tentar fazer de minha faculdade , mas estou tendo muito dificuldade , sou nova nisso e to levando uma porrada kkk . E pelo o que você me mandou , acho que do seu jeito não ocupa muito espaço né?! Eu usarei esse mesmo comando junto com outros varios para esse mesmo microcontrolador ( mudarei as telas de um oled , ai esse "exercicio " seria a base para a mudanca de telas , ai para eu começar a aprender , essa era a lição) , ai , eu pensei que a interrupção seria a melhor opção. E desse jeito que você fez , ficaria assim , certo : void main() { TRISA = 0x00; // RA0 e RA1 serão saída digital TRISB = 0x01; TRISE= 0x00; // Todo PORTB será entrada digital PORTB = 0; // Iniciando em high PORTA=0b10; for(;;) { while(RB0); //espera apertar while(!RB0); //e soltar o botão PORTA^=0b11; //inverte apenas RA1 e RA0 } } Fiz assim , copilei , mas o led RA1 ja começa acesso , e quando aperto o botão não acontece nada . Realmente , não da para fazer esse tipo de programa usando a interrupção ?! Obrigada
  5. @aphawk Ah okk, olha eu fiz desse jeito ! Eu mudei também a programação porque acho que aquela realmente nao estava certa , dei uma estudada e cheguei nessa , mas novamente não deu certo no proteus. programação que estou usando agora: bit control; void interrupt() { if(INT0IF_bit) //Houve a interrupção externa? { //Sim.. control = ~control ; //Inverte o estado da variável de controle if(control == 1) RA1_bit = 0x01; //Se control igual a 1, acende o led vermelho if(control==2) RA0_bit = 0x01 ; INT0IF_bit = 0x00; } } void main() { GIE_bit = 0x01; //Habilita a interrupção global PEIE_bit = 0x00; //Desabilita a interrupção por periféricos INT0IE_bit = 0x01; //Habilita a interrupção externa INTEDG0_bit = 0x00; //Configura a interrupção por borda de descida TRISA = 0x00; // RA0 e RA1 serão saída digital TRISB = 0x01; TRISE= 0x00; // Todo PORTB será entrada digital PORTA = 0; // RA0 e RA1 iniciam em low PORTB = 0; // Iniciando em high control = 0x00; // Variável de controle inicia em zero while(1) { } }
  6. Oi gente , então , sou nova em programação e estou tendo dificuldades em criar um interrupção no microcrontrolador pic 18f . Eu quero que o programa , quando apertar o botão , um led acenda e quando aperta de novo, o mesmo botão o outro led acende , isso infinitamente . Fiz isso porém não esta acendendo os led nos Proteus . me ajudem pf bit control=0; void interrupt(){ { if (RB1_bit == 0 ) { control = control + 1; delay_ms(200); if (control == 4) control = 1; } if( control == 1) { LATB2_bit = 1; LATB3_bit = 0; LATB4_bit = 0; delay_ms(100); } if(control == 2) { LATB2_bit = 0; LATB3_bit = 1; LATB4_bit = 0; delay_ms(100); } if(control == 3) { LATB2_bit = 0; LATB3_bit = 0; LATB4_bit = 1; delay_ms(100); INT0IF_bit=0; } } void main(){ TRISA = 0x00; PORTA = 0x00; TRISB = 0xFF; PORTB = 0x00; GIE_bit = 0x01; //Habilita a interrupção global PEIE_bit = 0x00; //Desabilita a interrupção por periféricos INT0IE_bit = 0x01; //Habilita a interrupção externa INTEDG0_bit = 0x00; //Configura a interrupção por borda de descida INF0IF_bit = 0; RBIE_bit = 1; while(1){ }}

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!