• 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 2a Prova de ELT024 – Programação para Sistemas Embarcados

Prof. Rodrigo Maximiano Antunes de Almeida

(10 pts Questão 1) Existem 8 leds conectados à porta D e estes são ligados com nível alto (5  volts ou bit = 1). Dado o programa abaixo, indique o estado de cada led (ligado/desligado).

#include “config.h”

#include “basico.h”

void main(void) interrupt 0 {

TRISD = 0xE3;

PORTD = 0xAA;

for(;;);

}

Resposta: Para um led estar ligado é necessário que esteja com nível alto (1) e o seu bit de  configuração correspondente esteja configurado como saída (0).

TRISD = 0b11100011;

PORTD = 0b10101010;

Ligados 00001000

Apenas o led 3 está ligado, os leds 7­6­5­4­2­1­0 estão desligados.

(15 pts Questão 2) Configure os registros INTCON e RCON para que apenas a interrupção do  TIMER0 funcione. Escolha o modo de compatibilidade. Obs.: todos os bits dos registros podem ser  habilitados colocando­se o valor 1 (um) e desabilitados colocando­se o valor (0).

INTCON = 0b________;

// ||||||||

// ||||||| -> RBIF: Flag de interrupção da porta B└ // |||||| -> INT0IF: Flag de interrupção externa 0└ // ||||| -> TMR0IF: Flag de interrupção do timer 0└ // |||| -> RBIE: Bit que habilita interrupção na porta B└ // ||| -> INT0IE: Bit que habilita interrupção externa└ // || -> TMR0IE: Bit que habilita interrupção do Timer 0└

// | -> PEIE/GIEL: p/ IPEN = 1: habilita interrupções de baixa prioridade└ // | p/ IPEN = 0: habilita interrupções dos periféricos // -> GIE/GIEH: p/ IPEN = 1: habilita interrupções de alta prioridade└ // p/ IPEN = 0: habilita todas as interupções

RCON = 0b________;

// ||||||||

// ||||||| -> BOR: Flag de brown-out reset└ // |||||| -> POR: Flag de power-on reset└ // ||||| -> PD: Flag de detecção de power-down└ // |||| -> TO: Flag de detecção do watchdog└ // ||| -> RI: Flag de reset por software└ // || -> não usado└

// | -> BOR: habilitação de detecção do Brown-out└

// -> IPEN: habilita modo de prioridade (1) ou modo de compatibilidade (0)└

Resposta (a letra X indica que não importa o valor) INTCON = 0b11100XXX;

RCON = 0b0XXXXXXX;

(20 pts Questão 3)  Escreva uma  função  de tratamento de interrupções. Esta função será 

responsável por armazenar o valor AD numa variável global para que o programa principal possa 

ler este valor posteriormente. A flag responsável por indicar fim de conversão é o bit 6 do registro 

(2)

PIR1.

Resposta:

//static não é essêncial neste caso, mas é uma boa pratica.

static int ValorADGlobal;

void UmNomeQualquer (void) interrupt 1 {

if (BitTst(PIR1,6)) // teste para saber se a flag do AD está ligada {

ValorADGlobal = LeVAlorAD();

BitClr(PIR1,6);

} }

(25 pts Questão 4) Monte um programa que: 1) recebe um caractere via comunicação serial  e se este valor for uma letra, exibe no LCD. Caso este character for um número, ele deve ser  exibido no display de 7 segmentos. 

unsigned char RecebeSerial(void);

void AtualizaDisplay(void);

void MudaDigito(unsigned char valor, unsigned char posicao); //valor em número normal void EnviaDadosLCD(unsigned char valor); //valor em codificação ASCII

Resposta:

#include "basico.h"

#include "config.h"

#include "serial.h"

#include "lcd.h"

#include "disp7seg.h"

void main (void) interrupt 0 {

unsigned char serialTemp;

InicializaSerial();

InicializaAD();

InicializaLCD();

InicializaDisplays();

for(;;) {

serialTemp = RecebeSerial();

if ((serialTemp >= 'a') && (serialTemp <= 'z')) {

EnviaDadosLCD(serialTemp);

}

else if ((serialTemp>=48) && (serialTemp<=57)) {

MudaDigito(serialTemp 48, 0);

}

AtualizaDisplay();

} }

(30 pts Questão 5) Na porta B estão ligadas 8 chaves. Faça uma biblioteca “chaves” que: 1) 

(3)

Inicializa as variáveis, 2) Realiza o debounce das teclas, 3) Retorna qual chave está ligada.

Resposta:

//--- // chaves.c

#include "basico.h"

#include "chaves.h"

char chaves;

void InicializaChaves (void) {

TRISB = 0xFF; //configura a porta b como entrada }

void DebounceChaves (void) {

static char debounce;

static char tempo;

if (debounce != PORTB) {

debounce = PORTB;

tempo = 10; //dez chamadas para realizar o debounce }

else {

tempo--; //se for igual diminui o tempo }

if (tempo == 0) //fim do tempo atualiza a var global {

chaves = debounce;

} }

char RetornaChave(void) {

if (BitTst(chaves,0)){ return 0; } if (BitTst(chaves,1)){ return 1; } if (BitTst(chaves,2)){ return 2; } if (BitTst(chaves,3)){ return 3; } if (BitTst(chaves,4)){ return 4; } if (BitTst(chaves,5)){ return 5; } if (BitTst(chaves,6)){ return 6; } if (BitTst(chaves,7)){ return 7; }

return 8; //se nenhuma estiver pressionada retorna 8 }

//--- // chaves.h

#ifndef CHAVES_H

#define CHAVES_H

void InicializaChaves (void);

void DebounceChaves (void);

char RetornaChave(void);

#endif //CHAVES_H

Referências

Documentos relacionados

Sem ater-se à distinção entre Física Clássica, Moderna e Contemporânea na listagem de Ostermann e Moreira (1998), é importante observar que, apesar do trabalho refletir o anseio

(1996) compararam o perí- odo de gestação de fêmeas da raça Nelore e cruzadas Tabapuã x Gir, no Estado de São Pau- lo-SP, estudando as relações do peso do bezerro ao nascer com

Mestrado em: Nutrição Humana ou Nutrição Clínica ou Saúde Coletiva ou Ciências da Saúde ou Ciências ou Saúde ou Alimentos e Nutrição e Desenvolvimento na

eficiente no controle das duas espécies, quando realizado no nível do solo e seguido da aplicação de herbicida específico, como o 2,4-D + picloram.. que o óleo diesel

For the cultivar used in this study, some results showed that it does not tolerate water deficit, especially during the reproductive stage, with significant reductions in

No Brasil, a falta de uma fiscalização mais rigorosa é uma das razões que possibilitam que certas empresas utilizem os estágios como forma de dispor de uma mão-de-obra

Dessa forma, diante das questões apontadas no segundo capítulo, com os entraves enfrentados pela Gerência de Pós-compra da UFJF, como a falta de aplicação de

O presente artigo tem o objetivo básico de oferecer uma introdução ao Quadro Comum Europeu de Referências para Línguas(Common European Framework of References for Languages: