• Nenhum resultado encontrado

UNIFEI Universidade Federal de Itajubá

N/A
N/A
Protected

Academic year: 2022

Share "UNIFEI Universidade Federal de Itajubá"

Copied!
3
0
0

Texto

(1)

UNIFEI

Universidade Federal de Itajubá

Instituto de Engenharia de Sistemas e Tecnologias da Informação ­ IESTI Exame de ELT024 – Programação para Sistemas Embarcados

Prof. Rodrigo Maximiano Antunes de Almeida

(20 pts Questão 1) Qual a diferença entre as operações lógicas e bitwise na linguagem C? Apresente o resultado das seguintes operações:

result1 = 0x77 & 0x88;

result2 = 0x77 && 0x88;

result3 = 0xAA | 0x55;

result4 = 0xAA || 0x55;

result5 = !0x0F;

result6 = ~0x0F;

Resposta: 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

(20 pts Questão 2) Criar a biblioteca "math" com funções que façam as seguintes operações:

1) Retornar o quadrado de um número recebido por parâmetro. Cuidado com overflow do char (127).

2) Calcular e retornar   o seno de um número recebido por parâmetro. A função pode ser  aproximada por: sinx=x−x3

3! x5

5!  (x é um valor em radianos) char quad(char a);

float sen(char a);

Resposta:

//--- // math.h

#ifndef MATH_H

#define MATH_H char quad(char a);

float sen(char a);

#endif //MATH_H

//--- // math.c

#include "math.h"

char quad(char a) {

if ((a < 11) && (a > -11)) //11 é o maximo para ñ estourar um char return a*a;

return -1; //negativo informa erro }

float sen(char a) {

float resp;

resp = a – ((a*a*a)/(3f*2)) + ((a*a*a*a*a)/(5f*4*3*2)) return resp;

}

(2)

(30 pts Questão 3)  Crie um programa que exibe nos displays de 7 segmentos o valor do AD. A  atualização deve ser feita a cada 5 ms. Para isso utilize o timer0 através de interrupção. A flag de  interrupção do timer0 é o terceiro bit(2) do registro INTCON. Para habilitar as interrupções é  necessário ligar os bits 5, 6 e 7 do registro INTCON e desligar o bit 7 do registro RCON.

void ResetaTimer(unsigned int); //tempo em us void AtualizaDisplay(void);

void MudaDigito(char valor, char posicao);

unsigned int LeValorAD(void);

Resposta

#include "basico.h"

#include "config.h"

#include "adc.h"

#include "disp7seg.h"

#include "timer.h"

unsigned char flag;

void rotInterr (void) interrupt 1 {

if (BitTst(INTCON,2)) {

BitClr(INTCON,2);

ResetaTimer(50000);

flag = 1;

} }

void main (void) interrupt 0 {

unsigned int advalor;

InicializaAD();

InicializaDisplays();

InicializaTimer();

//liga interrupção BitSet(INTCON,5);

BitSet(INTCON,6);

BitSet(INTCON,7);

BitClr(RCON,7);

for(;;) {

//pode também colocar AtualizaDisplay(); dentro da interrupção //nesse caso não precisa do flag

AtualizaDisplay();

advalor = LeValorAD();

MudaDigito(advalor%10,0);

MudaDigito((advalor/10)%10,1);

MudaDigito((advalor/100)%10,2);

MudaDigito((advalor/1000)%10,3);

while(!flag); //aguarda timer de 5ms }

}

(3)

(30 pts Questão 4)  Um sistema embarcado possui as 9 chaves ligadas conforme a figura abaixo  (adotar a porta C como saída e porta B como entrada).

Monte duas funções:

1)  "void VarreduraChaves(void)": a função fará a varredura das chaves e salvar o estado de cada  chave numa variável "unsigned int Teclas" global­local.

2)  "unsigned char LeTecla(void)": a função deve retornar o número da chave pressionada ou 0  (zero) se nenhuma estiver apertada. Usar como referência a variável global­local "Teclas".

Obs.: Lembre de definir a direção das portas. Adote o circuito como funcional para todos os casos.

Resposta 1)

// O programa abaixo foi feito supondo que os pinos são ligados com 1.

// Pode ser feito também com os pinos sendo ligados em zero,

//é nessesário apenas modificar as constantes. O restante fica inalterado unsigned int Teclas; //variável global-local

void VarreduraChaves(void){

unsigned char i,j;

TRISB = 0x07; //configura (210) como entrada TRISC = 0x00; //configura (210) como saída for(i = 0; i < 3; i++){

PORTC = 0x00; //desliga todas as colunas BitSet(PORTC,i); //liga a coluna correspondente

for(j = 0; j < 3; j++){ //teste para cada bit, atualiza a variável if (BitTst(PORTB,j)){

BitSet(valorNovo,(i*3)+j);

}else{

BitClr(valorNovo,(i*3)+j);

} } } } 2)

unsigned int Teclas; //variável global-local unsigned char LeTecla(void){

char i;

for(i = 0; i<9; i++){

if (BitTst(Teclas,i)) return i+1;

}

return 0;

}

Referências

Documentos relacionados

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the

Quest˜ ao 1 (10 pontos).. 2) Um pêndulo simples é constituído por uma esfera de massa M presa a um fio inextensível de comprimento L, como mostra a figura ao lado.. 3)

Com a finalidade de estimar as perdas durante a colheita pela colhedora em diferentes velocidades e regulagens de côncavo, a estimativa de grãos perdidos na colheita

13/08/10 03) Operações com bits, Debug de sistemas embarcados 17/08/10 03) Operações com bits 20/08/10 04) Ponteiros e endereços de memória, Arquitetura de. microcontroladores,

Este trabalho propõe o desenvolvimento de um módulo para a ferramenta Redmine, a fim de automatizar o processo de estimativa de tamanho e esforço de software aplicando a técnica

The syllabus will contribute to the curricular unit?s objectives and competences as follows: The chapters 1, 2 and 5 allows students to obtain the skills [C1] and [C2]. The chapter

A fim de caracterizar a modificação das propriedades hidráulicas do solo devido à presença de incêndios florestais, foi realizada uma campanha experimental em que se

As perdas totais de solo transformadas para perdas anuais de solo ficaram a baixo do nível de tolerância (8,9 t ha -1 ano -1 BERTOL &amp; ALMEIDA, 2000) para o Cambissolo Húmico