Baixe o app para aproveitar ainda mais
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
Compartilhar