• Nenhum resultado encontrado

Aula07-DefiniçõeseSaídadedados

N/A
N/A
Protected

Academic year: 2021

Share "Aula07-DefiniçõeseSaídadedados"

Copied!
9
0
0

Texto

(1)

Microcontroladores

Prof. Eng. Derig Almeida Vidal

Mestre em Computação Aplicada, Engenheiro de Produção e Tecnólogo em Automática

Aula 08

Entrada e Saída

Prof. Derig Almeida Vidal, MsC

Analisando um programa simples

#include <16f628a.h> #use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1) void main() { printf(“Ola"); delay_ms(1000); output_high(PIN_A0); }

#include

#include <16f628a.h>

• Define o modelo do microcontrolador utilizado, incluindo assim uma série de comandos e variáveis pré-definidas neste microcontrolador.

• No exemplo, o microcontrolador escolhido é o PIC 16F628A.

#use

#use delay(clock=4000000)

• Define o clock do microcontrolador em Hz • No exemplo, o clock é de 4MHz ou 4000000Hz.

(2)

Prof. Derig Almeida Vidal, MsC

#fuses

• #fuses

HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP

Fuse Significado

LP Low power osc < 200KHz

XT Crystal osc <= 4MHz

HS High speed Osc (> 4MHz)

EC External clock with CLKOUT

NOWDT No Watch Dog Timer

WDT Watch Dog Timer

NOPUT No Power Up Timer

PUT Power Up Timer

PROTECT Code protected from reads

NOPROTECT Code not protected from reading BROWNOUT Reset when brownout detected

Prof. Derig Almeida Vidal, MsC

#fuses

Fuse Significado

NOBROWNOUT No brownout reset NOMCLR Master Clear pin used for I/O

MCLR Master Clear pin enabled

NOLVP No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

LVP Low Voltage Programming on B3(PIC16) or B5(PIC18)

INTRC Internal RC Osc

EC_IO External clock

INTRC_IO Internal RC Osc, no CLKOUT

EC External clock with CLKOUT

NOCPD No EE protection

CPD Data EEPROM Code Protected

Prof. Derig Almeida Vidal, MsC

#use

#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B3) • A diretiva rs232 é utilizada para ordenar ao

compilador que gere um código para comunicação serial utilizando uma interface serial assíncrona padrão rs232.

• Os parâmetros são os seguintes (respectivamente): – Velocidade de comunicação em bps;

– Pino de saída dos dados transmitidos; – Pino de entrada dos dados recebidos.

Prof. Derig Almeida Vidal, MsC

Saída de dados (Serial) - printf()

• Cria uma saída formatada, geralmente utilizada para exibir dados das variáveis no LCD ou em uma saída serial.

• No Proteus podemos colocar um Terminal Virtual nesta saída e observá-la (lembrar de sincronizar a

(3)

Prof. Derig Almeida Vidal, MsC

Saída de dados (Serial) - printf()

• Exemplo:

int x,y; x = 10; y = 20;

printf(“o valor de x e %d e o valor de y e %d”,x,y);

• Exemplo:

float VAR1; int VAR2; long VAR3;

printf(lcd_putc, “\f TESTE %f”, VAR1);

printf(lcd_putc,”\fTESTE\n %lu %f”, VAR3, VAR1);

Prof. Derig Almeida Vidal, MsC

Saída de dados (Serial) - printf()

Saída de dados (Serial) - printf()

Especificadores de Formato

Especificador Tipo

%u Int ou Short %i ou %d Signed int

%lu Long ou int32 %li ou %ld Signed long

%X Int em hexadecimal

%f Float

%c Caractere

%s String

%e Float em notação científica %lx Long em hexadecimal

%% O símbolo %

%3u Int com 3 casas

Códigos de Barra Invertida

• Colocar todas as constantes caractere entre aspas funciona para muitos caracteres, mas alguns, como o retorno de carro, são impossíveis de serem inseridos em uma string a partir do teclado.

(4)

Prof. Derig Almeida Vidal, MsC

Códigos de Barra Invertida

Código Caractere Código ASCII

\yyy Constante Octal yyy

-\xyyy Constante hexadecimal

-\0 Nulo (null) 0

\a Campainha (BEL) 07h

\b Retrocesso (backspace) 08h

\t Tabulação horizontal (TAB) 09h

\n Nova linha (line feed) 0Ah

\v Tabulação vertical (vertical TAB) 0Bh

\f Avanço de formulário (form feed) 0Ch

\r Retorno de carro (Return) 0Dh

\” Aspas 22h

\’ Apóstrofo 27h

\\ Barra invertida “\” 5Ch

Prof. Derig Almeida Vidal, MsC

Exercício

1. Declare uma variável A do tipo float e a inicialize. Declare uma variável B do tipo float e a inicialize. Declare uma variável Soma do tipo float que receba o valor da soma de A+B. Ao final mostre “A soma de A (valor de A) + B (valor de B) é igual a (Valor de soma)”.

Prof. Derig Almeida Vidal, MsC

Exercício 01 - Resposta

#include <16f628a.h> #use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1) void main(){ float A, B, Soma; A = 10.5; B = 1; Soma = A + B; printf("A soma de A (%f) + B (%f) é igual a (%f)",A,B,Soma); }

Prof. Derig Almeida Vidal, MsC

Exercício

2. Modifique o programa a seguir para exibir o valor das variáveis do programa (em Hexa) ao término de sua execução: long int x; int y,z; x = 0x1234; y = x; z = x>>8;

(5)

Prof. Derig Almeida Vidal, MsC

Exercício 02 - Resposta

#include <16f628a.h> #use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1) void main(){ long int x; int y,z; x = 0x1234; y = x; z = x>>8;

printf("O valor de x = %lx o valor de y = %x e o valor de z = %x",x,y,z); }

