Interrupção Pic 16F628A

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Interrupção Pic 16F628A

Mensagempor renatosouza82 » 21 Abr 2014 10:40

Ola a todos, preciso aprender como fazer interrupçao nesse pic, mas ja tentei sozinho e nao consegui, procurei internet afora e nao encontrei nada esclarecedor, acabei de entrar no forum, gostaria da ajuda de vcs, desde ja obrigado.

Vou colocar o q eu fiz pra tentar mostrar o q eu preciso:

cpp code
#include <16F628A.h>

#FUSES NOWDT //Sem Timer Cão de Guarda
#FUSES INTRC_IO //Oscilador Interno e dois pinos de I/O liberados
#FUSES NOPUT //Sem timer de alimentação
#FUSES NOPROTECT //Epprom desprotegida (permite a leitura)
#FUSES NOBROWNOUT //Brownout desabilitado
#FUSES NOMCLR //Pino Master Clear habilitado como porta I/O
#FUSES NOLVP //Programação em baixa tensão desabilitada
#FUSES NOCPD //Código desprotegido (permite a leitura)

//A frequencia do Clock Interno é de 1Mhz
//A sentença abaixo informa ao compilador essa frequencia para que este
//calcule corretamente os delays em mili-segundos
#use delay(clock=4000000)

#define PINO_LED PIN_A3 //Define em qual pino o LED está ligado

void main() {
int temp = 0, temp1 = 0, init = 1, blk = 0;
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

output_high(PIN_A3);

while (TRUE) {

if (init == 1) {
if(input(PIN_B0)){
init=0;
output_high(PIN_A3);
delay_ms(1);
}
if (temp1 == 480) {

output_low(PIN_A3);
init = 0;
temp1 = 0;
}
delay_ms(125);
temp1++;
delay_ms(1);
}
delay_ms(1);

if (input(PIN_B0)) {
output_high(PIN_A3);
delay_ms(1); // Liga o Led
}

if (blk == 1) {
goto rotblk;
}
if (input(PIN_B1)) {
blk = 1;
rotblk:
if (temp <= 480) {
if (temp == 480) {
output_low(PIN_A3);
blk = 0;
temp = 0;
}
delay_ms(125);
temp++;
delay_ms(1);
}
}
delay_ms(1);
}

}


Só q o delay ficou muito como gambiarra, é onde eu precisava da interrupçao...
renatosouza82
 
Mensagens: 1
Registrado em: 21 Abr 2014 10:31

Re: Interrupção Pic 16F628A

Mensagempor fagovi » 21 Abr 2014 23:37

Olá Renato...

Olha... a algum (muito) tempo atrás fiz um programinha para um projeto da faculdade.... ele utiliza a interrupção externa de 16f818, acredido que seja parecido...
Você não está autorizado a ver ou baixar esse anexo.
Fagovi

"O Homem que deseja fazer algo arranja um meio, quem não quer fazer nada arranja uma desculpa" Provérbio Árabe.
fagovi
Bit
 
Mensagens: 10
Registrado em: 08 Abr 2014 11:56

Re: Interrupção Pic 16F628A

Mensagempor ze2 » 22 Abr 2014 09:51

que tal se voce desse uma olhadela no datasheet do pic? lá voce vai ver diretinho como funciona este lance de interrupção por timer. Vou lhe dar uma prévia: tem um contador que entra 1/4 da freq do clock com um prescaler divisor que diminui ainda mais se vc quiser. este contador 8 bits (p.ex. timer0) que conta sempre pra frente, gera um sinal de interrupção a cada passagem de 255 pra 000. voce pode alimentar este valor no contador. p.ex. coloque 235 e ele vai "passar batido" sem fazer nada por 20x até 255. de posse do valor do clock e das informações supramencionadas, voce pode prever diretinho "quando" (aí estaria sua precisão e precisão) o mc vai interromper o que está fazendo e tratar de fazer algo numa rotina predeterminada. nela voce deve primeiramente realimentar com 235 (p.ex. pois o contador não pára) e apagar o sinal de interrupção (flag).

ou algo do gênero...

Bom isso é o que ocorre nas entranhas fedorentas da coisa. Se desejar algo mais limpo como as funções mastigadas do seu compilador, infelizmente me inclua fora dessa. Só tenho nível inferior....

abç
ze2
Byte
 
Mensagens: 193
Registrado em: 09 Fev 2009 13:37


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x