Ir ao conteúdo
  • Cadastre-se
Otavio Pessini Bini

C interrupção por mudança de estado - pic16f877a

Recommended Posts

Boa tarde a todos,

 

Estou meio que desesperado com meu projeto, e já quebrei a cabeça inúmeras vezes para chegar num código final, porém sem exito.

 

Estou desenvolvendo uma solenoide, que precisa ser atuada através de uma mudança de estado de uma porta RB do PIC16F877A.

 

Ou seja, se a porta em qeustão (RB5) passar de alimentada para não alimentada, a porta RC4 de saída precisa ser acionada, por 2 segundos, e ser desligada em seguinte.

 

Parece ser algo simples diante do mundo de programação, mas mesmo asssim estou quebrando a cabeça de uma forma pela falta de entendimento na área.

 

Se for de ajuda, segue o código feito no mikroC:

 

void main()
{
       CMCON        =   0x07;   // Desabilita Comparadores;
       RBIE_bit     =   0x01;   // Habilita a interrupção por mudança do PORTB <7:4>
       RBIF_bit     =   0x00;   // Força a flag de sinalização a zero
       GIE_bit      =   0x01;   // Habilita a interrupção global
       
       TRISB        =   0xFF;   // PORTB configurado como entrada digital
       TRISC        =   0xEF;   // Apenas usaremos RC4 como saída digital
       
       RC4_bit      =   0x00;   // Inicia a saída em nível baixo

}

void interrupt ()
{
   if(RBIE_bit){                                 // Caso haja mudança de 1 para 0, ou de 0 para 1 (especificamente na porta RB5 de entrada)

       RC4_bit      =   0x01;               // Saida a ser acionada
       delay_ms(2000);
       RC4_bit      =   0x00;               // Saida a ser desligada

}
}

 

 

Preciso que esse ciclo de acionamento, se repita infinitamente...

 

 

Conto com a ajuda urgentemente de vocês, e agradeço desde ja.

 

 

Att, Otavio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Otavio Pessini Bini Olá!

Coloque a declaração dentro de uma instrução FOR com todos os seus expressões vazias.

for(;/* Loop infinito*/;){
	
	/* Declaração repetida infinitamente nesse Local. */

}

mais alguma coisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Literalmente, o caso mais indicado para uso seria uma repetição WHILE.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, dsgeverton disse:

Literalmente, o caso mais indicado para uso seria uma repetição WHILE.

Discordo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, não faço parte desta 'galera' mas aproveitando que não bebi o suficiente ainda....

É bem fácil mesmo e você está no caminho certo mas... o que deu errado?

Dica

apague o flag no começo da interrupt pois não lembro se o hw faz
 

void interrupt ()
{
   if(RBIE_bit){   

RBIF_bit     =   0x00;

...

Publique o esquema...

Ah sim... pros amigos que tentaram ajudar, agradecemos mas parece que eles têm pouco contato com mc's. Publique no forum 'microcontroladores'

e

for(;;) 

é a lesma lerda que

while(1)

abç

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvi passar pra ver se deste algum retorno e... decepção. Pelo jeito teu desespero não é tão grande. Mas pra não ficar em branco, descobri uma falhinha nossa...

Em 05/10/2018 às 18:08, Isadora Ferraz disse:

if(RBIE_bit){ RBIF_bit = 0x00;

de fato o bit que deve ser avaliado é o RBIF mesmo.

if(RBIF_bit){ RBIF_bit = 0x00;...

boa sorte

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Isadora Ferraz  Boa tarde Isadora,

 

ahahaha agradeço muito pelo seu retorno, e sim, meu desespero é grande, do tamanho do universo.

 

Confesso que não me atentei ao seu retorno aqui, por justamente estava tendo problemas para logar no forum (acredite se quiser)..

 

Vou testar tais dicas, e comento aqui o andamento...

 

No mais, só agradeço pela sua disponibilidade!

 

Valeu.

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

×