Nothing Special   »   [go: up one dir, main page]

Aula_01

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 61

INTERFACEAMENTO E CONTROLE

ELETRÔNICO

AULA 01 - INTRODUÇÃO

Prof. Me. Roberto Vichinsky


Prof. Dr. Cláudio Domienikan
Internet das Coisas (Internet of Things - IoT)

É uma referência à habilidade de diferentes tipos de


objetos conseguirem estabelecer conexão com
a internet, desde eletrodomésticos até carros.
Portanto, esses itens conseguem coletar e transmitir
dados a partir da nuvem

Objetivo: automação e controle


Tipos de IoT
•smartwatches: relógios inteligentes, conectados ao celular via IoT,
que monitoram batimentos cardíacos, atividade física e outros
recursos;

•smart homes: dispositivos eletrônicos que possibilitam o


gerenciamento da casa à distância, como iluminação integrada;

•carros automatizados: carros que se comunicam com celulares a


partir da IoT, otimizando trajetos em tempo real, promovendo maior
segurança para o motorista;

•sensores industriais: implantação de sensores em máquinas


industriais que as tornam mais inteligentes, capazes de gerir as
próprias tarefas;
Tipos de IoT

•smart cities: em Barcelona, o sistema de coleta de lixo foi completamente


automatizado. As lixeiras funcionam a vácuo, pois estão interligadas com uma
rede subterrânea;

•automação no varejo: tecnologias que possibilitam identificar horários de


maior movimentação de clientes, levantar as áreas da loja mais visitadas,
conhecer o público e outras atividades;

•drones: setores, como a construção civil, utilizam drones para monitorar obras.
Na agricultura, eles são usados para percorrer a propriedade rural, detectando
anomalias ou sinais de praga nas plantações.
Internet das Coisas (IoT)
Internet das Coisas (IoT)
Microcontroladores - Arquitetura

Em relação às características construtivas, os microcontroladores podem


ser fabricados com base em uma das duas arquiteturas básicas: arquitetura
von-Neumann e arquitetura Harvard.
Arquitetura von-Neumann

Na arquitetura von-Neumann existe apenas um barramento para acessar


tanto a memória de dados (RAM) quanto a memória de programas (ROM).
Arquitetura Harvard

Na arquitetura Harvard existem dois barramentos distintos, um para


acessar a ROM e outro para acessar a RAM
Microcontroladores PIC

Existem diversos fabricantes de microcontroladores dos quais podemos


destacar as empresas norte-americanas Intel Corporation, Microchip
Technology Incorporation, Texas Instruments, Parallax Incorporation, dentre
outras. Atualmente, um dos mais populares e mais utilizados é o
microcontrolador PIC (Peripheral Interface Controller – Controlador de
Interface Periférica) desenvolvido pela Microchip Technology Incorporation.
Microcontroladores PIC

A Microchip Technology Incorporation é uma das maiores empresas do


segmento, principalmente após adquirir, em 2006, a ATMEL Corporation,
que produzia os populares microcontroladores da família ATMEGA utilizados
nas plataformas Arduino, os quais são agora produzidos pela própria
Microchip.
Microcontroladores PIC

A grande vantagem dos microcontroladores PIC é que todos os modelos


possuem um set de instruções (conjunto de instruções) muito semelhante e
as características básicas entre eles são muito parecidas. Sendo assim,
estudando um deles estaremos familiarizados com os demais.
Microcontrolador PIC16F877A

Falaremos aqui sobre o microcontrolador PIC16F877A, que é um


componente de 8 bits com barramento de instruções (programas) de 14
bits, construído com base na arquitetura Harvard.

