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.
pic.png
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.
Anexos:
Soluções para a tarefa
Respondido por
0
a placa mae faz isso porque ela tem a opçao plutonar observal de ligar e desligar em esta ligando e desligando e sim dando um efeito disso.
Perguntas interessantes
Química,
4 meses atrás
Matemática,
4 meses atrás
Matemática,
4 meses atrás
Artes,
4 meses atrás
ENEM,
10 meses atrás
Biologia,
10 meses atrás
Português,
10 meses atrás