Pesquisar neste blog

25/05/2022

Mini teste 1 #2021/2

Construa um programa (em C) para sistema baseado no microcontrolador PIC16F877A que após o botão B1 ser pressionado ele escreve o dia e o mês do seu nascimento (com interrupção do B1). Quando o B0 for pressionado ele apaga tudo

Ex 25:12 (vinte e cinco de dezembro)










Resolução feita no CCS C Compiler

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

unsigned int8 display [ ] = {
   0b000000,   // display desligado
   0b000100,   // display 1
   0b001000,   // display 2
   0b010000,   // display 3
   0b100000,  // display 4
};

unsigned int8 v1[] = {0b00111111, 0b00000110, 0b01011011, 
   0b01001111, 0b01100110, 0b01101101, 0b01111101, 
   0b00000111, 0b01111111, 0b01100111};

#int_EXT
void EXT_isr(void){
   enable_interrupts(INT_RTCC);
   if(input(PIN_B1) == TRUE){
      output_a(display[0]); // desliga todos os display
      delay_ms(500);
      
   }
}

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_128);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED, 0, 1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   disable_interrupts(INT_RTCC);
   enable_interrupts(INT_EXT);
   
   ext_int_edge(L_TO_H);
   enable_interrupts(GLOBAL);
    
   
   while(true){
            
      for(int i = 0; i < 15; i++){
         output_a(display[1]);
         output_d(v1[1]);
         delay_ms(t);
         
         output_a(display[2]);
         output_d(v1[6]);
         delay_ms(t);
         
         output_a(display[3]);
         output_d(v1[0]);
         delay_ms(t);
         
         output_a(display[4]);
         output_d(v1[8]);
         delay_ms(t);
         
      }
   }
}

Saída gerada no PicsimLab





















Nenhum comentário: