segunda-feira, 16 de julho de 2012

Programação em assembly para o MSP430


            É fato que a grande maioria dos programadores não gosta de programar microcontroladores em assembly. Contudo, o conhecimento de como as coisas funcionam nesta linguagem torna possível a otimização de código, solução de problemas e o desenvolvimento de programas que seriam muito difíceis, se não impossíveis, de serem realizados com linguagens de alto nível.
            Neste artigo apresento um programa feito em assembly para fazer o led vermelho da LaunchPad piscar. Apesar de ser bastante simples, este exemplo tem como objetivo mostrar os conceitos básicos para a criação de projetos em assembly no CCS v5.2 para os microcontroladores da linha MSP430.



Criando um projeto no CCS

            Para criar um projeto basta ir ao menu File→New→CCS Project. Feito isto, aparecera a janela New CCS Project (Figura 1), onde deve-se colocar as informações básicas do projeto.

Figura 1: Configuração de um projeto em assembly.

             O campo Project Name deve conter o nome do projeto (para este exemplo, coloquei PiscaLed). A opção Output Type é utilizada para informar se os arquivos gerados serão executados no microcontrolador (opção Executable), se são uma biblioteca, ou outro tipo. Como o desejado é rodar o programa na LaunchPad, selecione a opção Executable.
            O diretório onde o CCS criará os arquivos pode ser definido através da opção Location, porém, prefiro deixá-los no diretório padrão, que é definido na primeira vez que o CCS é executado.
            O próximo passo é selecionar a família e o modelo do microcontrolador. Eu uso o MSP430G2553, mas o código pode ser adaptado para qualquer outro da linha MSP430G sem muitas modificações.
            Para utilizar a programação em assembly, é necessário selecionar o template Empty Assembly-only Project, pois os outros templates são para programação em C ou utilizando o Grace.
            Basta então clicar em Finish e o projeto será criado.

Código do Pisca-Led

            Para programar o microcontrolador e necessário digitar o código em um arquivo com a extensão .asm, porém, o CCS não cria este arquivo automaticamente, sendo dever do programador adicioná-lo ao projeto. Então, clique com o botão direito do mouse em cima do projeto “PiscaLed” no Poject Explorer e vá em New→File. Em seguida, de um nome ao arquivo a ser criado, lembrando que este deve conter .asm no final do nome. No meu caso, o nome utilizado foi main.asm.
            Com o arquivo aberto no editor, copie e cole o código abaixo.


*********************************************************************************
*             Pisca-Led Para a LaunchPad
*
*             Descrição: Faz com que o led vermelho da placa pisque.
*
*             Compilado com: Code Composer Studio v5.2;
*             Microcontrolador: MSP430G2553;
*
*             David Krepsky - 23/06/2012
*********************************************************************************

;--------------------------------------------------------------------------------
;              Includes
;--------------------------------------------------------------------------------

                                               .cdecls C,"msp430.h"

;--------------------------------------------------------------------------------
;              Definições
;--------------------------------------------------------------------------------

RLED                     .equ        BIT0                                                                      ; Led vermelho

;--------------------------------------------------------------------------------
;   Rotina Principal
;--------------------------------------------------------------------------------

                                               .text
Main:
                                               mov.w   #WDTPW + WDTHOLD, &WDTCTL  ; Para o watchdog timer.
                                               bis.b       #RLED, &P1DIR  ; Configura o pino do led vermelho para saída.

MAINLOOP:
                                               mov                        #50000, R15                          ; Delay
D_1                                        dec.w      R15
                                               jnz                          D_1

                                               xor.b       #RLED, &P1OUT                ; Comuta o estado do led vermelho.
                                               jmp     MAINLOOP             ; Volta ao laço principal.


;--------------------------------------------------------------------------------
;   Vetores de Interrupção
;--------------------------------------------------------------------------------

            .sect           ".reset"  ; MSP430 RESET Vector
            .retain
            .short  Main

;--------------------------------------------------------------------------------
;   Fim
;--------------------------------------------------------------------------------

            .end

Gravando e executando o programa

            Após conectar a LaunchPad ao computador, clique no menu Run→Debug (ou pressione a tecla F11). Isto fará com que o código seja compilado e o firmware gravado no microcontrolador. Caso o CCS não reconheça a placa, desconecte e conecte novamente a LaunchPad ao computador e clique na opção Debug novamente.
            Se tudo deu certo até aqui, o CCS entrará na perspectiva de debug. Para executar o código na placa clique no botão Resume (ou F8). O led vermelho da placa começará a piscar.


Referências
·        MSP430 Assembly Language Tools v4.1 (SLAU131G).
·        MSP430x2xx Family Users Guild (SLAU144I).


Um comentário:

  1. Olá como vc determinou a frequencia de oscilação do LED.

    Tem 50000. Como eu faço pra saber então quanto tempo fica ligado e quanto tempo fica desligado

    ResponderExcluir