Baixe o app para aproveitar ainda mais
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 }
Compartilhar