Pesquisar neste blog

26/02/2020

Push boton com PIC 16F877A

Objetivo: Inverter o estado do Led a cada vez que for pressionado

















Código feito em CCS C Compiler

#include <16f877a.h>
#use delay(crystal=20MHz)

void main(){
 
   while(true){
      if(input(pin_b0) == 1){
         output_toggle(pin_b1);//troca o estado do led
         delay_ms(500);// e espera 0,5s
      }
   }

}

Pisca Leds 4 com PIC 16F877A


















Código feito em CCS C Compiler:

#include <16f877a.h>
#use delay(crystal=20MHz)

void main(){
   char value[]={0b00000001, 0b00000011, 0b00000110, 0b00001100, 0b00011000, 0b00010000};
 
   while(true){
   
      for(int i=0; i<= 5; i++){
         output_b(value[i]);
         delay_ms(500);
      }
   
      for(i=6; i>= 1; i--){
         output_b(value[i-1]);
         delay_ms(500);
      }
   
   }
}

25/02/2020

Display 7 segmentos usando PIC 16F877A (3)




Código feito em mikro PRO for

void main() {
     trisb = 0; //definindo todos os pinos como porta de saída
     portb = 0; //desligando todos os pinos
   
     while(1){  //tudo que estiver aqui dentro irá repetir infinitamente
          portb = 0b00111111;//forma binária, 'imprimndo o [0]'
          delay_ms(500);

          portb = 0b00000110;//'imprimndo o [1]'
          delay_ms(500);

          portb = 91; //forma decimal, 'imprimindo o [2]'
          delay_ms(500);

          portb = 79;  // [3]
          delay_ms(500);//0,5s de espera

          portb = 0x66; //forma hexadecimal [4]
          delay_ms(500);

          portb = 0x6D; //forma hexadecimal  [5]
          delay_ms(500);

          portb = 0x7D; // [6]
          delay_ms(500);

          portb = 0x7;// forma hexadecimal  [7]
          delay_ms(500);

          portb = 0b01111111;//[8]
          delay_ms(500);

          portb = 0b01100111; //[9]
          delay_ms(500);
     }
}

24/02/2020

Display 7 segmentos com PIC 16F877A (2)

Laço de repetição no display de 7 segmentos usando goto














Código feito em mikro PRO for

void main() {

      trisb = 0;//definindo todos os pinos como saída
      portb = 0; //desligando

      inicio:
      portb = 0b00111111;//forma binária, 'imprimndo o [0]'
      delay_ms(500);

      portb = 0b00000110;//'imprimndo o [1]'
      delay_ms(500);

      portb = 91; //forma decimal, 'imprimindo o [2]'
      delay_ms(500);

      portb = 79;  // [3]
      delay_ms(500);//0,5s de espera

      portb = 0x66; //forma hexadecimal [4]
      delay_ms(500);

      portb = 0x6D; //forma hexadecimal  [5]
      delay_ms(500);

      portb = 0x7D; // [6]
      delay_ms(500);

      portb = 0x7;// forma hexadecimal  [7]
      delay_ms(500);

      portb = 0b01111111;//[8]
      delay_ms(500);

      portb = 0b01100111; //[9]
      delay_ms(500);
      goto inicio;  //retorna para para o inicio
}

Desafio 1

Fazer o Led piscar conforme o gráfico












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=20000000)

void main(){

   while(TRUE){
      output_low(PIN_B2);
   
      for(int i = 0; i< 50; i++){
         for(int j = 0; j < 100; j++){
            output_high(PIN_B2);
            delay_us(i*(1000/50));
            output_low(PIN_B2);
            delay_us(1000-(1*(1000/50)));
         }
      }
   }

}


18/02/2020

Pisca Leds 3 com PIC 16F877A

Objetivo: Piscar leds consequentemente usando for

















Código feito em CCS C Compiler

#include <16F877a.h>
#use delay(crystal=20MHz)

void main(){
   char pins[] = {PIN_B0,PIN_B1,PIN_B2,PIN_B3,PIN_B4};
 
   while(TRUE){
      for(int i=0; i<=4; i++){
         output_high(pins[i]);
         delay_ms(250);
         output_low(250);
         delay_ms(250);
      }
   
      for(i=5; i>=1; i--){
         output_high(pins[i-1]);
         delay_ms(250);
         output_low(pins[i-1]);
         delay_ms(250);
      }
   }
}

Display 7 segmentos usando PIC 16F877A (1)




















Código feito em mikro PRO for

void main() {
      trisb = 0;//definindo todos os pinos como saída
      portb = 0; //desligando
   
      portb = 0b00111111;//forma binária, 'imprimndo o [0]'
      delay_ms(500);
   
      portb = 0b00000110;//'imprimndo o [1]'
      delay_ms(500);
   
      portb = 91; //forma decimal, 'imprimindo o [2]'
      delay_ms(500);
   
      portb = 79;  // [3]
      delay_ms(500);//0,5s de espera
   
      portb = 0x66; //forma hexadecimal [4]
      delay_ms(500);
   
      portb = 0x6D; //forma hexadecimal  [5]
      delay_ms(500);
   
      portb = 0x7D; // [6]
      delay_ms(500);
   
      portb = 0x7;// forma hexadecimal  [7]
      delay_ms(500);
   
      portb = 0b01111111;//[8]
      delay_ms(500);
   
      portb = 0b01100111; //[9]
      delay_ms(500);
}

PiscaLed 2 com PIC 16F877A

Objetivo: Ligar e desligar vários leds consequentemente

Simulador usando Proteus 8.8


















Código feito no software mikroC Pro for, versão 7.2

void main() {
    trisb = 0;

    /*portb.rb0 = 1;
    portb.rb1 = 1;
    portb.rb2 = 1;
    portb.rb3 = 1;
    portb.rb4 = 1;
    portb.rb5 = 1;
    portb.rb6 = 1;
    portb.rb7 = 1;*/
 
    //método2 para ligar todos leds
    //portb = 0b11111111;//substitui o método acima, economizando linhas
 
    //método3  para ligar todos leds
    portb = 255;//forma em decimal
    //portb = 231;  //fazendo teste com com a porta 231
    delay_ms(500);//desligando os leds começando por rb7
 
    portb.RB7 = 0;
    delay_ms(500);
 
    portb.RB6 = 0;
    delay_ms(500);
 
    portb.rb5 = 0;
    delay_ms(500);//espera 0,5s
 
    portb.rb4 = 0;
    delay_ms(500);
 
    portb.RB3 = 0;
    delay_ms(500);
 
    portb.RB2 = 0;
    delay_ms(500);
 
    portb.rb1 = 0;
    delay_ms(500);
 
    portb.rb0 = 0;
    delay_ms(500);
}

17/02/2020

Pisca Led1 com PIC 16F877A

Software Proteus 8.8
























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=20000000)

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);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   while(true){
      output_high(PIN_B2);
      delay_ms(1000);
      output_low(PIN_B2);
      delay_ms(1000);
   }

}