0% acharam este documento útil (0 voto)
3 visualizações3 páginas

Interrupções e Teclados no PIC18F4550

Interrupções são sub-rotinas executadas quando eventos ocorrem, causando o microcontrolador interromper o programa principal e executar a rotina de interrupção, depois retornando ao programa principal; exemplos incluem teclados, botões e comunicação. Principais interrupções no PIC18F4550 incluem detecção de borda nos pinos B0-B3 e mudança de nível nos pinos B4-B7.

Enviado por

Mauro Costa
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOC, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações3 páginas

Interrupções e Teclados no PIC18F4550

Interrupções são sub-rotinas executadas quando eventos ocorrem, causando o microcontrolador interromper o programa principal e executar a rotina de interrupção, depois retornando ao programa principal; exemplos incluem teclados, botões e comunicação. Principais interrupções no PIC18F4550 incluem detecção de borda nos pinos B0-B3 e mudança de nível nos pinos B4-B7.

Enviado por

Mauro Costa
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOC, PDF, TXT ou leia on-line no Scribd

Interrupções

Interrupções são sub-rotinas que devem ser realizadas quando determinados eventos
ocorrem.
Na ocorrência de um evento que gere uma interrupção, o microcontrolador “interrompe”
o programa, executa a rotina de interrupção, e depois volta a executar o programa
principal a partir do ponto em que havia sido interrompido.
O programador não sabe quando a interrupção ocorrerá, mas sabe o que tem que ser
feito quando ela ocorrer.
Aplicação: chaves, botões, teclado, comunicação, sensores de fim de curso,, etc.
A interrupção pode ser externa (proveniente de elementos externos ligados a um pino do
microcontrolador) ou interna (proveniente de componentes internos do
microcontrolador).
As interrupções mais comuns e usadas nos PIC’s são: detecção de borda, mudança de
estado, recebimento de dado na serial, timers.

Principais interrupções do PIC18F4550

 Pino B0: interrupção por detecção de borda (pode ser configurada pra subida ou
descida).
 Pino B1: : interrupção por detecção de borda (pode ser configurada pra subida
ou descida).
 PinoB2: : interrupção por detecção de borda (pode ser configurada pra subida ou
descida).
 Pinos B4,B5,B6,B7: interrupção por mudança de nível em qualquer um desses
pinos
 RX: interrupção por recebimento de dado na porta serial
 Timers

OBS.:
Para se trabalhar com interrupções deve-se escolher quais serão utilizadas no project
wizard do CCS e no código fonte escrever as respectivas sub-rotinas para cada
interrupção.
A qualquer momento(em tempo de execução) as interrupções podem ser habilitadas ou
desabilitadas.

Teclados

São dispositivos de entrada que normalmente são ligados a pinos de interrupção.


Tipos comuns:
 Direto
 Codificado
 Analógico
 Matricial

Desses, o mais comum é o teclado matricial:


Observe que cada tecla fecha duas linhas.
Um teclado matricial n x m gasta n+m pinos do controle, sendo n entradas e m saídas ou
vice-versa.
Dicas importantes: precisa de resistores de Pull-up, tratar repique por software.

Exemplo de aplicação com o PIC:

//Rotina de interrupção

#int_RB
RB_isr()
{
delay_ms(100);
output_high(teclado_y2);
output_high(teclado_y3);
output_low(teclado_y1);

if(!(input(teclado_x1))){
tecla=1;
goto_address(label_address(fim));
}
if(!(input(teclado_x2))){
tecla=2;
goto_address(label_address(fim));
}
if(!(input(teclado_x3))){
tecla=3;
goto_address(label_address(fim));
}
output_high(teclado_y1);
output_low(teclado_y2);

if(!(input(teclado_x1))){
tecla=4;
goto_address(label_address(fim));
}
if(!(input(teclado_x2))){
tecla=5;
goto_address(label_address(fim));
}
if(!(input(teclado_x3))){
tecla=6;
goto_address(label_address(fim));
}

output_high(teclado_y2);
output_low(teclado_y3);

if(!(input(teclado_x1))){
tecla=7;
goto_address(label_address(fim));
}
if(!(input(teclado_x2))){
tecla=8;
goto_address(label_address(fim));
}
if(!(input(teclado_x3))){
tecla=9;
goto_address(label_address(fim));
}
fim:
output_low(teclado_y1);
output_low(teclado_y2);
output_low(teclado_y3);
output_low(teclado_y4);
clear_interrupt(INT_RB);
}

OBS: para se usar essa rotina é necessário definir x1, x2, x3, y1, y2, y3. Também é
necessário uma variável globala chamada tecla.

Você também pode gostar