Você está na página 1de 5

F AC U L DA DE D E EN G EN H A RI A

Laboratório de Microcontroladores e Sistemas Digitais


EXP. 5: ENTENDENDO E UTILIZANDO Interrupção, Polling e Timer
NOME RGA

A prática didático-pedagógica adotada nesta disciplina é o Aprendizado Baseado na Construção de


Projetos – ABCProj. Para que tenha sucesso, espera-se que o discente não se fixe em estudar somente
o que está sendo solicitado em cada experimento, mas pesquisar informações complementares, posto
que este é apenas um roteiro de busca do conhecimento para aprendizagem. Você é graduando(a), de
Engenharia de Computação ou Engenharia de Controle e Automação, e precisa se conscientizar que,
nesta área de Microcontroladores, o volume de conhecimentos e a Dinâmica de Inovação
Tecnológica exigirá formação continuada para o sucesso em projetos de Sistema Embarcados.

Introdução
Para criar projetos de Sistemas Embarcados com Microcontroladores é necessário ter
conhecimento do Hardware do MCU e de programação, quer seja em linguagem C ou Assembly do
MCU. Portanto, é preciso ter em mente que é essencial a leitura e compreensão do datasheet do MCU
em todos os seus detalhes. Neste experimento vamos adotar a prática pedagógica de repassar o
esquemático, o código e a configuração do ambiente para realização do experimento.

1 Preparação para o experimento:


1.1 Vamos usar um microcontrolador comercial PIC16F628A acessando seu datasheet (veja um
extrato no final deste experimento). Digite control F no datasheet e leia sobre “interrupt”.
Veja quantas são as fontes de interrupção no PIC em estudo, em qual posição de Memória se
situa o Vetor de Interrupção, o que é o INTCON Register e seus bits e como ocorre a
interrupção causada pelo Timer 0, e outras informações relacionadas a interrupções.
1.2 Pesquise as definições de:
Interrupção: O PIC 16f628A possui 10 fontes de interrupção, o vetor de interrupção está localizado
na posição 0004h da memória flash. O INTCON Register é um registrador que possui vários bits de
habilitação e sinalização (Flags), o INTCON possui 8 bits sedo eles:
bit 7 GIE: Global Interrupt Enable (bit de Habilitação de Interrupção Global)
bit 1 = Habilita todas as Interrupções sem máscara.
0 = Desabilita todas as Interrupções.
bit 6 PEIE: Peripheral Interrupt Enable (bit de Habilitação de Interrupção Periférica)
bit 1 = Habilita todas as Interrupções Periféricas sem máscara.
0 =Desabilita todas as Interrupções Periféricas.
bit 5 T0IE: TMR0 Overflow Interrupt Enable (bit de Habilitação de Interrupção por Estouro do
Timer 0)
Laboratório de Microcontroladores e Sistemas Digitais

bit 1 = Habilita a interrupção do TMR0.


0 = Desabilita a interrupção do TMR0.
bit 4 INTE: RB0/INT External Interrupt Enable (bit de Habilitação de Interrupção Externa)

bit 1 = Habilita a interrupção Externa RB0/INT


0 = Desabilita a Interrupção Externa RB0/INT
bit 3 RBIE: RB Port Change Interrupt Enable (bit de Habilitação de Interrupção de Mudança de
Porta)
bit 1 = Habilita a Interrupção de Mudança de Porta RB
0 = Desabilita a Interrupção de Mudança de Porta RB
bit 2 T0IF: TMR0 Overflow Interrupt Flag (bit de Sinalização de Interrupção por Estouro do TMR0)
bit 1 = o registrador TMR0 estourou (precisa ser limpo via software)
0 =o registrador TMR0 não estourou
bit 1 INTF: RB0/INT External Interrupt Flag (bit de Sinalização de Interrupção Externa)
bit 1 = The RB0/INT ocorreu uma interrupção externa (precisa ser limpo por software)
0 = The RB0/INT não ocorreu interrupção externa
bit 0 RBIF: RB Port Change Interrupt Flag (Sinalizador de Mudança de Porta)
bit 1 = Quando um dos pinos RB7/ RB4 muda de estado (precisa ser limpo por software)
0 = Nenhum dos pinos RB7/ RB4 mudaram de estado
Um estouro (FFh → 00h) no registrador TMR0 definirá o
Bit T0IF (INTCON <2>). A interrupção pode ser ativada /
desativado definindo / limpando o bit T0IE (INTCON <5>). Para
operação do módulo Timer0, consulte a Seção 6.0
“Módulo Timer0
Polling:
Timer: _________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________

2 Implemente o circuito abaixo no simulador, mas não execute, pois sem código-fonte o
experimento não será executado.

