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