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:
Postar um comentário