Escolar Documentos
Profissional Documentos
Cultura Documentos
Microprocessadores
2018/1
Projeto 1: Tacômetro – Contador de giros de um motor DC
PIC16F877A
RD3 DC
RD4
RD5 RB4
RD6 Ponte H
RD7
RB5
LEDs
Projeto 1: Tacômetro – Contador de giros de um motor DC
Programa principal
Início • Para o Timer 0 funcionar como contador,
pulsos de clock deverão ser fornecidos
Configuração de FSR e GPR: por meio do pino RA4/T0CKI.
• Porta B à para acionar motor DC
• Porta D à para acionar LEDs • O motor DC é acionado habilitando
• Config. TMR0 como contador com apenas um dos ramos da ponte H, que
prescaler =1 se encontra ligado aos pinos RB4 e RB5,
• TMR0 = 0
portanto, se RB4 = 1 ⇒ RB5 = 0 ou vice-
versa.
Exibe TMR0 em LEDs: • A Porta D recebe o valor de TMR0,
• Aciona motor durante 2ms
• Desliga motor durante 10ms
porém complementado, porque os LEDs
se acionam com lógica negativa.
• PORTD ß TMR0
Projeto 2: Interrupção externa via RB0/INT
330 +5V
RB3 Se as teclas [1], [4] ou [7] fossem
RD0
RB2 pressionadas, ocorrerão eventos
PIC16F877A
RD1 de interrupção.
RB1
RD2
RB0
RD3 Linha 1 10k
RC3 on 0 = +
RD4
RD5 RC2 1 2 3 - Teclado
Básico
RD6 RC1 4 5 6 ×
RD7 RC0 7 8 9 ÷
OPTION_REG<INTDEG> = 0
Interrupção externa
INTCON<INTE> = 1
Projeto 2: Interrupção externa via RB0/INT
Programa principal Rotina de Interrupção
• Cada vez que alguma
Início ISR (org 0x04)
das teclas [1], [4] ou [7]
Salva: Wreg e STATUS é pressionada, ocorrerá
Configuração de FSR e GPR:
• Porta C à para acionar teclado um evento de interrup-
• Porta A, D à para acionar Displays Atraso de 20ms ção, então, o código de
• Config. INT. externa via RB0/INT 7seg apontado por FSR
Sim
RB0 = 0? é usado para atualizar o
• Copiar num buffer RAM, na faixa de Não valor do Display.
endereços 0x40 – 0x4F, os códigos de Sim código
FSR++; aponta outro
• RB0 = 0, indica que uma
7seg dos 16 dígitos hexadecimais
• FSR = 0x40 Não tecla está pressionada.
FSR = 0x50?
• Habilita as linhas 2,3 e 4 do teclado
Sim
FSR = 0x40; inicio do buffer recupera: Wreg e STATUS
• Display ß MDADOS[FSR]
• Sleep à µC INTF ß 0; limpa flag Fim_ISR
Interrupção por mudança de nível nos pinos RB4 – RB7
INTCON<RBIE> = 1
Interrupção por mudança de nível nos pinos RB4 – RB7
Rotina de Interrupção
ISR (org 0x04) • Cada vez que existir uma
Programa principal
mudança de nível nos
Início Salva: Wreg e STATUS
pinos RB4, RB5, RB6 ou
RB7, ocorrerá um evento
Configuração de FSR e GPR: Atraso de 20ms
de interrupção, então, o
• Porta A à para acionar buzzer
Não buzzer será acionado
• Config. INT. por RB4 – RB7 PORTB mudou?
durante 1s.
Sim • O fato de testar a PORTB
Aciona buzzer durante 1s é para ver se apresenta
• Sleep à µC
um estado diferente ao
RBIF ß 0; limpa flag
estado que disparou a
interrupção.
recupera: Wreg e STATUS
Fim_ISR
Configuração de OPTION_REG
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
OPTION_REG RBPU’ INTDEG T0CS T0SE PSA PS2 PS1 PS0
bit 7 bit 0
• Bit 6: INTDEG define borda de sensibilidade para interrupção externa via RB0/INT (0 para ↓ e 1 para ↑);
• Bit 5: T0CS 0: Timer 0 funcionara como temporizador, recebendo pulsos do clock do sistema (clock/4);
• Bit 4: T0SE define borda de sensibilidade para Timer0 como contador (0 para ↑ e 1 para ↓);
• Bit 3: PSA 0: módulo prescalador atribuído para Timer0; 1: prescalador atribuído para WDT;
• Bits 2:0 PS2:PS0 define o valor do prescalador: 000, 001, ..... 111 à 2, 4, 8, 16, 32, 64, 128, 256;
Configuração de interrupções
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
bit 7 bit 0
• Bit 7: GIE 1: habilitação global de interrupções; 0: desabilita disparo de interrupções;
• Bit 6: PEIE 1: habilita interrupções “periféricas”; 0: desabilita interrupções “periféricas”;
• Bit 5: T0IE 1: habilita interrupção por transbordo de Timer 0;
0: desabilita interrupção por transbordo de Timer 0;
• Bit 4: INTE 1: habilita interrupção nomeada externa, via borda de subida ou descida no pino RB0/INT;
0: desabilita interrupção externa;
• Bit 3: RBIE 1: habilita interrupção por mudança de nível (↑ e ↓) nos pinos RB4, RB5, RB6 ou RB7;
0: desabilita interrupção mudança de nível ;
• Bit 2: T0IF 1: flag que indica que foi detectado um transbordo de Timer 0;
• Bit 1: INTF 1: flag que indica que foi detectado a borda definida pelo bit INTDEG (↑ ou ↓);
• Bit 0: RBIF 1: flag que indica que foi detectado uma mudança de nível (↑ ou ↓) em qualquer pino RB4,
RB5, RB6 ou RB7;
Esquema simplificado de habilitação de interrupções
TMR0IF
Int. Timer 0 Acorda ao CPU
TMR0IE
(tira do SLEEP)
INTF
Int. Externa
INTE
Interrupção
do CPU
RBIF
Int. Porta B
RBIE
Interrupções
externas