Ismael,
Não analizei seu programa inteiro mas neste trecho eu achei um erro, pode ter mais ... mas da uma olhada nisto :
Errado em Bold e correto em vermelho.
Nota: Supondo que fase 1 esta em portA bit 1 e fase dois em portA bit 0 ...
void teste( )
{
if((test_bit(porta,1)==0)&&(test_bit(porta,0)==0))//00 = 0
{
leitura = 0;
display();
do
{
display();
if((test_bit(porta,1)==1)&&(test_bit(porta,0)==0))//2 {
crescente( );
leitura = 1;
}
if((test_bit(porta,1)==0)&&(test_bit(porta,0)==1)) //1
if((test_bit(porta,1)==1)&&(test_bit(porta,0)==1)) //1
{
decrescente( );
leitura = 1;
}