Sunteți pe pagina 1din 2

Universidade Federal de Ouro Preto

Instituto de Ciências Exatas e Biológicas – Departamento de Computação


BCC425 – Sistemas Embutidos
Lista: 1
Semestre: 2019/1 Professor: Eduardo Luz

1. Considere que a porta D de uma determinado microcontrolador genérico está sendo


utilizada conforme a configuração da Figura 1. Considere que o sentido dos pinos da porta
tenham que ser configurados, sendo assim, para o exemplo da Figura 1, cinco deles são
pinos de saídas (pinos 0, 3, 5, 6 e 7) e três deles são pinos de entrada (pinos 1, 2 e 4).
Este microcontrolador tem registradores de oito bits. O registrador REG_PORTD_DIR é
responsável por configurar a direção dos pinos, de forma que quando um bit do registrador
está em zero, o respectivo pino é um pino de saída. Quando um bit está em 1, o respectivo
pino é entrada. O registrador REG_PORTD_DIR está mapeado no endereço 0x00ff4466
no mapa de memória do microcontrolador. O registrador REG_PORTD é o responsável
pela interface com a porta e quando um determinado bit deste registrador está em nível 1 o
respectivo pino recebe 5 Volts. Quando o pino está em lógica 0, o pino recebe 0 Volts. Este
registrador está mapeado no mapa de memória do microcontrolador com o endereço
0x00ff4567. Escreve um código para colocar todos os LEDS em nível alto quando o botão
associado ao pino 1 for pressionado. Escreva uma API (application programming interface)
para facilitar a escrita do software. A API deve ter três funções:

a. void pinMode(pin, mode); O parâmetro pin deve receber o numero referente ao


pino da porta (0 a 7). Cada bit do registrador REG_PORTD_PIN está associado a
um pino da porta. A variável mode deve receber um tipo de dado ENUM (ex. enum
mode_enum {OUTPUT=0, INPUT}; typedef enum mode_enum pin_mode;) Esta
função deve escrever no registrador REG_PORTD_DIR de forma a configurar
APENAS o pino especificado pelos parâmetros da função, sem desconfigurar os
outros pinos.

b. void digitalWrite(pin, value); O parâmetro pin deve receber o número referente ao


pino da porta (0 a 7). Cada bit do registrador REG_PORTD está associado a um
pino da porta. O estado deste bit deve determinar o nível de tensão dos pinos. Esta
função deve escrever no registrador REG_PORTD de forma a configurar APENAS
o pino especificado pelos parâmetros da função, sem desconfigurar os outros
pinos. A variável valor deve receber um tipo de dado enum. (ex.: enum
value_enum {HIGH=1, LOW}; typedef enum value_enum pin_value;)

c. pin_value digitalRead(pin); O parâmetro pin deve receber o número referente ao


pino da porta (0 a 7). Cada bit do registrador REG_PORTD está associado a um
pino da porta. Este função deve verificar (ler) o valor do bit do registrador
associado ao parâmetro de entrada (pin) e retornar tipo de dado enum, referente
ao estado do.

Figura 1

1
Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas – Departamento de Computação
BCC425 – Sistemas Embutidos
Lista: 1
Semestre: 2019/1 Professor: Eduardo Luz

2. Num dado sistema, a posição de memória de valor 0xF34 mapeia um módulo interno do
microcontrolador dedicado a medir corrente (registrador para um sensor de corrente). O
registrador associado ao módulo tem 8 bits.
Sabendo-se 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 assu
mir o valor zero ou negativo, Tome as devidas precauções para evitar
erros de cálculo. A resistência é sempre positiva. Equação para resistência: R = V ÷ I .

#define VAR (*(unsigned char*)0x00F) //exemplo de variável de 8 bits para acesso ao


endereço 0x00F

#define PORTA (*(unsigned char*)0xF80);

3. Explique o que a seguinte macro faz:

#define BitTst(var,pos) (var&(1<<pos));

Exemplo de uso:

if( BitTst(PORTA,2) ) {
...
}

4. Apresente o resultado das seguintes operações:

result1 = 0xF0 & 0x0F; result3 = 0xAA | 0x55; result5 = !0x0F;


result2 = 0xF0 && 0x0F; result4 = 0xAA || 0x55; result6 = ~0x0F;

5. Crie um programa que armazene o valor 0 em todos os endereços de memória , de 0x000


até 0x3FF.
6. A linguagem C possui alguns modificadores de acesso. Explique o conceito do modificador
“volatile“.
7. As variáveis em C estão organizadas em classes : auto, extern, register e static. Explique
cada uma delas.
8. Você está fazendo uma leitura de um conversor analógico para digital. O conversor é de
apenas 10 bits e a arquitetura do sistema possui registradores de 8 bits. Assim, dois
registradores são utilizados para o armazenamento final da conversão, e o resultado é
armazenado a direita. Como formatar o resultado em um tipo de dado inteiro não sinalizado
de 32 bits? Suponha que o valor nos registradores seja:
Registrador 1: “01010101” e Registrador 2: “11101110”.

S-ar putea să vă placă și