• Nenhum resultado encontrado

CONTADOR VAR BYTE

TRISC = %00000000 ;PORTC saida PORTC = %00000000 ;limpa PORTC Lcdout $fe, 1

FOR CONTADOR = 0 to 20 step 1

LCDOUT $FE,$C0

LCDOUT "ROTACAO = ", #CONTADOR PORTC = %00001000 ;passo 1 pause 1 PORTC = %00001100 ;passo 2 PAUSE 1 PORTC = %00000100 ;passo 3 PAUSE 1 PORTC = %00000110 ;passo 4 PAUSE 1 PORTC = %00000010 ;passo 5 PAUSE 1 PORTC = %00000011 ;passo 6 PAUSE 1 PORTC = %00000001 ;passo 7 PAUSE 1 PORTC = %00001001 ;passo 8 PAUSE 1 NEXT CONTADOR END

16) Modifique o exemplo 15, para que o motor gire 50 vezes

17) Modifique o exemplo 15, para que o motor gire 1000 vezes para a direita e 1000 vezes para a esquerda. Mostrar no LCD “Rot. Para Dir =”. “Rot . para Esq=”

54 15. Utilizando Interrupções

A interrupção é uma técnica particular do PIC que permite interceptar eventos externos ao programa em execução, interrompe momentaneamente a operação do programa em andamento, controla o evento com uma subrotina apropriada e retorna para a execução do programa.

O PIC16F84 contém 4 tipos de interrupção:

1. A troca de estado em RB0 (External interrupt RB0/INT pin). 2. Ao final da contagem do registro TMR0 (TMR0 overflow interrupt).

3. A troca de estado sobre uma das linhas de RB4 a RB7 (PORTB change interrupts). 4. Ao final da escrita sobre um endereço da EEPROM (EEPROM write complete interrupt). Habilitando interrupções

A interrupção de qualquer um destes eventos pode ser conseguido habilitando ou desabilitando bits do registro INTCON:

1. INTE (bit 4) se este bit estiver em 1 habilitará a interrupção de troca de estado sobre a linha RB0 2. T0IE (bit 5) se este bit estiver em 1 habilitará a interrupção de final de contagem do registro TMR0 3. RBIE (bit 3) se este bit estiver em 1 habilitará a interrupção de troca de estado sobre uma das linhas

de RB4 a RB7

4. EEIE (bit 6) se este bit estiver em 1 habilitará a interrupção de final de escrita sobre um endereço da EEPROM

5. GIE (bit 7) este bit tem que estar em 1 para habilitar qualquer interrupção (Global INterrupt Enable bit) Dado que qualquer interrupção gera uma chamada do endereço 04H, no registro INTCON estará qual

interrupção foi gerada. No registro INTCON se tem:

1. INTF (bit 1) Se vale 1 a interrupção é um estado gerado na troca de estado em RB0.

2. T0IF (bit 2) Se vale 1 a interrupção é um estado gerado no termino da contagem do timer TMR0. 3. RBIF (bit 0) Se vale 1 a interrupção é um estado gerado na troca de estado de uma dos pinos RB4 a

RB7.

Obs.: Como não tem um bit especificando interrupção de fim de esrita na EEPROM, a rotina para tratar essa interrupção deve verificar se os outros bits de sinalização de interrupção estão em 0.

A rotina de interrupção deve zerar o bit sinalizador após tratar a interrupção.

Quando for gerada uma interrupção o PIC desabilita automatimamente o bit GIE (global Interrupt Enable) do registro INTECON de modo a desbilitar todas as interrupções restantes. Para poder retornar ao programa principal e reinicializar em 1 este bit deve-se utilisar a instrução em assembler RETFIE.

Mais informações:

Utilizando interrupções com o PICBASIC

Para se utilizar interrupções com o PICBASIC deve-se utilizar a seguinte estrutura:

ON INTERRUPT GOTO minha_interrupcao ‘rotina de atendimento de interrupção é ‘minha_interrupção

INTCON = %10010000 ‘habilita interrupção no pino RB0 ...

DISABLE ‘desabilita interrupção

minha_interrupcao: LED = 1

RESUME ‘retorna para o programa principal

