ELETRÔNICA DIGITAL E ESTRUTURA DE DADOS
EXEMPLO 1:
Para o circuito da figura 1, criar o fluxograma e programa fonte que faça com que o LED, conectado a saída D0, seja acionado.
Figura 1 – Circuito para acionamento de LED
Fluxograma:
Programa Fonte:
#include <16F877.h> #use delay(clock=4000000) main() { output_high(pin_d0); }
EXEMPLO 2:
Para o circuito da figura 1, criar o fluxograma e programa fonte que faça com que o LED, conectado a saída D0, pisque a cada 500ms.
Fluxograma:
Programa Fonte:
#include <16F877.h> #use delay(clock=4000000) int tempo=250; main() { output_high(pin_d0); delay_ms(tempo); delay_ms(tempo); output_low(pin_d0); delay_ms(tempo); delay_ms(tempo); }
EXEMPLO 3:
Para o circuito da figura 2, criar o fluxograma e programa fonte que faça com que o LED, conectado a saída D0, pisque a cada 500ms, quando uma chave, conectada ao porte A1, seja acionada.
Fluxograma:
Programa Fonte:
#include <16F877.h> #use delay(clock=4000000) int tempo=250; main() {
while(true) { while(!input(pin_a1)) { output_high(pin_d0); delay_ms(tempo); delay_ms(tempo); output_low(pin_d0); delay_ms(tempo); delay_ms(tempo); } }
output_low(pin_d0); }
EXEMPLO 4:
Para o circuito da figura 3, criar o fluxograma e programa fonte com a seguinte função:
- Quando acionada uma chave conectada ao porte B0, faça gerar o sinal especificado na saída D0;
- Quando acionada uma chave conectada ao porte B1, faça gerar o sinal especificado na saída D1;
- Quando acionadas ou desacionadas ambas as chaves, nenhum sinal deve ser gerado.
Fluxograma:
Programa Fonte:
#include <16F877.h> #use delay(clock=4000000) int atraso1=250; int atraso2=200; main() { salto:
while(true) { while(!input(pin_b0)&&!input(pin_b1)) { goto salto; } while(!input(pin_b0)&&input(pin_b1)) { output_high(pin_d0); delay_ms(tempo); delay_ms(tempo); delay_ms(tempo); delay_ms(tempo); output_low(pin_d0); delay_ms(tempo); delay_ms(tempo); delay_ms(tempo); delay_ms(tempo); } while(input(pin_b0)&&!input(pin_b1)) { output_high(pin_d1); delay_ms(tempo); output_low(pin_d1); delay_ms(tempo); } while(input(pin_b0)&&input(pin_b1)) { goto salto; } }
}
EXEMPLO 5:
Para o circuito da figura 4, criar o fluxograma e programa fonte com a seguinte função:
- Quando acionada uma chave conectada ao porte A1, faça gerar os sinais especificados no porte D;
- Quando desacionada, os sinais devem ser invertidos no porte D.
- Freqüência de Pulso: 1000Hz
Fluxograma:
GERA_SINAIS.c
INICIALIZAÇÃO DE
PARÂMETROS
DQ = 182
DQ = 73
GERA 500us
GERA 500us
PIN_A1==0?
SIM
NÃO
INT ATRASO = 250
DQ = 73
DQ = 182
GERA 500us
GERA 500us
ProgramaFonte:
#include <16F877.h> #use delay(clock=4000000) int atraso=250; main() {
while(true) { while(!input(pin_a1)) { output_d(182); delay_us(atraso); delay_us(atraso); output_d(73); delay_us(atraso); delay_us(atraso); } output_d(73); delay_us(atraso); delay_us(atraso); output_d(182); delay_us(atraso); delay_us(atraso); }
}
EXEMPLO 6:
Para o circuito da figura 5, criar o fluxograma e programa fonte com a seguinte função:
- Um Microcontrolador PIC16F877 deve controlar um display de cristal líquido (16x2), através do Porte “D” e enviar a seguinte mensagem (Centralizada):
1a Linha: MECATRONICA 2008
2a Linha: TIMAO EH OH!
Fluxograma do Programa Principal “main()”:
LCD2008.c
INICIALIZAÇÃO DE PARÂMETROS
EN como pin_e0 RS como pin_e1
ms1[i]≠0? NÃO
INT i =0 CHAR msg1[17] CHAR msg2 [15]
CHAMA INIC_DISPLAY
RS = 0
CHAMA WRCAR (0X80)
RS = 1
CHAMA WRCAR (ms1[i])
i = i + 1
SIM
ms2[i]≠0? NÃO
RS = 0
CHAMA WRCAR (0XC0)
RS = 1
CHAMA WRCAR (ms2[i])
i = i + 1
SIM
i = 0
A
A
FIM
Fluxograma da Função “void wrcar(int dado)”:
WRCAR(INT DADO)
EN = 1
GERA 1ms
DQ = DADO
EN = 0
GERA 1ms
RETORNA
INIC_DISPLAY( )
RS = 0
CHAMA WRCAR(0X38)
CHAMA WRCAR(0X06)
CHAMA WRCAR(0X01)
CHAMA WRCAR(0X0D)
RETORNA
RS = 1
GERA 3ms
ProgramaFonte:
#include<16f877.h> #use delay(clock=4000000) #define EN pin_e0 #define RS pin_e1 char msg1[17]={"MECATRONICA 2008"}; char msg2[15]={" TIMAO EH OH!"}; int i=0; void wrcar(int dado) { output_high(EN); delay_ms(1); output_d(dado); delay_ms(1); output_low(EN); } void inic_display() { output_low(RS); wrcar(0x38); wrcar(0x06); wrcar(0x0d); wrcar(0x01); output_high(RS); delay_ms(3); } void main() { inic_display(); output_low(RS); wrcar(0x80); output_high(RS); while(msg1[i]!=0) { wrcar(msg1[i]); i++; } output_low(RS); wrcar(0xc0); output_high(RS); i=0; while(msg2[i]!=0) { wrcar(msg2[i]); i++; } }
EXEMPLO 7:
Para o circuito da figura 6, criar o fluxograma e programa fonte com a seguinte função:
- Um Microcontrolador PIC16F877 deve controlar um display de cristal líquido (16x2), através do Porte “B” e enviar a seguinte mensagem:
1a Linha: ANALOGICO 2008 (Centralizado) 2a Linha: CONVERSAO: (Fixado á esquerda)
Alguns parâmetros:
a. Modo de Fixação: 2 linha 5x7 (8 bits); b. Display aceso sem cursor; c. Escreve deslocando o cursor para a direita; d. Limpa display e retorna o cursor para o inicio.
Fluxograma do Programa Principal “main()”:
LCD2008.c
INICIALIZAÇÃO DE PARÂMETROS
EN como pin_e0 RS como pin_e1
ms1[i]≠0? NÃO
INT i =0 CHAR msg1[17] CHAR msg2 [15]
CHAMA INIC_DISPLAY
RS = 0
CHAMA WRCAR (0X80)
RS = 1
CHAMA WRCAR (ms1[i])
i = i + 1
SIM
ms2[i]≠0? NÃO
RS = 0
CHAMA WRCAR (0XC0)
RS = 1
CHAMA WRCAR (ms2[i])
i = i + 1
SIM
i = 0
A
A
FIM
Fluxograma da Função “void wrcar(int dado)”:
WRCAR(INT DADO)
EN = 1
GERA 1ms
BQ = DADO
EN = 0
GERA 1ms
RETORNA
INIC_DISPLAY( )
RS = 0
CHAMA WRCAR(0X38)
CHAMA WRCAR(0X06)
CHAMA WRCAR(0X01)
CHAMA WRCAR(0X0D)
RETORNA
RS = 1
GERA 3ms
ProgramaFonte:
#include<16f877.h> #use delay(clock=4000000) #define EN pin_e0 #define RS pin_e1 char msg1[16]={" ANALOGICO 2008"}; char msg2[11]={"CONVERSAO:"}; int i=0; void wrcar(int dado) { output_high(EN); delay_ms(1); output_b(dado); delay_ms(1); output_low(EN); } void inic_display() { output_low(RS); wrcar(0x38); wrcar(0x06); wrcar(0x0c); wrcar(0x01); output_high(RS); delay_ms(3); } void main()
{ inic_display(); output_low(RS); wrcar(0x80); output_high(RS); while(msg1[i]!=0) { wrcar(msg1[i]); i++; } output_low(RS); wrcar(0xc0); output_high(RS); i=0; while(msg2[i]!=0) { wrcar(msg2[i]); i++; }
}