Buscar

Programação do MSP430 em Linguagem C

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Continue navegando