Prévia do material em texto
PROGRAMAÇÃO DO PROGRAMAÇÃO DO
MSP430 EM LINGUAGEM CMSP430 EM LINGUAGEM C
77oo P. Engenharia de Computação P. Engenharia de Computação
FACIT / 2018FACIT / 2018
LABORATÓRIO DE LABORATÓRIO DE
SOFTWARE BÁSICOSOFTWARE BÁSICO
Prof. Maurílio J. InácioProf. Maurílio J. Inácio
2
Programação do MSP430 em
Linguagem C
Introdução
Assim como qualquer outra família de
microcontroladores, a família MSP430 pode
ser programada em linguagem C.
A programação do MSP 430 em linguagem C
tem como principais benefícios, em relação a
linguagem assembly, maior flexibilidade,
maior portabilidade, capacidade de reuso de
código e facilidade na manutenção de código.
Apesar da linguagem C ser padronizada, a
programação do MSP430 em linguagem C
apresenta algumas particularidades.
3
Programação do MSP430 em
Linguagem C
Conceitos básicos
// Programa exemplo em linguagem C para MSP430
#include "msp430.h"
#define LED 0x01 // Led vermelho
#define BOTAO 0x08 // Botão S2
void delay(void);
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Para o watchdog timer
P1DIR |= LED; // Configura a I/O P1.0 como saída
P1DIR &= ~BOTAO; // Configura a I/O P1.3 como entrada
P1REN |= BOTAO; // Habilita o pull-up da I/O P1.3
while (1) {
if ((P1IN & BOTAO) == 0) { // Testa se o botão está pressionado
P1OUT |= LED; // Liga o Led
delay(); // Chama a função delay
}
else {
P1OUT &= ~LED; // Desliga o Led
}
}
}
void delay(void) {
unsigned int i;
i = 0xffff;
do i--;
while (i != 0);
}
4
Programação do MSP430 em
Linguagem C
Conceitos básicos
O programa dado como exemplo apresenta as
características comuns dos programas em C:
1) Cabeçalho com comentário sobre o
programa
// Programa exemplo ...
2) Inclusão de arquivos auxiliares
#include “msp430.h”
3) Definição de símbolos e constantes
#define LED 0x01
#define BOTAO 0x08
4) Declaração de protótipos de funções
void delay(void);
5
Programação do MSP430 em
Linguagem C
Conceitos básicos
6)Implementação da função principal
int main(void) {
// declaração de variávies locais
// código da função principal
}
7) Implementação de funções
void delay(void) {
// declaração de variávies locais
// código da função
}
6
Programação do MSP430 em
Linguagem C
Tipos de dados e variáveis
Tipos de dados utilizados em linguagem C:
• char – caractere – 8 bits, 1 byte.
• int – inteiro – 16 bits, 2 bytes.
• float – ponto flutuante – 32 bits, 4 bytes.
• double – ponto flutuante de dupla precisão –
64 bits, 8 bytes.
Modificadores de tipos:
• signed – números com sinal.
• unsigned – números sem sinal.
• short – tamanho menor que o especificado.
• long – tamanho maior que o especificado.
7
Programação do MSP430 em
Linguagem C
- Faixas de valores para tipos de dados em linguagem C (plataformas de 16 bits).
8
Programação do MSP430 em
Linguagem C
Tipos de dados e variáveis
Declaração de variáveis em linguagem C:
TIPO nome_da_variável, nome_da_variável, ...
• Exemplos
unsigned int tempo; // variável não inicializada
unsigned int tempo=100; // variável
inicializada
Escopo de variáveis:
• globais – acessíveis de qualquer ponto do
programa ou função.
• locais – acessíveis somente dentro das
funções onde foram declaradas.
9
Programação do MSP430 em
Linguagem C
Tipos de dados e variáveis
Modificadores de acesso a variáveis:
• const – a variável não pode ser alterada
(constante).
• volatile – a variável pode ser alterada.
Modificadores de armazenamento de variáveis:
• auto – define a variável como local.
• extern – define a variável como global e
acessível por módulos externos ao programa.
• static – define a variável como global, mas
acessível somente pelo módulo onde foi
declarada.
• register – mantém a variável armazenada em
um registrador da CPU e não na memória
RAM.
10
Programação do MSP430 em
Linguagem C
Operadores
Operador de atribuição: símbolo “=”
Operadores aritméticos:
Operador Ação
+ Adição
- Subtração (menos unário)
* Multiplicação
/ Divisão
% Módulo da divisão (resto)
++ Incremento
-- Decremento
11
Programação do MSP430 em
Linguagem C
Operadores
Operadores relacionais:
Operador Ação
> Maior que
>= Maior que ou igual
< Menor que
<= Menor que ou igual
== Igual
!= Diferente
12
Programação do MSP430 em
Linguagem C
Operadores
Operadores lógicos:
Operador Ação
&& AND
& AND bit a bit
|| OR
| OR bit a bit
! NOT
^ OR exclusivo bit a bit
~ Complemento de um
>> Deslocamento à direita
<< Deslocamento à esquerda
13
Programação do MSP430 em
Linguagem C
Operadores
Operadores de memória ou de ponteiro:
Outros operadores:
Operador Ação
& Retorna o endereço do operando
* Retorna o conteúdo do endereço do operando
Operador Ação
? Operador ternário condicional
, Separador de expressões
. Separador de estruturas
-> Ponteiro de estruturas
(tipo)expressão Operador modelagem de dados (cast)
14
Programação do MSP430 em
Linguagem C
Comandos de seleção
IF / ELSE
if (condição)
{
// comandos para condição verdadeira
}
else
{
// comandos para condição falsa
}
15
Programação do MSP430 em
Linguagem C
Comandos de seleção
SWITCH
switch (variável)
{
case constante1:
// comandos; break;
case constante2:
// comandos; break;
...
default:
// comandos; break;
}
16
Programação do MSP430 em
Linguagem C
Comandos de repetição
WHILE
while (condição)
{
// comandos
}
DO/WHILE
do
{
// comandos
}while (condição);
17
Programação do MSP430 em
Linguagem C
Comandos de repetição
FOR
for (inicialização; condição; incremento /
decremento)
{
// comandos
}
18
Programação do MSP430 em
Linguagem C
Comandos de desvio
BREAK
• Interrompe um comando de seleção ou
repetição.
CONTINUE
• Força um comando de repetição a executar a
pŕoxima iteração.
GOTO
• Desvia para uma linha do programa identificada
por um rótulo (label).
RETURN
• Retorna de uma chamada de função.
19
Programação do MSP430 em
Linguagem C
Funções
Funções em linguagem C são trechos de códigos
similares às subrotinas em linguagem Assembly,
mas com algumas diferenças.
Formato geral de uma função:
{tipo_da_função} nome_da_função ({parâmetros})
{
// comandos
...
}
20
Programação do MSP430 em
Linguagem C
Manipulação de E/S
Registrador PxDIR: configura um pino de E/S como
entrada (bit 0) ou como saída (bit 1).
• Exemplo
#define LED 0x01
#define BOTAO 0x08
P1DIR |= LED; // Configura P1.0 como saída
P1DIR &= ~BOTAO; // Configura P1.3 como entrada
21
Programação do MSP430 em
Linguagem C
Manipulação de E/S
Registrador PxREN: desabilita (bit 0) ou habilita (bit
1) o resistor de pull-up/pull-down de um pino de E/S.
• Exemplo
#define BOTAO 0x08
P1REN |= BOTAO; // Habilita o pull-up em P1.3
22
Programação do MSP430 em
Linguagem C
Manipulação de E/S
Registradores PxIN e PxOUT: permitem a leitura ou a
escrita em um pino de E/S, respectivamente.
• Exemplo
#define LED 0x01
#define BOTAO 0x08
if ((P1IN & BOTAO) == 0) { // Lê a porta P1
P1OUT |= LED; // Escreve 1 em P1.0
}
else {
P1OUT &= ~LED; // Escreve 0 em P1.0
}
23
Programação do MSP430 em
Linguagem C
Interrupções
Os microcontroladores MSP430 utilizam um
esquema de interrupções vetoradas com
prioridade fixa.
As prioridades são definidas pela posição dos
módulos em uma conexão em cadeia.
Quanto mais próximo o módulo da entrada
CPU/NMIRS, maior é a prioridade.
Existem três tipos de interrupção:
• Reset do sistema.
• Interrupções não mascaráveis.
• Interrupções mascaráveis.
24
Programação do MSP430 em
Linguagem C
Interrupções
- Lógica de interrupção dosmicrocontroladores MSP430.
25
Programação do MSP430 em
Linguagem C
Interrupções
Reset do sistema: é uma interrupção que ocorre
pela ação dos circuitos power-on reset (POR),
power-up clear (PUC) e brownout reset (BOR).
Interrupções não-mascaráveis: são interrupções
que não podem ser desabilitadas, ocorrem por
ativação do pino RST/NMI, falha do oscilador ou
violação do acesso à memória flash.
Interrupções mascaráveis: são interrupções que
podem ser desabilitadas, ocorrem por ação de
algum módulo periférico (portas, timer,
conversor A/D, etc.).
26
Programação do MSP430 em
Linguagem C
Interrupções
Para utilização de interrupções é necessário que:
• o bit de habilitação geral de interrupções (bit
GIE do registrador STATUS) esteja setado;
• o bit de habilitação de interrupção do módulo
específico (por exemplo, o bit PxIE das
portas) esteja setado;
• uma função de tratamento de interrupção
seja escrita e associada ao vetor de
interrupção do módulo expecífico (por
exemplo, usando a diretiva #pragma
vector=PORTx_VECTOR para as portas).
27
Programação do MSP430 em
Linguagem C
Interrupções
Declaração de vetores de interrupção
/************************************************************
* Interrupt Vectors (offset from 0xFFE0)
************************************************************/
#define PORT1_VECTOR (0x0004) /* 0xFFE4 Port 1 */
#define PORT2_VECTOR (0x0006) /* 0xFFE6 Port 2 */
#define ADC10_VECTOR (0x000A) /* 0xFFEA ADC10 */
#define USCIAB0TX_VECTOR (0x000C) /* 0xFFEC USCI A0/B0 Transmit */
#define USCIAB0RX_VECTOR (0x000E) /* 0xFFEE USCI A0/B0 Receive */
#define TIMER0_A1_VECTOR (0x0010) /* 0xFFF0 Timer0)A CC1, TA0 */
#define TIMER0_A0_VECTOR (0x0012) /* 0xFFF2 Timer0_A CC0 */
#define WDT_VECTOR (0x0014) /* 0xFFF4 Watchdog Timer */
#define TIMER1_A1_VECTOR (0x0018) /* 0xFFF8 Timer1_A CC1-4, TA1 */
#define TIMER1_A0_VECTOR (0x001A) /* 0xFFFA Timer1_A CC0 */
#define NMI_VECTOR (0x001C) /* 0xFFFC Non-maskable */
#define RESET_VECTOR (0x001E) /* 0xFFFE Reset [Highest Priority] */
28
Programação do MSP430 em
Linguagem C
Interrupções
Exemplo
// Inclusão de bibliotecas
#include "msp430.h"
// Definição de rótulos
#define LED 0x01 // Led vermelho
// Função main()
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Para o watchdog timer
P1DIR |= LED; // Configura a I/O P1.0 como saída
CCTL0 = CCIE; // Habilita interrupção de comparação do Timer A
TACTL = TASSEL_2+MC_3+ID_3; // Configura o clock do Timer A (125 KHz)
CCR0 = 31250; // Define o valor de comparação do Timer A
_BIS_SR(GIE); // Habilita as interrupções
while(1);
}
// Função da interrupção do Timer A
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
P1OUT = P1OUT ^ LED; // Inverte o estado do Led
}
Slide 1
Slide 2
Slide 3
Slide 4
Slide 5
Slide 6
Slide 7
Slide 8
Slide 9
Slide 10
Slide 11
Slide 12
Slide 13
Slide 14
Slide 15
Slide 16
Slide 17
Slide 18
Slide 19
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28