sexta-feira, 2 de setembro de 2016

Erros de lógica







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 "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