Professional Documents
Culture Documents
#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);
}
}
}
======================= Fim Arquivo: Atividade.c ============================
Ao iniciar o programa, todos os LEDS estão apagados. Se qualquer uma das chaves B1, B2, B3
ou B4 são acionadas, o LED correspondente começa a piscar na frequência definida no programa.
Qual o estado do LED quando a chave abre após o primeiro acionamento?
A) Para de piscar e permanece no último estado que estava no momento que a chave
foi aberta.
B) Continua a piscar com frequência 2 vezes menor enquanto a chave estiver aberta.
C) Para de piscar e permanece aceso enquanto a chave estiver aberta.
D) Para de piscar e permanece apagado enquanto a chave estiver aberta. ( errado )
E) Continua a piscar com frequência 2 vezes maior enquanto a chave estiver aberta.
#int_RTCC
void RTCC_isr(void)
{
set_timer0(get_timer0() + 6);
if (contando)
{
passo--;
if (passo == 0)
{
passo = 10;
t = 0;
contar = 1;
while (contar)
{
if (numeros[t] < 9)
{
numeros[t]++;
contar = 0;
}
else
{
numeros[t] = 0;
t++;
}
}
}
}
output_b(0b11111111);
if (n == 2)
output_c(CODIGO[numeros[n]] | 128);
else
output_c(CODIGO[numeros[n]]);
output_b(0b11111111 ^ (128 >> n));
n++;
if (n > 5) n = 0;
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
contando = 0;
while(1)
{
if (contando)
{
if (!input(BOTAO2))
{
contando = 0;
}
}
else
{
if (!input(BOTAO1))
contando = 1;
if (!input(BOTAO3))
{
for (c = 0; c < 6; c++)
numeros[c] = 0;
passo = 10;
}
}
}
}
//================== Fim Arquivo crono.c //=================
Enquanto a tecla estiver pressionada o LED deve ligar. Caso ela não esteja pressionada o LED
deve ficar desligado. Esse LED funciona com valores nominais de 3V e 20mA. Durante o
desenvolvimento dessa lógica o projetista errou não considerando um detalhe e, por
consequência disso a regra citada não será atendida.