Exercicios pic 16f8776

587 palavras 3 páginas
Então pedrorose acho que isso deve dar pra começar alguma coisa...
Fiz um esboço usando um PIC 16f877A em 4MHz , já que vc não definiu qual Pic está usando .
Rb0 e Rb1 são as duas entradas , considerando ligadas quando são colocadas a nivel zero , ou seja , use resistores de Pull up .

Rc0 terá um led que liga quando as duas entradas forem pulsadas quatro vezes dentro de 15 segundos .

Rc1 terá um led que liga quando o tempo chega a 15 segundos , mesmo nao acionando nenhuma entrada , só para monitorar o funcionamento do temporizador .

Ficou faltando um reset da saída , pois nao ficou muito claro como vai fazer isso , apenas coloquei um reset dos contadores de pulsos de entrada caso chegar a 15 segundos e as entradas nao totalizarem os quatro pulsos cada . Para reset desligar e ligar o simulador ou o circuito.

Ainda : a interrupção do timer 1 fica continuamente ligada , apenas criei um flag que é ligado ao primeiro pulso tanto na entrada 1 ou 2 que habilita o contador de 15 segundos.

Espero que sirva de ponto de partida .
MP com arquivo que simulei no proteus , se vc usar aí .
Também o .hex e o .cof necessários para simularno proteus

// programa MikroC

unsigned short in1 = 0; //flags das entradas unsigned short in2 = 0; // flags das entradas unsigned counter, tmp; unsigned T1_count=0; // counter variable, temporary variable unsigned short f_inc; // Timer1 counter, Usart Send flag unsigned short f_temporizador ;// flag liga temporizador unsigned contador_in1=0; // inicializa os contadores unsigned contador_in2=0; unsigned temporizador=0; // inicializa temporizador

void interrupt() {

if (PIR1.TMR1IF) {
T1_count++; // increment T1_count
TMR1H = 11; // write values to Timer1 registers
TMR1L = 220; if (T1_count == 2) { // valor original =4 !!!!!!!!! para clock 8 Mhz
T1_count = 0; if (f_temporizador) f_inc = 1; // se o temporizador estiver ligado seta f_inc
}
PIR1.TMR1IF = 0;
}

PIE1.TMR1IE = 1; // Enable Timer1

Relacionados