Sie sind auf Seite 1von 30

MSP430

Reviso da linguagem C. Estrutura de entrada e sada digital do MSP430

Estrutura bsica de um programa


Todo programa em consiste de uma ou mais

funes; Todo programa deve conter pelo menos a funo primria main:
<declarao de variveis globais> int main(void) { <declarao de variveis locais>; <instrues>; return 0; }

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; }

Exerccios
Cada grupo de entregar os exerccios no e-mail

fpfrimer@gmail.com. At as 12h00 do dia 03/10. Basta entregar o arquivo principal e os headers se necessrio; Nomeie o arquivo principal no formato:
GRUPO_(nmero do grupo)_EX_(nmero do exerccio).c

Exemplo: GRUPO_02_EX_4.c (exerccio 4 do grupo 2) Obs: coloque como assunto do e-mail o nome do arquivo.

Exerccio 1

Faa um programa que tire a mdia de dois

nmeros.

Tipos de Dados
Os dados podem assumir cinco tipos bsicos em C que

so:
char: Caracter: O valor armazenado um caractere. Caracateres geralmente

so armazenados em cdigos (usualmente o cdigo ASCII). int: Nmero inteiro o tipo padro e o tamanho do conjunto que pode ser representado normalmente depende da mquina em que o programa est rodando. float: Nmero em ponto flutuante de preciso simples. So conhecidos normalmente como nmeros reais. double: Nmero em ponto flutuante de preciso dupla void: Este tipo serve para indicar que um resultado no tem um tipo definido. Uma das aplicaes deste tipo em C criar um tipo vazio que pode posteriormente ser modificado para um dos tipos anteriores.

Modificadores dos Tipos Bsicos:


Modificadores podem ser aplicados a estes tipos.

Estes modificadores so palavras que alteram o tamanho do conjunto de valores que o tipo pode representar.
long: permite que possam ser armazenados nmeros inteiros

maiores. unsigned: s nmeros sem sinal possam ser armazenados pela varivel. short: permite que possam ser armazenados nmeros inteiros menores. signed: a varivel reserva o bit de sinal.

Tipos de variveis com modificadores


Tabela: Todos os Tipos de dados definidos para o MSP430 Tipo char unsigned char signed char int Tamanho em Bytes 1 1 1 2 Faixa Mnima -127 a 127 0 a 255 -127 a 127 -32.768a 32.767

unsigned int
signed int short int

2
2 1

0 a 65.536
-32.768a 32.767 -127 a 127

unsigned short int


signed short int long int signed long int unsigned long int float double long double

1
1 4 4 4 4 8 10

0 a 255
-127 a 127 -2.147.483.648 a 2.147.483.647 -2.147.483.648 a 2.147.483.647 0 a 4.294.967.295 Seis digitos de preciso Dez digitos de preciso Dez digitos de preciso

Controle de Fluxo
Os comandos de controle de fluxo podem ser

divididos em dois grupos:


Instrues condicionais; estrutura de repetio.

If e else
if (condio 1) { instruo para condio 1; } else if (condio 2) { instruo para condio 2; } . . . else { instruo para nenhuma condio verdadeira; }

Switch
switch(expresso) { case constante1: seqncia de comandos break; case constante2: seqncia de comandos break; case constante3: seqncia de comandos break;
. . . default: seqncia de comandos }

for
for(inicializao; condio ; incremento) { comando; } Exemplo: #include<io430.h> int main(void) { int n; for(n=1; n<=10; n++) { P1OUT ^= 0xff; } }

While
while (condio) { Instruo; } Exemplo: #include<io430.h> int main(void) { int n = 0; while(n <=255) { P1OUT = n; n = n+1; } }

do-while
Do{

Instruo; }while(condio) Exemplo:


#include<io430.h>

int main(void) { int n = 255; Do{ P1OUT = n; }while(n>0) }

MSP430G2553

Estrutura de entrada e sada digital do MSP430

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 sada; Apenas as portas P1 e P2 possuem capacidade de interrupo. As interrupes podem ser programa em cada pino individualmente tanto na borda de subida ou na borda de descida.

O MSP430G2553 possui apenas a P1 e P2

Direction Registers PxDIR


Cada bit em cada registrador PxDIR seleciona a

direo do correspondente pino de I/O;


Bit = 0: O pino selecionado como entrada Bit = 1: O pino selecionado como sada

Exemplo de cdigo C:
P1DIR = 0x01; //O bit 0 da P1 selecionado como sada, //os outros bits so entrada

P1DIR = P1DIR|0x01; //O bit 0 da P1 selecionado como sada, //os outros bits continuam como estavam /*A linha de cdigo acima tambm pode ser escrita como:*/ P1DIR |= 0x01;

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 cdigo C:
int x = P1IN; x = P1IN & 0x01; //Todo o byte escrito na varivel x. //A penas o bit 0 selecionado

Output Registers PxOUT


Cada bit em cada registrador PxOUT seleciona o

valor de sada do correspondente pino de I/O;


Bit = 0: O pino baixo Bit = 1: O pino alto

Exemplo de cdigo C:
P1OUT = 0x01; //O pino 0 da P1 alto, //os outros bits so baixo

P1OUT = P1OUT|0x01; //O pino 0 da P1 alto, //os outros pinos continuam como estavam /*A linha de cdigo acima tambm pode ser escrita como:*/ P1OUT |= 0x01;

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 cdigo 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 cdigo acima tambm pode ser escrita como:*/ P1REN |= 0x01;

Function Select Registers PxSEL and PxSEL2


Habilitam ou desabilitam o uso de outros

perifricos no pino selecionado; O datasheet deve ser consultado!

Funes alternativas dos pinos

Exerccio 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 aps pressionar o boto (P1.3). Faa comentrios quando necessrio.

Interrupes da P1 e P2
Cada pino das portas P1 e P2 tem capacidade de

interrupo. Todos os pinos da P1 interrompem para o mesmo vetor de interrupo. Todos os pinos da P2 interrompem para o outro vetor de interrupo. As interrupes podem ser configuradas pelos registradores: PxIFG, PxIE, PxIES.
Obs.: Ao lidar com interrupes a flag de interrupes globais (GIE) deve ser setada.

Interrupt Flag Registers P1IFG, P2IFG


Cada bit desses registradores representa a uma

flag de interrupo 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 interrupo pendente
Bit = 1: interrupo pendente

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.

Interrupt Enable P1IE, P2IE


Habilita a interrupo no respectivo pino.
Bit = 0: A interrupo desabilitada. Bit = 1: A interrupo habilitada.

Obs.: Aps a rotina de interrupo o bit do P1IFG deve ser limpado.

Exemplo
#include <msp430g2553.h>
void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01; P1OUT |= 0x01; P1REN |= 0x08; P1IE |= 0x08; P1IES |= 0x08; P1IFG &= ~0x08; _BIS_SR(GIE); while(1); } // Port 1 interrupt service routine #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1OUT ^= 0x01; P1IFG &= ~0x08; }

// // // // // // //

Stop P1.0 P1.0 P1.3 P1.3 P1.3 P1.3

watchdog timer output set pullup interrupt enabled Hi/lo edge IFG cleared

// Enter LPM4 w/interrupt

// P1.0 = toggle // P1.3 IFG cleared

Exerccio 3
Utilize a interrupo da P1 para fazer os leds

piscarem (P1.0 e P1.6) quando o boto (P1.3) for pressionado e pararem de piscar quando o boto for pressionado novamente. Faa os comentrios necessrios.

Das könnte Ihnen auch gefallen