ENABLE ‘habilita interrupções

Interrupção utilizando o pino RBO/INT

1) Simule o programa e explique seu funcionamento:

CHAVE0 VAR PORTB.0 LED7 VAR PORTB.7

TRISB = %00000001 'configura RB0 como entrada

ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupçao

INTCON = %10010000 'habilita interrupçao INTE OPTION_REG.6 = 1 'na subida do sinal

LOOP:

LED7 = 1 'faz pino RB7 = 1

GOTO LOOP ' para sempre

'subrotina de atendimento de interrupçao

DISABLE 'desabilita interrupcoes INTERRUPCAO:

'caso ocorra uma interrupcao LED7 = 0 'faz RB7 =0

PAUSE 10 ' espera 10ms

INTCON.1 = 0 'limpa flag de interrupcao RESUME

ENABLE 'retorna para o programa principal

END

Interrupção utilizando a mudança dos pinos RB4-RB7 2) Simule o programa e explique seu funcionamento:

CHAVE7 VAR PORTB.7 LED1 VAR PORTB.1

56

TRISB = %11110001 'configura RB7-RB4 como entradas

ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupçao

INTCON = %10001000 'habilita interrupçao RB4-RB7

LOOP:

LED1 = 1 'faz pino RB1 = 1 GOTO LOOP ' para sempre 'subrotina de atendimento de interrupçao

DISABLE 'desabilita interrupcoes

INTERRUPCAO:

'caso ocorra uma interrupcao LED1 = 0 'faz RB1 =0

PAUSE 10 ' espera 10ms

INTCON.0 = 0 'limpa flag de interrupcao RESUME

ENABLE 'retorna para o programa principal END

Interrupção como o overflow do TIMER 0 (pino RA4/T0CK)

3) Simule o programa abaixo e explique seu funcionamento:

CHAVE0 VAR PORTB.0 LED1 VAR PORTB.1

TRISB = %00000000 'configura PORTB como saida

ON INTERRUPT GOTO INTERRUPCAO 'define rotina de interrupçao TMR0 = 250

OPTION_REG.5 = 1 'na subida do sinal

INTCON = %10100000 'habilita interrupçao TOIE

LOOP:

LED1 = 1 'faz pino RB1 = 1

GOTO LOOP ' para sempre

'subrotina de atendimento de interrupçao

DISABLE 'desabilita interrupcoes

INTERRUPCAO:

'caso ocorra uma interrupcao LED1 = 0 'faz RB1 =0

PAUSE 2 ' espera 10ms

INTCON.2 = 0 'limpa flag de interrupcao TMR0 = 250

RESUME

ENABLE 'retorna para o programa principal END

4) Modifique o programa 1 para que a interrupção ocorra na descida do sinal no pino RB0/INT, anote o programa e simule.

5) Modifique o programa 1 para que quando ocorra a interrupção, faça os pinos RA1=1 e RA2=1 durante 1ms

6) Modifique o programa 2 para que quando ocorra a interrupção, faça o pino RA3=1 durante 2ms. 7) Modifique o programa 3 para que ocorra a interrupção quando forem aplicados 10 pulsos no pino

RA4/T0CKI

8) Modifique o programa 1 para que a cada interrupção, ocorra uma contagem das interrupções em um display de 7 segmentos

9) Modifique o programa 2 para que a cada interrupção, ocorra uma contagem das interrupções em um display LCD

10) Modifique o program 3 para que ocorra uma interrupção quando forem aplicados 8 pulsos no pino RA4/T0CKI, e a cada interrupção, mostrar a mensagem em um display de LCD, "contagem terminada"

58 16. Conectando um teclado no PIC

1) Simule o programa abaixo:

; layout do teclado conectado na PORTB ;B4----[ 1 ]---[ 2 ]---[ 3 ] ; | | | ;B5----[ 4 ]---[ 5 ]---[ 6 ] ; | | | ;B6----[ 7 ]---[ 8 ]---[ 9 ] ; | | | ;B7----[ * ]---[ 0 ]---[ # ] ; | | | ; | | | ; B3 B2 B1

TECLA VAR BYTE

Documentos relacionados