Escolar Documentos
Profissional Documentos
Cultura Documentos
Tipos de Interrupções:
- 3 interrupções relacionadas a timers;
- uma externa (Porta RB0);
- uma por mudança de estado das portas RB4, RB5, RB6 e RB7;
- uma para o fim de escrita na EEPROM;
- uma de comparador;
- duas relacionadas a USART;
- uma do módulo CCP.
Timers:
O TMR0 (timer 0) e TMR2 (timer 2) são registradores de 8bits e TMR1
(timer 1) é um registrador de 16bits.
Tratamento de Interrupções
Ligando as Interrupções
Geral: Habilita o controlador a usar interrupções. Ao habilitar essa
chave, todas as interrupções que estiverem com a chave ligada serão
também habilitadas.
Grupo: Habilita um conjunto de interrupções específicas.
Individual: Habilita uma interrupção específica.
Tratamento de Interrupções
Bit 7: GIE – GLOBAL INTERRUPT ENABLE (chave geral das interrupções)
1 = Poderá ocorrer interrupções.
0 = Nenhuma interrupção poderá ocorrer (mesmo que alguma interrupção
individual esteja habilitada).
Bit 6: PEIE – Habilitação das interrupções periféricas
1 = Interrupções periféricas habilitadas.
0 = Interrupções periféricas desabilitadas.
Bit 5: TMR0IE – Habilitação da interrupção de transbordo do Timer0
1 = Interrupção de transbordo do Timer0 ligada.
0 = Interrupção de transbordo do Timer0 desligada.
Bit 4: INTE – Habilitação da interrupção externa (RB0/INT)
1 = Interrupção externa habilitada.
0 = Interrupção externa desabilitada.
Tratamento de Interrupções
Bit 3: RBIE – Habilitação de interrupção por mudança de estado na porta B
(pinos RB4 a RB7)
1 = Interrupções por mudança na porta B habilitada.
0 = Interrupções por mudança na porta B desabilitada.
Bit 2: T0IF – Flag sinalizador de estouro do timer 0
1 = Ocorreu transbordo do timer 0 (Contagem superou 255).
0 = A contagem não superou 255.
Bit 1: INTF – Flag sinalizador de interrupção externa (RB0/INT)
1 = Ocorreu pedido externo de interrupção
0 = Não ocorreu pedido externo de interrupção
Bit 0: RBIF – Flag sinalizador de alteração nos pinos RB4 a RB7
1 = Houve alteração.
0 = Não houve alteração. .
Tratamento de Interrupções
Exemplo de configurações individuais.
INTCON.GIE = 1; // poderá haver interrupção
INTCON.PEIE = 0; // desabilita interrupções periféricas
INTCON.T0IE = 1; // habilita interrupção de transbordo do Timer0
INTCON.INTE = 0; // Desabilita interrupção externa RB0
INTCON.RBIE = 0; // desabilita mudança de Estado nas portas (RB4 a RB7)
INTCON.T0IF = 0; // inicia-se, não há estouro do timer0
INTCON.INTF = 0; // inicia-se, não ocorrei pedido de interrupção externa
RB0
INTCON.RBIF = 0; // inicia-se, não há alteração dos pinos (RB4 a RB7)
Tratamento de Interrupções
Registradores associados com TMR0;
525 us = 0,525 ms
Tratamento de Interrupções
Leitura de saída do osciloscópio
1:2 = 0,512ms (aproximadamente medido)
525 us = 0,525 ms
Tratamento de Interrupções
Contagem de pulsos através do RA4/T0CKI
Modifica-se:
OPTION
T0CS para 1 (RA4/TOCKI)
PSA para 1 (WDT- possibilita mudanças de pulso em pulso da
chave)
INTCON
RBIE para 1 (RA4,RA5,RA6 e RA7)
RBIF para 0 inicializa sem modificação de estado
Tratamento de Interrupções
void interrupt(){ // iniciar procedimento de interrupção;
RB0_bit=~RB0_bit; // alterar a condição do PORTB na posição RB0 (inverso)
while(RB4_bit==1){} // permite que o botão gere apenas uma interrupção por acionamento
INTCON.T0IF=0; // apagar o bit que determina que houve uma interrupção TRM0
INTCON.RBIF=0; // apagar o bit que determina que houve uma interrupção RB4
TMR0=255; // zerar o TMR0
}
void main(){ // iniciar o programa principal
TRISB=0b00010000; // inicializar os RB’s como saídas (output) e RB4 como entrada
PORTB=0; // inicializar os RB’s com bit 0, desligado.
// Inicialização do registrador OPTION que controla as condições para utilização do TRM0
OPTION_REG.T0CS=1; // incrementa pelo RA4
OPTION_REG.T0SE=1; // incrementa pela borda de descida
OPTION_REG.PSA=1; // aplica Prescale ao WDT isso determina que soma-se +1 direto
OPTION_REG.PS2=0; // 0 0 0 – Prescale 1:2
OPTION_REG.PS1=0;
OPTION_REG.PS0=0;
// Inicialização do registrador INTCON que controla as interrupções
INTCON.GIE=1; // libera a utilização de interrupções
INTCON.T0IE=1; // libera a utilização da interrupção TRM0
INTCON.RBIE=1; // libera a utilização da interrupção RB4
INTCON.T0IF=0; // inicializa a variável de estouro em zero
INTCON.RBIF=0; // inicializa a variável RB4 sem interrupção
TMR0=255; // inicializa a variável do registrador TRM0 em Zero
while(1){} // loop Infinito
}
Tratamento de Interrupções
Memória EEPROM
Escrita na EEPROM
Os seguintes registradores são necessários no processo:
• EECON1
• EECON2 (Não é fisicamente implementado)
• EEDATA
• EEADR
Memória EEPROM
Registradores
Memória EEPROM
Registradores
Memória EEPROM
int arq;
void leitura(){ // iniciar procedimento de interrupção;
EEADR=0x00;
EECON1.RD=1;
while(EECON1.RD==1){}
arq=EEDATA;
}