2
Laboratório de Microcontroladores e Sistemas Digitais

R1 U1
10k 16 17
RA7/OSC1/CLKIN RA0/AN0
15 18
RA6/OSC2/CLKOUT RA1/AN1 A
1
RA2/AN2/VREF
4 2
RA5/MCLR RA3/AN3/CMP1 B
3
RA4/T0CKI/CMP2
C
6
RB0/INT
7
RB1/RX/DT D
8
RB2/TX/CK
9
RB3/CCP1
10
RB4
11
RB5
12
RB6/T1OSO/T1CKI
13
RB7/T1OSI
PIC16F628A

R2 R3
220 220

D1 D2
LED-GREEN LED-RED

Figura 1- Esquemático para simulação de Interrupção, Polling e Timer

3 Vamos utilizar a biblioteca para microcontroladores PIC. Baixe o microC Pro no


endereço: https://www.mikroe.com/mikroc-pic. Esta versão é livre para implementação de
até 250 linhas de código-fonte.

4 No mikroC escreva o código-fonte a seguir e compile (Build) gerando o arquivo .hex.


/* Código-fonte para teste de Interrupção, Polling e Timer 0
Fonte:
*/

int counter = 0x00; //Variável de contagem auxiliar

void interrupt() //Vetor de interrupção , endereço 04h de memória


{
if (T0IF_bit) //Houve o estouro do TIMER0?
{
counter++; //Incrementa o counter
TMR0 = 0x06; //Reinicia o registrador TMR0

if (counter == 500) // atingiu o tempo de meio segundo?


// calculado como: 1us (ciclo de máquina) * 4 (prescaler escolhido)
// * 250 () * 500 () = 500 ms
{

RB4_bit = ~RB4_bit;
counter = 0x00;
}
T0IF_bit = 0x00; //Limpa a flag T0IF para a próxima interrupção
}
} //end interrupt

void main()
{
OPTION_REG = 0x81; //Desabilita os resistores de pull-up internos
//Configura o prescaler para 1:4 associado ao TMR0
GIE_bit = 0x01; //Habilita a interrupção global

3
Laboratório de Microcontroladores e Sistemas Digitais

PEIE_bit = 0x01; //Habilita a interrupção por periféricos


T0IE_bit = 0x01; //Habilita a interrupção por estouro do TMR0

TMR0 = 0x06; //Inicia a contagem em zero

TRISB.RB4 = 0x00; //Configura o RB4 como saída digital


TRISB.RB5 = 0x00; //Configura o RB5 como saída digital
RB4_bit = 0x00; //Inicia RB4 em LOW
RB5_bit = 0x00; //Inicia RB5 em LOW

while(1)
{
RB5_bit = 0x01; // Seta ao pino RB5
delay_ms(250);
RB5_bit = 0x00; //Coloca o pino RB5 em LOW
delay_ms(500);

} //end while

} //end main

5 No simulador clique com o botão da direita sobre o PIC e em Propriedades carregue o


arquivo .hex gerado no microC. Simule o experimento e explique a diferença entre o
funcionamento do LED1 e LED2.
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________

6 Estude o código-fonte no loop infinito while(1)e veja no datasheet do PIC16F628A


o que é o pino RB5 e depois descreva o que o código-fonte executa.
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________

7 Estude o código-fonte da interrupção. Descreva como a interrupção ocorre e como é


detectada (por exemplo, o que é ISR ou Interrupt Handle?).
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________

8 Estude o código-fonte do Timer. Descreva como é programado e como ocorre a


interrupção por estouro de contagem.
_______________________________________________________________________________
_______________________________________________________________________________
Anexo: Exemplo de leitura de datasheet para entendimento de interrupções:

Ler as informações do datasheet buscando compreender a Arquitetura do MCU em:

4
Laboratório de Microcontroladores e Sistemas Digitais

3.0 ARCHITECTURAL OVERVIEW e no item: 14.5 Interrupts associando com a


estrutura de Registradores que permitem controlar as funções de Timer e Interrupção como
desejamos.

4 Interrupts in PIC 16F877A


4.1 INTCON Register
4.1.1 GIE – Global Interrupt Enable
4.1.2 PEIE – Peripheral Interrupt Enable
4.1.3 TMR0IE – Timer 0 Overflow Interrupt Enable
4.1.4 INTE – RB0/INT External Interrupt Enable
4.1.5 RBIE – RB Port Change Interrupt Enable
4.1.6 TMR0IF – Timer 0 Overflow Interrupt Flag
4.1.7 INTF – RB0/INT External Interrupt Flag
4.1.8 RBIF – RB Port Change Interrupt Flag

Você também pode gostar