30
Revisão da linguagem C. Estrutura de entrada e saída digital do MSP430 MSP430

MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Embed Size (px)

Citation preview

Page 1: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

• Revisão da linguagem C.

• Estrutura de entrada e saída digital do

MSP430

MSP430

Page 2: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Estrutura básica de um programa

Todo programa em consiste de uma ou mais

funções;

Todo programa deve conter pelo menos a função

primária “main”:

<declaração de variáveis globais> int main(void) { <declaração de variáveis locais>; <instruções>; return 0; }

Page 3: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Exemplo 1

float req; float resistencia_equivalente(float r1, float r2) { return (r1*r2)/(r1+r2); } int main(void) { req = resistencia_equivalente(100,10); return 0; }

Page 4: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Exercícios Cada grupo de entregar os exercícios no e-mail

[email protected]. Até as 12h00 do dia 03/10.

Basta entregar o arquivo principal e os headers se

necessário;

Nomeie o arquivo principal no formato:

GRUPO_(número do grupo)_EX_(número do exercício).c

Exemplo:

GRUPO_02_EX_4.c (exercício 4 do grupo 2)

Obs: coloque como assunto do e-mail o nome do arquivo.

Page 5: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Exercício 1

Faça um programa que tire a média de dois

números.

Page 6: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Tipos de Dados Os dados podem assumir cinco tipos básicos em C que

são: char: Caracter: O valor armazenado é um caractere. Caracateres geralmente

são armazenados em códigos (usualmente o código ASCII).

int: Número inteiro é o tipo padrão e o tamanho do conjunto que pode ser

representado normalmente depende da máquina em que o programa está

rodando.

float: Número em ponto flutuante de precisão simples. São conhecidos

normalmente como números reais.

double: Número em ponto flutuante de precisão dupla

void: Este tipo serve para indicar que um resultado não tem um tipo definido.

Uma das aplicações deste tipo em C é criar um tipo vazio que pode

posteriormente ser modificado para um dos tipos anteriores.

Page 7: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Modificadores dos Tipos Básicos:

Modificadores podem ser aplicados a estes tipos.

Estes modificadores são palavras que alteram o

tamanho do conjunto de valores que o tipo pode

representar.

long: permite que possam ser armazenados números inteiros

maiores.

unsigned: só números sem sinal possam ser armazenados

pela variável.

short: permite que possam ser armazenados números inteiros

menores.

signed: a variável reserva o bit de sinal.

Page 8: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Tipos de variáveis com

modificadores Tabela: Todos os Tipos de dados definidos para o MSP430

Tipo Tamanho em Bytes Faixa Mínima

char 1 -127 a 127

unsigned char 1 0 a 255

signed char 1 -127 a 127

int 2 -32.768a 32.767

unsigned int 2 0 a 65.536

signed int 2 -32.768a 32.767

short int 1 -127 a 127

unsigned short int 1 0 a 255

signed short int 1 -127 a 127

long int 4 -2.147.483.648 a 2.147.483.647

signed long int 4 -2.147.483.648 a 2.147.483.647

unsigned long int 4 0 a 4.294.967.295

float 4 Seis digitos de precisão

double 8 Dez digitos de precisão

long double 10 Dez digitos de precisão

Page 9: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Controle de Fluxo

Os comandos de controle de fluxo podem ser

divididos em dois grupos:

Instruções condicionais;

estrutura de repetição.

Page 10: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

If e else

if (condição 1) { instrução para condição 1; } else if (condição 2) { instrução para condição 2; } . . . else { instrução para nenhuma condição verdadeira; }

Page 11: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Switch switch(expressão) { case constante1: seqüência de comandos break; case constante2: seqüência de comandos break; case constante3: seqüência de comandos break; . . . default: seqüência de comandos }

Page 12: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

for

for(inicialização; condição ; incremento)

{

comando; } Exemplo: #include<io430.h>

int main(void)

{

int n;

for(n=1; n<=10; n++)

{

P1OUT ^= 0xff;

}

}

Page 13: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

While

while (condição)

{

Instrução; } Exemplo: #include<io430.h>

int main(void)

{

int n = 0;

while(n <=255)

{

P1OUT = n;

n = n+1;

}

}

Page 14: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

do-while

Do{

Instrução;

}while(condição) Exemplo: #include<io430.h>

int main(void)

{

int n = 255;

Do{

P1OUT = n;

}while(n>0)

}

Page 15: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

• Estrutura de entrada e saída digital do

MSP430

MSP430G2553

Page 16: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Digital I/O O MSP430 possui até oito portas digitais (P1 a P8);

Cada porta com até oito pinos de I/O;

Cada pino pode ser individualmente programado

como entrada ou saída;

Apenas as portas P1 e P2 possuem capacidade de

interrupção.

As interrupções podem ser programa em cada pino

individualmente tanto na borda de subida ou na borda

de descida.

Page 17: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

O MSP430G2553 possui apenas a

P1 e P2

Page 18: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Direction Registers PxDIR

Cada bit em cada registrador PxDIR seleciona a

