Pesquisar neste blog

18/05/2022

Frequência com TIMER0 no PIC 16F877A

Código feito no CCS C Compiler

#include <16F877A.h>
#device adc = 8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT, NOWRT
#use delay(clock = 20MHz)

unsigned int16 cont1 = 0, cont2 = 0, cont3 = 0;

/*Contagem  frequencia de entrada
   PARA 220 Hz
   PARA 95 Hz
   PARA 82 Hz 
*/
// 274 Hz ---> 36 ---> 3.65ms
#int_TIMER0
void TIMER0_isr(void){
   if(++cont1 >= 44)  { cont1 = 0; output_toggle(pin_B0) ; } // [274 * 36] / 220) = 44
   if(++cont2 >= 103) {cont2 = 0;output_toggle(pin_B1); } //   [274 * 36] / 95 = 103
   if(++cont3 >= 120) {cont3 = 0; output_toggle(pin_B2); } //  [274 * 36] / 82 = 120
}

void main(){
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1); // overflow 51,2 us
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   //disable_interrupts(GLOBAL);
   
   while(true);
}

Saída gerada no software Proteus 7.9




Nenhum comentário: