Pesquisar neste blog

20/03/2022

Mini teste 1 - 2022/1

Projete um sistema com microcontrolador PIC (circuitos necessários para o microcontrolador funcionar) para funcionar da seguinte forma: 
quando o usuário do micro-ondas (figura 1) apertar o botão INÍCIO (primeira vez) o micro-ondas começa uma contagem decrescente de 30 para zero; se o usuário apertar novamente antes da contagem chegar a zero ele soma mais trinta a contagem atual e continua a contagem decrescente. Quando chegar em zero para a contagem e liga um LED OBS.: o circuito deve ter a os conectores para gravação; circuito do oscilador; alimentação; circuito do LED; circuito do botão e circuito para display de sete seguimentos.













Resolução:

CÓDIGO FEITO EM CCS C Compiler

#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock = 20MHz)

unsigned int cont_int = 0;
unsigned int tempo = 0, i =0;
int1 mostra_UD = 0;

byte const numeros[11] ={
 0b00111111, //0
 0b00000110, //1
 0b01011011, //2
 0b01001111, //3
 0b01100110, //4
 0b01101101, //5
 0b01111101, //6
 0b00000111, //7
 0b01111111, //8
 0b01101111 //9
 };

#int_RTCC
void RTCC_isr(void){
   
   if(++cont_int>154){
      //output_toggle(PIN_B5);
      tempo--;
      cont_int = 0;
   }
 
   if(mostra_UD==0){
      mostra_UD=1;
      i = tempo/10;
      output_d(numeros[i]);
      output_high(PIN_A4);
      output_low(PIN_A5);
   }else{
      mostra_UD=0;
      i = tempo%10;
      output_d(numeros[i]);
      output_low(PIN_A4);
      output_high(PIN_A5);
   }

 
   if(tempo==0){
      disable_interrupts(INT_RTCC);
      output_high(PIN_B6); //liga o buzzer
      
      delay_ms(2000);
      output_low(PIN_B6); //desliga o buzzer
   }
}
#int_EXT
void EXT_isr(void){
   enable_interrupts(INT_RTCC);
   tempo = tempo + 30;
   output_toggle(PIN_B4);
}



void main(){
   
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   // Programa o Timer0
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128); // overflow vai ser com 6,5ms

   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // Habilita/desabilita as interrupções do Timer0 e externa (b0)
   disable_interrupts(INT_RTCC);
   enable_interrupts(INT_EXT);

   ext_int_edge( L_TO_H );
   enable_interrupts(GLOBAL);

   // Apaga os display 7 segmentos
   output_low(PIN_A2);
   output_low(PIN_A3);
   output_low(PIN_A4);
   output_low(PIN_A5);
   output_low(PIN_B6); //desliga o buzzer

   while(true){
   };
}
 
Software: PicsimLab





Nenhum comentário: