Ir ao conteúdo
  • Cadastre-se

Microcontrolador PIC16F873


Posts recomendados

Alguém pode me ajudar com a questão abaixo: A questão está em anexo também! 

 

Analise o programa e a figura com o diagrama esquemático abaixo. O programa é basicamente um pisca-pisca, acionado por botões (B1 a B4). Cada saída (P1 a P4) tem uma freqüência quando o botão correspondente é acionado. O outro conjunto de saídas (L1 a L8) é acionada pelo potenciômetro, que está conectado na entrada analógica AN0.

 

 

Arquivo: Questao.h

============================================================================

#include

#device ADC=8

#use delay(crystal=4MHz)

#use FIXED_IO( B_outputs=PIN_B7,PIN_B6,PIN_B5,PIN_B4 )

#use FIXED_IO( C_outputs=PIN_C7,PIN_C6,PIN_C5,PIN_C4,PIN_C3,PIN_C2,PIN_C1,PIN_C0 )

#define EA1   PIN_A0

#define B1   PIN_B0

#define B2   PIN_B1

#define B3   PIN_B2

#define B4   PIN_B3

#define P1   PIN_B4

#define P2   PIN_B5

#define P3   PIN_B6

#define P4   PIN_B7

#define L1   PIN_C0

#define L2   PIN_C1

#define L3   PIN_C2

#define L4   PIN_C3

#define L5   PIN_C4

#define L6   PIN_C5

#define L7   PIN_C6

#define L8   PIN_C7

============================================================================

 

Arquivo: Questao.c

============================================================================

#include

short pisca_1, pisca_2, pisca_3, pisca_4;

int   ciclo_1, ciclo_2, ciclo_3, ciclo_4;

short le_adc;

long  aux_valor, valor_adc, saida;

#define  valor_1  25

#define  valor_2  75

#define  valor_3  125

#define  valor_4  225

#define  ajuste   131

 

#INT_RTCC

void  RTCC_isr(void)

{

   set_timer0(get_timer0() + ajuste);

   if (pisca_1)

   {

      ciclo_1--;

      if (ciclo_1 == 0)

      {

         output_toggle(P1);

         ciclo_1 = valor_1;

      }

   }

   if (pisca_2)

   {

      ciclo_2--;

      if (ciclo_2 == 0)

      {

         output_toggle(P2);

         ciclo_2 = valor_2;

      }

   }

   if (pisca_3)

   {

      ciclo_3--;

      if (ciclo_3 == 0)

      {

         output_toggle(P3);

         ciclo_3 = valor_3;

      }

   }

   if (pisca_4)

   {

      ciclo_4--;

      if (ciclo_4 == 0)

      {

         output_toggle(P4);

         ciclo_4 = valor_4;

      }

   }

   le_adc = 1;

}

 

void main()

{

   port_B_pullups(0xFF);

   setup_adc_ports(AN0);

   setup_adc(ADC_CLOCK_INTERNAL);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);

   output_low(P1);

   output_low(P2);  

   output_low(P3);  

   output_low(P4);  

   output_c(0);

   ciclo_1 = valor_1;

   ciclo_2 = valor_2;

   ciclo_3 = valor_3;

   ciclo_4 = valor_4;

   enable_interrupts(INT_RTCC);

   enable_interrupts(GLOBAL);

   while(TRUE)

   {

      if (input(B1) == 0)

      {

         pisca_1 = 1;

      }

      else

      {

         pisca_1 = 0;

      }

      if (input(B2) == 0)

      {

         pisca_2 = 1;

      }

      else

      {

         pisca_2 = 0;

      }

      if (input(B3) == 0)

      {

         pisca_3 = 1;

      }

      else

      {

         pisca_3 = 0;

      }

      if (input(B4) == 0)

      {

         pisca_4 = 1;

      }

      else

      {

         pisca_4 = 0;

      }

      if (le_adc)

      {

         le_adc = 0;

         valor_adc = read_adc() / 29;

         aux_valor = valor_adc;

         saida = 1;      

         while (aux_valor > 0)

         {

            saida = saida * 2;

            aux_valor--;

         }

         if (valor_adc > 0)

         {

            saida = saida - 1;    

         }

         else

         {

            saida = 0;

         }

         output_c(saida);

      }

   }

}

============================================================================

Pede-se:

a) A frequência de acionamento dos LED P1 e P2.

B) O intervalo de interrupção do TIMER0.

c) Indicar os LEDS que estarão acesos se o potenciômetro estiver fornecendo 3,5 V na entrada analógica, cuja faixa vai de 0 a 5 V.

d) O menor degrau de tensão detectado pelo conversor analógico do PIC.

 

SISTEMAS DIGITAIS MICROCONTROLADOS.pdf

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois...

Alguém pode me informar se as respostas das letras a e b são respectivamente   4MHz e 15625 Hz .Obs sou extremamente principiante precisando de ajuda.

