Buscar

Sistemas embutidos Solução Prova 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Universidade Federal de Ouro Preto - UFOP
Instituto de Ciências Exatas e Biológicas - ICEB
Departamento de Computação - DECOM
BCC 425 - Sistemas Embutidos - 2016/1
Primeira Prova Teórica - 15/06/2016
ATENÇÃO: Leia com atenção as questões da prova. A interpretação dos enun-
ciados faz parte da avaliação.
Nome: Matrícula:
1. (0.2) Para que serve a região de memória conhecida como vetor de interrupção?
A região de memória conhecida como vetor de interrupção indica onde o sistema deve ir
no caso de uma interrupção.
2. (0.3) Qual a diferença entre as operações lógicas e bitwise na linguagem C? Apresente o
resultado das seguintes operações:
Nas operações Lógicas os operandos são tomados como um todo, nas operações Bitwise
os operandos são processados bit à bit.
result1 = 0x00 ou 0 result2 = 0x01 ou 1 result3 = 0xFF ou 255 result4 = 0x01 ou 1
result5 = 0x00 ou 0 result6 = 0xF0 ou 240
3. (0.5) Num dado sistema, a posição de memória 0xF34 está ligada a um sensor de corrente,
que retorna um valor sinalizado de 8 bits. Sabendo que a tensão do sistema é sempre
constante em 10 Volts, crie uma função que retorne o valor da resistência. Cuidado
com o valor de corrente, pois pode assumir o valor zero ou negativo. Tome as devidas
precauções para evitar erros de cálculo. A resistência é sempre positiva. Fórmula da
resistência: R = V/I.
1 #define VAR (*( unsigned char*)0x00) // Exemplo de variavel de 8
bits para endereco 0x00
1 #define CORRENTE (*( signed char*) 0xF34)
2 signed char CalculaResistencia(void){
3 if (CORRENTE > 0){
4 return (10 / CORRENTE);
5 }else if (CORRENTE < 0){
6 return (-10 / CORRENTE);
7 }else{
8 return -1; // erro no calculo , divisao por zero;
9 }
10 }
4. (0.5) Existe uma variável não sinalizada com 16 bits com o nome �TECLADO�. Cada bit
representa uma tecla física. Construa um programa cíclico que verifica quais teclas estão
pressionadas. Para cada tecla pressionada o programa deve escrever o número dessa tecla
no LCD. Para isso, use a função �printf()�.
1 #define BitTst(var , pos) (var & (1 << pos));
1 void main (void){
2 char i;
3 while (1){
4 for(i = 0; i < 16; i++){
5 if(BitTst(TECLADO , i)){
6 printf(" %d", i);
7 }
8 }
9 }
10 }
5. (0.5) Crie um programa cíclico que realize a leitura de 3 chaves na porta B, nos bits 1, 2 e
3. Em seguida, este programa deverá acender uma quantidade de leds correspondente ao
somatório dos número das chaves. Ex.: se as chaves 1 e 3 estiverem pressionadas (chave
em �1�), 4 leds serão acesos. Se as chaves 1, 2 e 3 estiverem pressionadas, 6 leds serão
acesos. Se nenhuma chave estiver pressionada, todos os leds devem ser apagados. As
chaves podem ser lidas através da variável PORTB e os leds se encontram na variável
PORTD.
1 #define BitTst(var , pos) (var & (1 << pos));
2 #define BitSet(var , pos) (var | (1 << pos));
1 void main (void){
2 char quantidadeLeds , i;
3 BitSet(TRISB ,1); // bit 1 da porta B eh entrada
4 BitSet(TRISB ,2); // bit 2 da porta B eh entrada
5 BitSet(TRISB ,3); // bit 3 da porta B eh entrada
6
7 TRISD = 0x00; // porta D eh saida
8
9 while (1){
10 quantidadeLeds = 0;
11 if(BitTst(PORTB ,1)){
12 quantidadeLeds += 1;
13 }
14 if(BitTst(PORTB ,2)){
15 quantidadeLeds += 2;
16 }
17 if(BitTst(PORTB ,3)){
18 quantidadeLeds += 3;
19 }
20 PORTD = 0x00 // apaga todos os leds
21 // acende a quantidade de leds necessaria
22 for(i = 0; i < quantidadeLeds; i++){
23 BitSet(PORTD ,i);
24 }
25 }
26 }

Outros materiais