A lógica está até fazendo o que preciso mas não sei porque a instrução "resultado_out" dentro do else não está sendo executada. Alguém dá uma luz aí.
Algumas variáveis foram criadas apenas para debug, pois são internas da função e não estão aparecendo no debug do MikroC
Segue o código:
- Código: Selecionar todos
int toggle(int port_in, int posicao_in, int port_out, int posicao_out, int teste1, int teste2, int resultado_teste);
void main()
{
/* Inicialização de registradores e variáveis */
CMCON = 0b11111111;//Desliga comparador analogico
OPTION_REG = 0b00000101; //Configura o timer0 ( prescaler 1:64 )
INTCON.GIE = 1; //Habilita interrupcap global
INTCON.T0IE = 1; //Habilita interrupcao do timer0
TMR0 = 131; //Carrega TMR0 com o valor 131 ( 256 - 125 )
TRISB = 0b00110111;//Define os pinos da PORTB.
TRISA = 0b10000000;//Define todas os pinos da PORTA como SAÍDAS, exceto o pino RA7.
PORTB = 0b00000000; //Inicializa o portb em 0.
PORTA = 0b00000000; //Inicializa o porta em 0.
while(1)
{
PORTA = toggle(PORTB, 6, PORTA, 3, 0, 0, 0);
}
}
int toggle(int port_in, int posicao_in, int port_out, int posicao_out, int teste1, int teste2, int resultado_teste)
{
int mascara_in, mascara_out, resultado_out; //= (1 << posicao_in);// Move 1 para a posição da entrada.
static set_bit;
//posicao_in = posicao_in - 1;
//posicao_out = posicao_out - 1;
mascara_in = (1 << posicao_in - 1);
mascara_out = (1 << posicao_out - 1);
teste1 = (1 << posicao_in - 1);
teste2 = (1 << posicao_out - 1);
if (port_in == mascara_in)//Botão apertado.
{
resultado_out = port_out | mascara_out;
resultado_teste = port_out | mascara_out;
if (resultado_teste != port_out && set_bit == 0)
{
port_out = port_out ^ mascara_out;
set_bit = 1;
}
else
{
resultado_out = 0;
set_bit = 0;
resultado_teste = 0;
}
}
return (port_out);
}
Desde já, obrigado pela ajuda.