Microcontrolador PIC16F877A
(Fonte: https://www.microchip.com)
Microcontrolador PIC16F877A

• 40 pinos;
• Via de programação com 14 bits e 35 instruções;
• 33 portas configuráveis como entrada ou saída;
• 15 interrupções disponíveis;
• Memória Flash para programação de 8Kword (word =14 bits);
• Memória EEPROM (não volátil) interna de 256 bytes;
• Memória RAM de 368 bytes;
• 3 timers (2 de 8 bits e 1 de 16 bits);
• Comunicações paralela e serial;
• 8 conversores A/D de 10 bits e 2 comparadores analógicos.
Pinagem do PIC16F877A
Pinagem do PIC16F877A

Pino 1 (MCLR/Vpp): possui duas funções:

reset externo (MCLR - Master Clear),


que promove um reset no
microcontrolador quando o pino é
colocado em nível lógico zero;

entrada de tensão para programação


(Vpp = +13,0 V aproximadamente).
Pinagem do PIC16F877A

Pinos de 2 a 7: chamados respectivamente


de RA0 a RA5, compõem a porta
identificada como Port A. São pinos digitais
de entrada e saída (I/O) configuráveis via
software, que podem ser acessados
individualmente.
Pinagem do PIC16F877A

Os pinos 2, 3, 4 , 5 e 7 também podem ser


configurados como entradas analógicas
AN0, AN1, AN2, AN3 E AN4.
Os pinos 4 e 5 podem ser usados para
receber as tensões de referência analógica
(VRef-e VRef+);
O pino 6 pode ser utilizado como entrada
externa do contador (T0CKI);
O pino 7 pode ser utilizado para habilitar a
comunicação SPI (SS - Slave Select).
Pinagem do PIC16F877A

Pinos 8, 9 e 10: referenciados como


RE0, RE1 e RE2, respectivamente,
compõem a porta identificada como
Port E. São pinos digitais bidirecionais
de I/O, configuráveis por meio de
software. Podem ser usados também
como entradas analógicas AN5, AN6 e
AN7.
Pinagem do PIC16F877A

O pino 8 também pode ser usado


como controle de leitura da porta
paralela (RD);
O pino 9 pode ser usado como
controle de escrita da porta paralela
(WR);
O pino 10 pode ser utilizado para
habilitar a porta paralela (CS).
Pinagem do PIC16F877A

Pinos 11 e 32 (Vdd): pinos reservados


à alimentação positiva do
microcontrolador (+ 5V).
Pinos 12 e 31 (Vss): pinos reservados
ao terra (gnd) do microcontrolador.
Pinagem do PIC16F877A

Pino 13 (OSC1/CLKIN): entrada para


osciladores externos (híbridos ou RC)
ou entrada para cristal.
Pino 14 (OSC2/CLKOUT): saída dos
osciladores externos ou saída do
cristal.
Pinagem do PIC16F877A

Pinos 15, 16, 17, 18, 23, 24, 25 e 26:


chamados respectivamente de RC0 a
RC7, compõem a porta identificada
como Port C. São pinos digitais de
entrada e saída (I/O) configuráveis via
software, que podem ser endereçados
individualmente.
Pinagem do PIC16F877A
Pinos 19, 20, 21, 22, 27, 28, 29 e 30:
chamados respectivamente de RD0 a
RD7, compõem a porta identificada como
Port D. São pinos digitais bidirecionais de
entrada e saída (I/O) configuráveis via
software, que podem ser endereçados
individualmente. Todos eles possuem
uma segunda função que é servir como
via de comunicação paralela para
transmitir um byte (8 bits).
Pinagem do PIC16F877A

Pinos 33 a 40: chamados respectivamente


de RB0 a RB7, compõem a porta
identificada como Port B. São pinos digitais
bidirecionais de entrada e saída (I/O)
configuráveis via software, que também
podem ser endereçados individualmente.
Diferentemente das demais portas, todos
os pinos do Port B possuem resistores de
pull-up internos, que podem ser ligados ou
desligados via software.
Pinagem do PIC16F877A

Pino 33: interrupção externa (INT);


Pino 36: entrada para programação em
baixa tensão (5V);
Pino 39: clock da programação serial ou
pino de in-circuit debugger (PGC);
Pino 40: dados da programação serial
ou pino de in-circuit debugger (PGD).
Sistema de clock do PIC16F877A

Todo microcontrolador funciona com um sistema de clock, que é


um circuito oscilador que gera sinais de sincronismo dentro de
uma determinada frequência. Essa frequência determina o
período de tempo que chamamos de ciclo de máquina, que por
sua vez determina o ritmo de operação do microcontrolador.
Sistema de clock do PIC16F877A

No PIC16F877A, assim como na maioria dos modelos PIC, a frequência


interna (CKINT) é equivalente à frequência do clock externo (CKEXT)
dividida por 4:

Dessa forma, quando a frequência do cristal oscilador CKEXT for de


4MHz, por exemplo, a frequência interna CKINT será de 1MHz.
Sistema de clock do PIC16F877A

O ciclo de máquina (CM ou TCY) é determinado pelo inverso da


frequência interna, sendo assim, se a frequência CKINT for de 1MHz, o
período do ciclo de máquina TCY será de 1μs (1 microssegundo):
Sistema de clock do PIC16F877A

Os circuitos osciladores para um PIC16F877A podem ser construídos de


duas formas diferentes: usando um cristal/ressonador ou usando um
circuito RC (resistor/ capacitor). O mais utilizados em projetos PIC são os
circuitos baseados em cristal, por oferecerem maior estabilidade de
sinal.
ESTRUTURA BÁSICA DE UM
PROGRAMA EM LINGUAGEM C
PARA MICROCONTROLASDOR PIC
Para demonstrar a estrutura básica de um programa em linguagem C para o
microcontrolador PIC, vamos tomar como base o circuito mostrado abaixo,
onde três leds são ligados aos terminais 1, 2 e 3 do port D (terminais 20,21 e
22 do microcontrolador). Construiremos para esse circuito um programa
que simulará um semáforo simples.
/* PROGRAMA SEMAFORO.C
Simulação de um semáforo com leds
Autor: Vichinsky
Data: 17/02/2021 */
#include <htc.h>
__CONFIG( FOSC_XT & CP_OFF);
#define _XTAL_FREQ 4000000
#define led1 PORTDbits.RD1
#define led2 PORTDbits.RD2
#define led3 PORTDbits.RD3
int liga=1;
int desliga=0;
void atraso(int);
void main () {
TRISD=0b11110001;
PORTD=0x00;
while(1) {
led1=liga;led2=desliga;led3=desliga;atraso(5000);
led1=desliga;led2=liga;led3=desliga;atraso(2000);
led1=desliga;led2=desliga;led3=liga;atraso(7000);
}
}
void atraso(int ms){
while(ms--){__delay_ms(1);}
}
/* PROGRAMA SEMAFORO.C
Simulação de um semáforo com leds Comentários iniciais (descrição do programa,
Autor: Vichinsky identificação do autor, data da elaboração, etc.)
Data: 17/02/2021 */
#include <htc.h>
__CONFIG( FOSC_XT & CP_OFF); Diretivas de pré-compilação (inclusão das bibliotecas de
#define _XTAL_FREQ 4000000 funções, configuração dos fusíveis e da frequência do
#define led1 PORTDbits.RD1 microcontrolador e definição das constantes de
#define led2 PORTDbits.RD2 macrosubstituição)
#define led3 PORTDbits.RD3
int liga=1;
int desliga=0; Declarações globais (declaração das variáveis e das funções
void atraso(int); definidas pelo usuário)
void main () {
TRISD=0b11110001;
PORTD=0x00;
while(1) { Estrutura Principal (conjunto de
led1=liga;led2=desliga;led3=desliga;atraso(5000); instruções que constitui o corpo do
led1=desliga;led2=liga;led3=desliga;atraso(2000); programa)
led1=desliga;led2=desliga;led3=liga;atraso(7000);
}
}
void atraso(int ms){ Funções definidas pelo usuário (estruturas secundárias que
while(ms--){__delay_ms(1);}
}
definem as funções declaradas no bloco “Declarações
Globais”)
/* PROGRAMA SEMAFORO.C
Simulação de um semáforo com leds
Autor: Vichinsky
Data: 17/02/2021 */
#include <htc.h>
__CONFIG( FOSC_XT & CP_OFF); A estrutura principal de um programa para microcontrolador é
#define _XTAL_FREQ 4000000 dividida em duas partes: Preparação e Laço sem Fim
#define led1 PORTDbits.RD1
#define led2 PORTDbits.RD2
#define led3 PORTDbits.RD3
int liga=1;
int desliga=0;
void atraso(int);
void main () {
TRISD=0b11110001;
PORTD=0x00;
while(1) {
led1=liga;led2=desliga;led3=desliga;atraso(5000);
led1=desliga;led2=liga;led3=desliga;atraso(2000);
led1=desliga;led2=desliga;led3=liga;atraso(7000);
}
}
void atraso(int ms){
while(ms--){__delay_ms(1);}
}
/* PROGRAMA SEMAFORO.C
Simulação de um semáforo com leds
Autor: Vichinsky
Data: 17/02/2021 */ A parte de preparação contém as instruções necessárias para a
#include <htc.h> configuração dos PORTs (definição dos terminais que serão
__CONFIG( FOSC_XT & CP_OFF); utilizados como entradas e saídas) e para as atribuições de valores
#define _XTAL_FREQ 4000000
#define led1 PORTDbits.RD1
iniciais aos mesmos.
#define led2 PORTDbits.RD2 Nesta parte, se necessário, podemos ainda declarar variáveis
#define led3 PORTDbits.RD3 locais.
int liga=1;
int desliga=0;
void atraso(int);
void main () {
TRISD=0b11110001;
TRISD=0b11110001;
PORTD=0x00;
PORTD=0x00;
while(1) {
led1=liga;led2=desliga;led3=desliga;atraso(5000);
led1=desliga;led2=liga;led3=desliga;atraso(2000);
led1=desliga;led2=desliga;led3=liga;atraso(7000);
}
}
void atraso(int ms){
while(ms--){__delay_ms(1);}
}
/* PROGRAMA SEMAFORO.C
Simulação de um semáforo com leds
Autor: Vichinsky
Data: 17/02/2021 */ O Laço sem Fim é a parte do programa que contém as instruções
#include <htc.h> que realizarão a tarefa específica definida pelo algoritmo, ou seja,
__CONFIG( FOSC_XT & CP_OFF);
são as instruções que o microcontrolador realizará dentro de uma
#define _XTAL_FREQ 4000000
#define led1 PORTDbits.RD1 estrutura de repetição eterna. Utilizamos, normalmente, a
#define led2 PORTDbits.RD2 estrutura “while”.
#define led3 PORTDbits.RD3
int liga=1;
int desliga=0;
void atraso(int);
void main () {
TRISD=0b11110001;
PORTD=0x00;
while(1)
while(1){ {
led1=liga;led2=desliga;led3=desliga;atraso(5000);
led1=liga;led2=desliga;led3=desliga;atraso(5000);
led1=desliga;led2=liga;led3=desliga;atraso(2000);
led1=desliga;led2=liga;led3=desliga;atraso(2000);
led1=desliga;led2=desliga;led3=liga;atraso(7000);
led1=desliga;led2=desliga;led3=liga;atraso(7000);
}}
}
void atraso(int ms){
while(ms--){__delay_ms(1);}
}
EXEMPLO DE UM PROGRAMA
EM LINGUAGEM C COMENTADO
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & WDTE_OFF & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101; Programa exemplo para microcontrolador
TRISC=0b11111111; PIC16F877A
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & WDTE_OFF & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () { Inclui no programa a biblioteca htc.h, a qual
TRISA=0b11111111; contém os protótipos das funções relativas ao
TRISB=0b11111101; microcontrolador.
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG(FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF);
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1 Configuração dos fusíveis:
void main () {
TRISA=0b11111111; FOSC_XT: determina o uso de oscilador de média frequência (cristal de 2 a 4MHz).
TRISB=0b11111101; PWRTE_ON: determina que o programa não comece antes que a alimentação seja inicializada. Esta
TRISC=0b11111111; opção irá fazer com que o PIC comece a operar cerca de 72 ms após o pino MCLR (pino 1
TRISD=0b11111111;
– Master Clear/Reset) seja colocado em nível alto.
TRISE=0b11111111;
PORTA=0x00; CP_OFF: deixa o código desprotegido para leitura.
PORTB=0x00; BOREN_ON: é utilizado para forçar um reset quando a tensão de alimentação sofre uma pequena
PORTC=0x00; queda. Ele é extremamente recomendado em projetos que possibilitam ao usuário
PORTD=0x00; desligar e religar rapidamente a alimentação.
PORTE=0x00; LVP_OFF: Low Voltage Programming desabilitada. O PIC16F877A apresenta um pino de IO
while(1) { chamado de PGM (pino 36-RB3) com a função de programação em baixa tensão (LVP)
if(botao)
habilitada. Dessa forma, é importante desabilitar essa função (NOLVP) para garantir a
led = 1;
else função do pino como entrada e saída.
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111; Determina o valor de 4MHz para a frequência
TRISB=0b11111101; do clock.
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111; Associa a variável botao com o pino 0 (zero) da porta B.
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111; Associa a variável led com o pino 1 (um) da porta B.
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () { Inicia a função principal do programa.
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111; Esta função configura a porta de I/O A. Cada bit no valor representa um
TRISE=0b11111111; pino (“1”= input-entrada / “0”= output-saída). Neste caso, todos os pinos
PORTA=0x00;
PORTB=0x00; da porta A são configurados como entrada.
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111; Configura a porta B:
TRISE=0b11111111; RB7 = input (1)
PORTA=0x00;
PORTB=0x00; RB6 = input (1)
PORTC=0x00; RB5 = input (1)
PORTD=0x00; RB4 = input (1)
PORTE=0x00;
while(1) {
RB3 = input (1)
if(botao) RB2 = input(1)
led = 1; RB1 = output (0)
else RB0 = input (1)
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00; Configura as portas C, D e E atribuindo “1” para
PORTC=0x00; todos os pinos (todos definidos como entrada)
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00; Inicializa as portas com o valor 0 (zero) – desliga
PORTC=0x00;
todos os pinos.
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00; Inicia uma estrutura de repetição ondea expressão condicional é
while(1) { sempre verdadeira (1=TRUE) – “loop” sem fim.
if(botao)
led = 1;
else
led = 0;
}
}
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) { Estrutura condicional que verifica o estado do pino 0 da porta B
if(botao) (RB0), representado pela variável “botao”. Se o nível lógico do
led = 1; pino RB0 for alto (botão pressionado), o pino de saída RB1,
else representado pela variável “led”, será também colocado em nível
led = 0; alto (acende o led), caso contrário, RB1 será colocado em nível
}
} baixo (apaga o led).
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0; Finaliza o bloco de instruções pertencente à estrutura de
}
}
repetição “while”.
/* Programa exemplo */
#include <htc.h>
__CONFIG( FOSC_XT & PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF );
#define _XTAL_FREQ 4000000
#define botao PORTBbits.RB0
#define led PORTBbits.RB1
void main () {
TRISA=0b11111111;
TRISB=0b11111101;
TRISC=0b11111111;
TRISD=0b11111111;
TRISE=0b11111111;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
while(1) {
if(botao)
led = 1;
else
led = 0;
}
} Finaliza o bloco de instruções pertencente à função principal do
programa “main”.
EXERCÍCIO 1
Desenvolver um programa em linguagem C para alternar o acendimento de três leds mediante
pressionamento de um botão do tipo push-button. Considere a seguinte montagem:

Botão push-button: RB0


Led verde: RB7
Led amarelo: RB5
Led vermelho: RB3
Recursos utilizados
• Software PROTEUS para desenho e simulação do esquemático

• Ambiente integrado de desenvolvimento (IDE) MPLAB-X para


construção do programa em linguagem C

• Compilador XC8 da Microchip (em substituição do HiTech)


Download do MPLAB-X (baixe o pacote de instalação através do link abaixo)
https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide#tabs
Download do compilador XC8 (baixe o pacote de instalação através do link abaixo)
https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers
Download do compilador XC8
https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers
Download do compilador XC8
https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-xc-compilers
Após os downloads, você terá os seguintes pacotes de instalação:

MPLABX-v5.45-windows-installer.exe
xc8-v2.32-full-install-windows-x64-installer.exe

Instale primeiramente o MPLABX e em seguida o XC8.


Outros compiladores:

Você também pode gostar