direção do correspondente pino de I/O;

Bit = 0: O pino é selecionado como entrada

Bit = 1: O pino é selecionado como saída

Exemplo de código C: P1DIR = 0x01; //O bit 0 da P1 é selecionado como saída, //os outros bits são entrada P1DIR = P1DIR|0x01; //O bit 0 da P1 é selecionado como saída, //os outros bits continuam como estavam /*A linha de código acima também pode ser escrita como:*/ P1DIR |= 0x01;

Page 19: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Input Register PxIN

É um registrador de apenas leitura!

Cada bit em cada registrador PxIN reflete o valor

do sinal digital de entrada.

Bit = 0: A entrada é baixa;

Bit = 1: A entrada é alta.

Exemplo de código C: int x = P1IN; //Todo o byte é escrito na variável x. x = P1IN & 0x01; //A penas o bit 0 é selecionado

Page 20: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Output Registers PxOUT

Cada bit em cada registrador PxOUT seleciona o

valor de saída do correspondente pino de I/O;

Bit = 0: O pino é baixo

Bit = 1: O pino é alto

Exemplo de código C: P1OUT = 0x01; //O pino 0 da P1 é alto, //os outros bits são baixo P1OUT = P1OUT|0x01; //O pino 0 da P1 é alto, //os outros pinos continuam como estavam /*A linha de código acima também pode ser escrita como:*/ P1OUT |= 0x01;

Page 21: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Pullup/Pulldown Resistor Enable

Registers PxREN

Cada bit em cada registrador PxREN habilita ou desabilita os resistores de pullup/pulldown do correspondente pino de I/O; Bit = 0: Desabilita os resistores;

Bit = 1: Habilita os resistores;

Exemplo de código C: P1REN = 0x01; //Habilita os resistores do pino 0 da P1 //desabilitando os resistores dos outros //pinos P1REN = P1REN|0x01; //Habilita os resistores do pino 0 da P1, //os outros pinos continuam como estavam. /*A linha de código acima também pode ser escrita como:*/ P1REN |= 0x01;

Page 22: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Function Select Registers PxSEL

and PxSEL2

Habilitam ou desabilitam o uso de outros

periféricos no pino selecionado;

O datasheet deve ser consultado!

Page 23: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Funções alternativas dos pinos

Page 24: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Exercício 2

Com base no que foi explicado até agora crie um

programa que pisque o led vermelho (P1.0) 3

vezes e depois pisque o led verde (P1.6) 3 vezes

continuamente após pressionar o botão (P1.3).

Faça comentários quando necessário.

Page 25: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Interrupções da P1 e P2

Cada pino das portas P1 e P2 tem capacidade de

interrupção.

Todos os pinos da P1 interrompem para o

mesmo vetor de interrupção.

Todos os pinos da P2 interrompem para o outro

vetor de interrupção.

As interrupções podem ser configuradas pelos

registradores: PxIFG, PxIE, PxIES.

Obs.: Ao lidar com interrupções a flag de interrupções

globais (GIE) deve ser setada.

Page 26: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Interrupt Flag Registers P1IFG,

P2IFG

Cada bit desses registradores representa a uma

flag de interrupção para o correspondente bit da

porta.

Exemplo:

Se o quarto bit do registrador P1IFG tiver o

valor igual a 1 significa que ocorreu uma “borda”

no pino 5 da porta P1.

Bit = 0: nenhuma interrupção pendente

Bit = 1: interrupção pendente

Page 27: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Interrupt Edge Select Registers

P1IES, P2IES

Seleciona o tipo de borda a ser detectado para o

respectivo pino.

Bit = 0: O PxIFG é setado na borda de subida.

Bit = 1: O PxIFG é setado na borda de descida.

Page 28: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Interrupt Enable P1IE, P2IE

Habilita a interrupção no respectivo pino.

Bit = 0: A interrupção é desabilitada.

Bit = 1: A interrupção é habilitada.

Obs.: Após a rotina de interrupção o bit do P1IFG

deve ser limpado.

Page 29: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Exemplo #include <msp430g2553.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // P1.0 output P1OUT |= 0x01; // P1.0 set P1REN |= 0x08; // P1.3 pullup P1IE |= 0x08; // P1.3 interrupt enabled P1IES |= 0x08; // P1.3 Hi/lo edge P1IFG &= ~0x08; // P1.3 IFG cleared _BIS_SR(GIE); // Enter LPM4 w/interrupt while(1); } // Port 1 interrupt service routine #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1OUT ^= 0x01; // P1.0 = toggle P1IFG &= ~0x08; // P1.3 IFG cleared }

Page 30: MSP430 - DEMIC - FEEC - UNICAP |fpfrimer/Aulas/MSP430 1.pdf · Tipos de variáveis com modificadores Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo Tamanho em Bytes

Exercício 3

Utilize a interrupção da P1 para fazer os leds

piscarem (P1.0 e P1.6) quando o botão (P1.3) for

pressionado e pararem de piscar quando o botão

for pressionado novamente. Faça os comentários

necessários.