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);

   }

}







Nenhum comentário: