Escolar Documentos
Profissional Documentos
Cultura Documentos
UNIFEI 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 7654210 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 colocandose o valor 1 (um) e desabilitados colocandose 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
PIR1.
Resposta:
(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"
(30 pts Questão 5) Na porta B estão ligadas 8 chaves. Faça uma biblioteca “chaves” que: 1)
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
}