Pesquisar neste blog

13/09/2020

Timer0 com interrupção usando PIC 16F628A

Código feito em CCS C Compiler


#include <16f628a.h>

#fuses intrc_io,nowdt, nomclr

#use delay(clock = 4MHz)

#use fast_io(a)

#use fast_io(b)

#define use_portb_lcd TRUE//configurando no port b

#include <lcd.c>

int cont, timer;

//diretiva de interrupção do timer 0

#INT_TIMER0


void contador(void){

   lcd_putc("\fINTERRUPCAO \n ATIVADA");

   for(cont = 0; cont < 5; cont++){

      output_low(pin_a0);//nivel baixo no pino a0

      output_high(pin_a1);//nivel alto no pino a1

      delay_ms(500);

      output_low(pin_a1);

      delay_ms(500);

      set_timer0(250);

   }

   

   lcd_putc("\fINTERRUPCAO \n FINALIZADA");

   delay_ms(2000);

   lcd_putc("\fVOLTANDO AO \nPROGRAMA");

   delay_ms(2000);

   lcd_putc("\fAGUARDANDO\NINTERRUPCAO");

   delay_ms(100);

}


void main(void){

   set_tris_a(0xf0);//1/2 como entrada e 1/2 como saída

   set_tris_b(0x00);//port saida

   output_b(0x00);

   ENABLE_INTERRUPTS(GLOBAL);//chave geral da interupcao

   ENABLE_INTERRUPTS(INT_TIMER0);//habilitando a interrupcao

   SETUP_TIMER_0(RTCC_EXT_L_TO_H);//declarando oscilador xnterno e incremento atraves do RA4 , COLOCANDO A BORDA DE DESCIDA PARA SUBIDA 

   SET_TIMER0(250);//setando em 250

   lcd_init();

   lcd_putc("\fAGUARDANDO\nINTERRUPCAO");

   

   

   while(true){

      output_high(pin_a0);

      delay_ms(500);

      output_low(pin_a0);

      delay_ms(500);

      timer = get_timer0() + 6;//captura atraves da função e soma + 6

      lcd_putc("\fAGUARDANDO\nINTERRUPCAO");

      printf(lcd_putc,"  %u", timer);

   }

}







Jogo da Quina com PIC 16F628A

#include <16f628a.h>

#fuses intrc_io,nowdt, nomclr

#use delay(clock = 4MHz)

#use fast_io(a)

#use fast_io(b)

#define use_portb_lcd TRUE

#include <lcd.c>

int cont = 1, timer, num[5];

void main(void){

   set_tris_a(0xff);//todo port a como entrada

   lcd_init();

   setup_timer_0(rtcc_internal|rtcc_div_1);//definindo como oscilador interno e, escale como 1 

   lcd_putc("  QUINA \n");

   delay_ms(200);

   lcd_putc("  \f SORTEANDO:\n");

   delay_ms(500);

   set_timer0(1);

   

   while(true){

      while(cont <= 5){

         timer = GET_TIMER0();

         if(timer > 0 && timer < 81){

            num[cont] = timer;

            printf(lcd_putc,"%u ", num[cont]);

            cont++;

         }

         delay_ms(331);

         

      }

      delay_ms(3000);

      lcd_putc("\f   SORTEANDO:\n");

      cont = 1;

   }

}











Créditos para: Alexandro Lima

Timer usando com PIC 16F628A

Código feito em CCS C Compiler


#include <16f628a.h>

#fuses intrc_io,nowdt, nomclr

#use delay(clock = 4MHz)

#use fast_io(a)

#use fast_io(b)


int cont, timer;


void main(void){

   set_tris_a(0xf);//1/2 como entrada e 1/2 como saída

   set_tris_b(0x00);//port saida

   output_b(0x00);

   SETUP_TIMER_0(RTCC_EXT_L_TO_H);//declarando oscilador xnterno e incremento atraves do RA4 , COLOCANDO A BORDA DE DESCIDA PARA SUBIDA 

   SET_TIMER0(0);

         

   while(true){

      timer = GET_TIMER0();//captura e armazena na variável timer

      if(timer == 5){

         for(cont = 0; cont < 5; cont++){

            output_high(pin_b1);

            delay_ms(500);

            output_low(pin_b1);

            delay_ms(500);

            set_timer0(0);    

         }

      }    

   }

}