Atividade 6: Operando com vetores no PIC
O objetivo desta atividade é exercitar o uso de endereçamento indireto no
PIC.
- Escreva um programa para somar dois vetores v1 e v2 (de 1 byte/entrada),
deixando o resultado em v1 (i.é: v1 + v2 => v1).
V. deve usar endereçamento indireto num laço,
tanto para inicializar os vetores, quanto para fazer a soma dos vetores.
Defina o tamanho dos vetores através de
uma constante, a fim de tornar seu programa mais geral.
Para testar o programa inicialize os dois vetores com os 4 dígitos menos
significativos do seu RA, e para facilitar a depuração coloque o vetor v1 a partir
da posição de memória 30h e o vetor v2 a partir de 40h; desta forma eles serão
facilmente identificados no simulador (utlilize as diretivas vistas em aula,
cblock, endc, para este fim).
- Escreva um programa para fazer o produto escalar de dois vetores
v1 e v2 utilizando o programa de multiplicação de
8x8 bits
na página de exemplos do PIC (entenda o funcionamento desse programa!).
O produto escalar deve ser calculado com 16 bits
de precisão.
Para testar o programa utilize os vetores v1 e v2 da parte 1, acima.
Utilize a calculadora do Windows para obter o resultado do produto escalar
em hexadecimal e comparar com o resultado do programa.
Sugestão: a fim de evitar que a multiplicação e a soma de 16 bits utilizem
posições fixas de memória, escreva macros para cada uma dessas operações,
tornando-as de uso geral.
- Alternativa para Parte 2, acima:
Ecreva um programa contendo um rotina de interrupção para o TIMER 0 do PIC.
O Timer 0 deve operar
via contagem de ciclos de instruções (modo timer) com razão do pre-scaler
1:2. A rotina de interrupção deve salvar/restaurar o contexto do programa
(use as dicas do programa exemplo int.asm visto em aula)
e deve incrementar uma variável para contar as interrupções, ctint.
O programa principal deve ficar num laço incrementando um contador
ctnormal e verificando o valor de ctint. Quando ctint
atingir o valor 2 o programa deve sair do laço e executar a instrução
de power dowm, sleep.
V. deve testar o programa usando o modo animate (Ctl-F9) do simulador,
que permite
visualizar dinamicamente as mudanças da memória e o andamento do programa.
Quando a instrução sleep for executada, interrompa a simulação
teclando F5. A instrução sleep automaticamente desliga o timer e
equivale a um halt em outras CPUs.
Observação colateral: o processador PIC só sai do sleep quando ocorre uma interrupção externa
(via um dos pinos RB, conforme visto no exemplo int.asm ou quando o temporizador
de Watch Dog Timer expira, caso previamente habilitado).
O que V. deve ler do manual do PIC (7 páginas): descrição dos
registradores STATUS, OPTION_REG e INTCON (Cap 2, pgs 18-20); descrição geral
de interrupções no PIC (12.10, pgs 129-130); descrição do módulo Timer 0 (5.0,
pgs 47-48).
V. deve submeter: uma impressão do programa no formato
.lst (landscape) e fazer uma demonstração no laboratório,
utilizando o simulador do MPLAB.
Data de submissão: 03/06/02
Prazo de Entrega: Parte 1: 12/06/02 Parte 2 (ou Parte 3): 19/06/02