Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

1. As diretrizes do Assembly têm por finalidade melhorar o desenvolvimento do código. Elas serão avaliadas e substituídas pelo compilador antes de efetuar a tradução. Qual alternativa apresenta uma forma válida de substituir os trechos do código com nomes e em qual painel/aba é possível visualizar a tradução das instruções no MPLAB X IDE? 
Resposta:
​​​​​​​A tradução pode ser conferida no painel de tarefas, na aba "program memory".
2. O compilador faz a análise sintática do código antes de traduzi-lo para a linguagem de máquina. O código a seguir apresenta um único erro de compilação. Que erro é esse?
Resposta:
A instrução BSF requer mais um parâmetro que especifique o bit a ser manipulado.
· Os registradores podem ser chamados diretamente por seus endereços de memória sem problemas.
· A instrução CALL desvia o programa para um endereço de memória armazenando o endereço atual na pilha; esse processo constitui uma sub-rotina mesmo que não tenha um rótulo especificado.
· Podem ser criadas várias sub-rotinas e chamadas a qualquer momento.
· A sintaxe correta de BSF é: BSF f, b. Onde f é o endereço do registrador, e b é o índice do bit a ser ativado.
· Os saltos de memória podem ser dados em qualquer direção desde que para endereços válidos e desde que a pilha tenha espaço suficiente para retornar depois.
3. As portas de entrada e saída digital são endereços de memória reservados ao uso deste módulo e têm cada um de seus bits associado a um pino do microcontrolador, de forma que mudanças em um dos bits ocasionarão mudança de tensão no pino quando configurados como saída, e mudanças de tensão ocasionarão mudanças de valor na memória quando configurados como entrada. Considere:
​​​​​​​Levando em conta o conjunto de instruções da imagem, determine qual dos códigos a seguir obedecerá ao seguinte comportamento: o pino 0 do módulo PORTA será ativado se, ao testar o estado do pino 0 do módulo PORTB, for detectado nível baixo; do contrário, será desativado.​​​​​​​​​​​​​​
Resposta:
· O BTFSC pula uma linha se o pino 0 de PORTB for 0; do contrário, BCF desligará o pino 0 de PORTA.
O BTFSS pula uma linha se o pino 0 de PORTB for 1; do contrário, BSF ativará o pino 0 de PORTA.
· Ambos os testes são necessários, porque, caso o primeiro teste seja falso e o código não salte uma linha, poderiam ser executados dois comandos opostos em sequência BCF e BSF. Além disso, todos os testes devem ser feitos no mesmo bit.
4. Um conversor analógico-digital de 8 bits retorna em seu registrador valores entre 0 e 255 para representar a tensão detectada no pino de entrada do módulo. Considerando o conjunto de instruções a seguir, determine o código que poderia ser utilizado no sistema de um termostato de aquário, configurado para que, quando o valor de um sensor de temperatura (SENSOR_ANALOG, endereço 256) seja menor que 100, um relé feche o contato ativando o aquecimento. Do contrário, ele deverá ser desligado.
Resposta:
5. O código compilado é traduzido para a linguagem de máquina e preenchido com dados necessários ao envio do arquivo para o gravador. No padrão Intel HEX, os oito primeiros caracteres (excetuando-se o ":") são utilizados para informar o gravador a respeito do tipo e do tamanho do pacote. Dois primeiros para o tamanho do código apenas (em bytes), quatro para o endereço inicial, e dois para o tipo de dado (0x00 para gravação normal). Os caracteres seguintes representam o código, sendo uma instrução para cada quatro dígitos, porém com os pares trocados de posição. Os dois caracteres finais representam o complemento de 2 da soma de todos os bytes anteriores, e o valor é limitado (truncado) para considerar apenas um byte (o menos significativo como válido). Qual será o código gerado pelo microcontrolador a partir da sequência a seguir?
Resposta:
:080030001030710203183028A2
· O que resultaria em um conjunto de dados:
· 1030710203183028
A estes devem ser acrescidos a quantidade de bytes de dados no pacote (8, sendo 2 para cada instrução), sempre em hexadecimal, além do ":": :08
· Esse valor é seguido pelo endereço inicial de gravação, determinado pelo ORG 0x0030:
:080030
· Antes do pacote é adicionado mais um par de 0s para indicar uma gravação normal:
:08003000
Resultando em:
:080030001030710203183028
Agora, basta somar cada um dos bytes (pares de hexadecimal), truncar o resultado utilizando apenas um byte de resultado e efetuar o complemento de 2.
Soma: 0816 + 0016 + 3016 + 0016 + 1016 + 3016 + 7116 + 0216 + 0316 + 1816 + 3016 + 2816 = 15E16
Truncamento: 15E16 -> 5E16
Complemento de 2:
FF16 - 5E16 + 116 = A116 + 0116 = A216
O valor A216 servirá de validação do pacote e será adicionado ao final dele. O resultado final é:
· :080030001030710203183028A2
Desafio
O microcontrolador executa uma nova instrução de seu código a cada ciclo de máquina. Este, por sua vez, corresponde a uma sequência de pulsos de clock (quatro, se considerar os microcontroladores PIC). Quando é necessária uma contagem de tempo, podendo o microcontrolador aguardar a contagem sem prejudicar o andamento do código, pode-se utilizar o próprio tempo de um ciclo de máquina para tal finalidade. É para isso que os microcontroladores têm uma função que não executa nada, apenas gasta um ciclo de máquina: a função NOP.
Para quantidades longas, apenas o NOP não será suficiente, sendo necessário utilizar uma estrutura de repetição de um trecho de código.
Considerando um microcontrolador com registradores de 8 bits e utilizando um clock de 4MHz, proponha o desenvolvimento de um código-fonte que obedeça às seguintes regras:
1) Tenha um conjunto de instruções que prendam o código-fonte por 1 segundo.
2) A solução deverá ocupar quantidade de memória reduzida, o que impede o uso de vários comandos NOP, que extrapolariam o tamanho de memória disponível.
Resposta:
Com 4MHz de frequência e um ciclo de máquina de 4 pulsos de clock, tem-se um ciclo de máquina de 1MHz, ou seja, uma instrução a cada microssegundo.
Será necessário 1 milhão de instruções até que se passe um segundo.
Para evitar o uso de 1 milhão de comandos NOP, o que consumiria toda a memória do microcontrolador, cria-se uma estrutura de repetição seguindo-se estes passos:
Deve-se criar uma estrutura que decremente um valor da memória até que este chegue a zero (situação detectável no registrador de STATUS). Assim, basta controlar o valor inicial.
Como o microcontrolador tem apenas registradores de 8 bits, o maior valor armazenável em um registrador é 255.
Pode-se criar uma cascata de operação, em que dois ou mais registradores são decrementados sempre que o anterior atingir o valor zero, momento em que será reiniciado caso o registrador de peso maior ainda não seja nulo. Essa situação multiplica a contagem. Se o primeiro registrador terminará após 256 ciclos de máquina, o segundo demandará 65.536.
Mantêm-se, no entanto, valores que criem contagens mais próximas do múltiplo necessário, nesse caso 250 para cada registrador, resultando no total de 62.500 ciclos de máquina.
1.000.000 / 62.500 = 16
Logo, deverá haver um terceiro registrador para contar sempre que os outros dois chegarem a zero. Ao fim dessa terceira intervenção é que se tem o momento quando 1 segundo se passou desde a última intervenção.
image6.jpeg
image7.png
image8.png
image1.png
image2.png
image3.png
image4.jpeg
image5.png

Mais conteúdos dessa disciplina