Para o
hardware mostrado no diagrama acima temos o seguinte funcionamento:
·
Carga 1: mostra o led ligado quando a carga
1está ativa
·
Carga 2: mostra o led ligado quando a carga 2
está ativa
·
Ao iniciar as cargas estão desativadas
·
Botão 1: Ao ser pressionado ativa a carga 1
·
Botão 2: Ao ser pressionado ativa a carga 2
·
Botão 3: Ao ser pressionado:
o
Se a carga 2 estiver ativa, desativa a carga 1
o
Se a carga 2 estivar desativada, ativa a carga 1
·
Botão 4: Ao ser pressionado:
o
Se a carga 1 estiver ativa, desativa a carga 2
o
Se a carga 1 estivar desativada, ativa a carga 2
·
Botão 5: Desativa as cargas 1 e 2
·
LCD mostra na linha 1 o estado da carga 1
·
LCD mostra na linha 2 o estado da carga 2
Ocorre
que o programa descrito abaixo foi compilado com sucesso, porém ao ser
carregado no hardware o funcionamento é diferente do descrito acima.
#define _XTAL_FREQ 48000000
#include <xc.h>
#include <xc.h>
#include
"c:\h\config_PIC18F4550.h"
#include "c:\h\biblioteca_lcd_2x162_48M_XC.h"
#define
botao1 PORTBbits.RB1
#define
botao2 PORTBbits.RB2
#define
botao3 PORTBbits.RB3
#define
botao4 PORTBbits.RB4
#define
botao5 PORTBbits.RB5
#define
carga1 LATBbits.LATB6
#define
carga2 LATBbits.LATB7
void
main(void) {
TRISB = 1;
TRISD = 0x00;
LATD = 0;
lcd_inicia(0x28, 0x0f, 0x06);
lcd_LD_cursor(0);
carga1 = 0;
carga2 = 0;
while (1) {
if (!botao1)
carga1 = 0;
if (botao2)
carga2 = 0;
if (!botao3)
if (carga2)
carga1 = 1;
else
carga1 = 0;
if (!botao4)
if(carga1)
carga2 = 1;
else
carga2 = 0;
if (!botao5){
carga1 = 0;
carga2 = 0;
}
lcd_posicao(1, 1);
if (carga1)
imprime_string_lcd(" carga 1
on ");
else
imprime_string_lcd(" carga 1
off");
lcd_posicao(2, 1);
if (!carga2)
imprime_string_lcd(" carga 2
on ");
else
imprime_string_lcd(" carga 2
off");
}
}
Atividade:
Corrija o programa
para que o mesmo funcione da forma como foi descrito.
Nenhum comentário:
Postar um comentário