Prof. Derig Almeida Vidal, MsC

Exercício 02 – Resposta 02

#include <16f628a.h> #use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1) void main(){ long int x; int y,z; x = 0x1234; y = x; z = x>>8; printf("O valor de x = %lx",x); printf("\n\rO valor de y = %x",y); printf("\n\rE o valor de z = %x",z); }

Saída de dados

output_high e output_low

output_high()

• Ativa um determinado pino do microcontrolador. • Exemplo:

output_high(PIN_A0); output_high(PIN_B2);

output_low()

• Desativa um determinado pino do microcontrolador. • Exemplo: output_low(PIN_B5);

Exemplo

#include <16f628a.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP void main(){ output_high(PIN_B0); delay_ms(3000); output_low(PIN_B0); delay_ms(3000); output_high(PIN_B0); }

(6)

Prof. Derig Almeida Vidal, MsC

Saída de dados -

output_a() e output_b()

output_a()

• Envia um byte para o PORT A • Exemplo:

output_a(VAR1); // envia VAR1 para PORTA

output_b()

• Envia um byte para o PORT B • Exemplo:

output_b(0xff); // liga todos bits de PORTB output_b(0x00); // desliga todos os bits de PORTB

Prof. Derig Almeida Vidal, MsC

Exemplo

#include <16f628a.h> #use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP void main(){

int saida = 0b00001000; // ativa apenas o pino B3

output_b(saida); delay_ms(3000);

saida = saida | 0b00000001; // ativa também o pino B0

output_b(saida); delay_ms(3000);

saida = saida & 0b11110111; // desativa o pino B3

output_b(saida); }

Prof. Derig Almeida Vidal, MsC

Exemplo

Prof. Derig Almeida Vidal, MsC

Entrada de dados - input()

input()

• Busca o estado de um pino • Exemplo:

int1 x;

(7)

Prof. Derig Almeida Vidal, MsC

Exemplo

#include <16f628a.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP void main(){ int1 entrada; entrada = input(PIN_A0);

(entrada==1) ? output_high(PIN_B0) : output_low(PIN_B0); }

Prof. Derig Almeida Vidal, MsC

Exemplo

Entrada de dados – input_a()

input_a()

• Busca um byte do PORT A • Exemplo:

int VAR1;

VAR1 = input_a(); input_b()

• Busca um byte do PORT B • Exemplo: int VAR1;

Exemplo

#include <16f628a.h> #use delay(clock=4000000) #fuses HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP #use rs232(baud=2400, xmit=PIN_A0, rcv=PIN_A1) void main(){

int entrada;

entrada = input_b();

printf("O valor da entrada é: %u",entrada); }

(8)

Prof. Derig Almeida Vidal, MsC

Exemplo

Prof. Derig Almeida Vidal, MsC

Entrada de dados (Serial) - getchar()

getchar();

• Obtém os dados provenientes da entrada serial, previamente configurada.

• Exemplo: char y; y = getchar();

Prof. Derig Almeida Vidal, MsC

Exemplo

#include <16f628a.h> #use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT, NOMCLR,NOLVP

#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1) void main(){

char y; y = getchar();

printf("O caractere informado e: %c",y); }

Prof. Derig Almeida Vidal, MsC

Exemplo

(9)

Prof. Derig Almeida Vidal, MsC

Delays

delay_us()

• Causa um atraso de tempo em milionésimos de segundos.

• Ex:

delay_us(500); // Atrasa 500us delay_ms()

• Causa um atraso de tempo em milésimos de segundos.

• Ex:

delay_ms(1000); // Atrasa 1 segundo

Prof. Derig Almeida Vidal, MsC

Exercícios

1. Acender um LED, esperar 1 segundo e desligar o LED.

Referências

Documentos relacionados

Depois do café da manhã, iremos desocupar o hotel para visitar - com transporte e guia local incluído - uma das principais reservas de pinguim do mundo, chamada de

Agora, o que eu realmente fiz foi confundir o PMDB, e fiz isso, às vezes, quase deliberadamente, porque havia certos tabus, como o tabu, por exemplo, do FMI que eu

Se esse autor está falando da droga como objeto de substituição, deve-se esclarecer então a que tipo de substituição ele está se referindo, a qual diz respeito a uma substituição

0.2MPa Sinal de entrada Tipo de corrente Tipo de tensão Entrada pré-ajustada Tipo de corrente Tipo de tensão Entrada pré-ajustada Sinal de saída (saída monitor)

Também pode ser utilizado esse sistema em casos onde uma ou mais substâncias de uma mistura a destilar sofre degradação térmica em temperaturas acima de, por exemplo, 60 ºC, o que

Para cada tamanho realizam-se diferentes exe- cuções para eleger o modelo mais adequado a cada instalação.. As execuções reflectem-se nas siglas que incorporam na referência

Por exemplo, para copiar todos os arquivos de um disquete para o drive C: digite o comando abaixo:.. copy

Os dados serão adicionados no fim do arquivo (“append“) se ele já existir, ou um novo arquivo será criado, no caso de arquivo não existente anteriormente. • “rb“: Abre