Ir ao conteúdo
  • Cadastre-se

C Micro controlador não estou conseguindo resolver


Smith Smith

Posts recomendados

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 frequê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.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...