Isadora Ferraz, boa tarde  estou tentando fazer uma tarefa avaliativa, com essas mesmas questões sem sucesso até agora na letra a, para ser postada até dia 8/9 as 23 h, o tempo está curto.Li o texto fornecido pelo meu curso e tentei usando a instruçãona 3ªlinha    

#use delay(crystal=4MHz)  no programa. Agora vou tentar pelo PIC16F873 Datasheet, PDF,http://www.alldatasheet.com/view.jsp?Searchword=Pic16f873, seria essa a alternativa?

 

 

 

Link para o comentário
Compartilhar em outros sites

estou fazendo esse exercicio...

 

Já consegui fazer funcionar (compilar/simular proteus) mais com uma alteração ao invés de utilizar #use delay(crystal=4MHz), alterei para #use delay(clock=1000000), posso estar errado pois estou aprendendo ainda, mais fazendo dessa forma estou utilizando o timer interno deixei 1MHZ pois acho que o clock interno do PIC é 1/4 da frequência do oscilador.

 

Alguem me pode me ajudar com o erro ao utilizar delay(crystal=4MHz).

 

Abaixo segue o arquivo .c e .h.

 

Obrigado.

 

Arquivo .C

----------------------------------------------------

#include "C:\xxxxxxxxx\PIC\ACQA_LEMES.h"

short pisca_1, pisca_2, pisca_3, pisca_4;

int   ciclo_1, ciclo_2, ciclo_3, ciclo_4;

short le_adc;

long  aux_valor, valor_adc, saida;

#define  valor_1  25

#define  valor_2  75

#define  valor_3  125

#define  valor_4  225

#define  ajuste   131

#INT_RTCC

void  RTCC_isr(void)

{

   set_timer0(get_timer0() + ajuste);

   if (pisca_1)

   {

      ciclo_1--;

      if (ciclo_1 == 0)

      {

         output_toggle(P1);

         ciclo_1 = valor_1;

      }

   }

   if (pisca_2)

   {

      ciclo_2--;

      if (ciclo_2 == 0)

      {

         output_toggle(P2);

         ciclo_2 = valor_2;

      }

   }

   if (pisca_3)

   {

      ciclo_3--;

      if (ciclo_3 == 0)

      {

         output_toggle(P3);

         ciclo_3 = valor_3;

      }

   }

   if (pisca_4)

   {

      ciclo_4--;

      if (ciclo_4 == 0)

      {

         output_toggle(P4);

         ciclo_4 = valor_4;

      }

   }

   le_adc = 1;

}

void main()

{

   port_B_pullups(0xFF);

   setup_adc_ports(AN0);

   setup_adc(ADC_CLOCK_INTERNAL);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8|RTCC_8_bit);

   output_low(P1);

   output_low(P2);

   output_low(P3);

   output_low(P4);

   output_c(0);

   ciclo_1 = valor_1;

   ciclo_2 = valor_2;

   ciclo_3 = valor_3;

   ciclo_4 = valor_4;

   enable_interrupts(INT_RTCC);

   enable_interrupts(GLOBAL);

   while(TRUE)

   {

      if (input(B1) == 0)

      {

         pisca_1 = 1;

      }

      else

      {

         pisca_1 = 0;

      }

      if (input(B2) == 0)

      {

         pisca_2 = 1;

      }

      else

      {

         pisca_2 = 0;

      }

      if (input(B3) == 0)

      {

         pisca_3 = 1;

      }

      else

      {

         pisca_3 = 0;

      }

      if (input(B4) == 0)

      {

         pisca_4 = 1;

      }

      else

      {

         pisca_4 = 0;

      }

      if (le_adc)

      {

         le_adc = 0;

         valor_adc = read_adc() / 29;

         aux_valor = valor_adc;

         saida = 1;

         while (aux_valor > 0)

         {

            saida = saida * 2;

            aux_valor--;

         }

         if (valor_adc > 0)

         {

            saida = saida - 1;

         }

         else

         {

            saida = 0;

         }

         output_c(saida);

      }

   }

}

Arquivo .h

----------------------------------------------------

#include <16F873.h>

#device ADC=8
//#FUSES XT

#use delay(clock=4000000)
//#use delay(crystal=4000000)

#use FIXED_IO( B_outputs=PIN_B7,PIN_B6,PIN_B5,PIN_B4 )

#use FIXED_IO( C_outputs=PIN_C7,PIN_C6,PIN_C5,PIN_C4,PIN_C3,PIN_C2,PIN_C1,PIN_C0 )

#define EA1   PIN_A0

#define B1   PIN_B0

#define B2   PIN_B1

#define B3   PIN_B2

#define B4   PIN_B3

#define P1   PIN_B4

#define P2   PIN_B5

#define P3   PIN_B6

#define P4   PIN_B7

#define L1   PIN_C0

#define L2   PIN_C1

#define L3   PIN_C2

#define L4   PIN_C3

#define L5   PIN_C4

#define L6   PIN_C5

#define L7   PIN_C6

#define L8   PIN_C7
 

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!