Buen dia a todos los Picmaniacos, me encuentro en un pequeño problema , tengo trabajando hace mas de un mes con PIC y estoy encasillado en un pequeño incoveniente.
Trato de controlar la direccion de un bit en la salida del puerto B del 16f84A con dos pulsadores , cada ves que presione el pulsador A1 el bit encendido debe correr a la derecha y cada vez que presione el pulsador A2 el mismo bit debe correr a la izquierda sin importar en cual de las salidas del puerto B se encuentro .
Este es el programa que he realizado , pero no me funciona totalmente , cuando presiono el A1 corre por las salidas del puerto hasta el B3 y Cuando presiono el A2 recien enciende el B3 y corre a la izquierda pero ya no enciende el B0.
#include <16f84a.h>
#fuses HS,NOWDT,NOPROTECT,PUT
#use delay (clock=4000000)
#byte trisa = 0x85
#byte trisb = 0x86
#byte portb = 0x06
#byte OPTION_REG =0x81
void main() {
int i,reg;
disable_interrupts(GLOBAL); //todas las interrupciones desactivadas
bit_clear(OPTION_REG,7);
bit_set(trisa,0);
bit_clear(trisb,0);
bit_clear(trisb,1);
bit_clear(trisb,2);
bit_clear(trisb,3);
bit_clear(trisb,4);
bit_clear(portb,0);
bit_clear(portb,1);
bit_clear(portb,2);
bit_clear(portb,3);
do{
reg=1;
i=1;
do{ //led's on derecha
if(!input(PIN_a0)){ //¿Se ha pulsado boton A0?
while(!input(PIN_a0));
output_b(reg); //ilumino led correspondiente
reg=reg*2;
i++; //incremento i
}
}while(i<

;
i=1;
do{ //led's on izquierda
if(!input(PIN_a1)){ //¿Se ha pulsado boton A1?
while(!input(PIN_a1));
output_b(reg); //ilumino led correspondiente
reg=reg/2;
i++; //aumenta i
}
}while(i<

;
}while(TRUE);
}
Cualquier ayuda sera bien recibida , gracias