Aula_1 - demic

Transcrição

Aula_1 - demic
MSP430
•
•
Revisão da linguagem C.
Estrutura de entrada e saída digital do
MSP430
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;
}
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;
}
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.
Exercício 1
 Faça um programa que tire a média de dois
números.
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.
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.
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
Controle de Fluxo
 Os comandos de controle de fluxo podem ser
divididos em dois grupos:
 Instruções condicionais;
 estrutura de repetição.
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;
}
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
}
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;
}
}
While
while (condição)
{
Instrução;
}
Exemplo:
#include<io430.h>
int main(void)
{
int n = 0;
while(n <=255)
{
P1OUT = n;
n = n+1;
}
}
do-while
Do{
Instrução;
}while(condição)
Exemplo:
#include<io430.h>
int main(void)
{
int n = 255;
Do{
P1OUT = n;
}while(n>0)
}
MSP430G2553
•
Estrutura de entrada e saída 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 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.
O MSP430G2553 possui apenas a
P1 e P2
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;
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
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;
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;
Function Select Registers PxSEL
and PxSEL2
 Habilitam ou desabilitam o uso de outros
periféricos no pino selecionado;
 O datasheet deve ser consultado!
Funções alternativas dos pinos
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.
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.
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
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 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.
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);
//
//
//
//
//
//
//
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
}
// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1OUT ^= 0x01;
P1IFG &= ~0x08;
}
// P1.0 = toggle
// P1.3 IFG cleared
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.