Atividade 6:  Operando com vetores no PIC

O objetivo desta atividade é exercitar o uso de endereçamento indireto no PIC.

  1. 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).

  2. 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.

  3. 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