Como hacer un desplazamiendo de un led en el puerto a y puerto b

Buenas , saludos desde Oaxaca
bueno estoy con una profesora viendo el programa Mikro C
soy un novato en esto.
bueno el problema es hacer un corrimiento de un led
desde el puerto a al puerto b del PIC16f84a
deberia ser asi
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

Hasta llegar al ultimo pin del puerto B
esto es lo que tengo

void main()
{
short contador=1;
short repetir=1;
Trisa=0;
Trisb=0;
while(1)
{
for(contador=1;contador!=0;contador=contador<<1)
{
Porta,Portb=contador;
Delay_ms(250);
};
};
}


Alguien me es amable de ayudar? ...
 

D@rkbytes

Moderador
De esa forma creo que estarías mostrando por los puertos un número binario, no un desplazamiento de bits.

Podrías hacerlo de esta forma, pero el problema con el puerto A es que RA4 es Open Drain "Drenador Abierto"
Por lo tanto en ese bit al llegar el contador a 4 pasará a un estado flotante, a menos que coloques un resistor pull-up.

Código:
short i;

void main() {
     trisa = 0x00;
     trisb = 0x00;
     porta = 0x01;
     portb = 0x00;
     delay_ms(500);
     
     while(1) {
              for (i=0;i<=4;++i){
              porta = porta <<1;
              delay_ms(500);
              }
              portb = 0x01;
              delay_ms(500);

              for (i=0;i<=7;++i){
              portb = portb <<1;
              delay_ms(500);
              }
              porta = 0x01;
              delay_ms(500);
         }
     }
Saludos.
 
Última edición:
Muchas gracias pero tengo un incoveniente.
si es asi.
pero el problema es que al llegar al bit 4 del puerto a se apaga se esperan unos poquitos segundos y se prende el que sigue
esto no debe ser asi.
deberia ser todo corrido como en los del puerto a sin ningun desperfecto porfavor ayuda.
ya le intente mover por mi cuenta pero voy de mal en peor.
 

D@rkbytes

Moderador
el problema es que al llegar al bit 4 del puerto a se apaga se esperan unos poquitos segundos y se prende el que sigue.
Cierto.
Prueba de la siguiente forma y puedes utilizar el esquema adjunto.
Código:
short i;

void main() {
     trisa = 0x00;
     trisb = 0x00;
     porta = 0x01;
     portb = 0x00;
     
     while(1) {
              for (i=0;i<=4;++i){
              delay_ms(500);
              porta = porta <<1;
              }
              portb = 0x01;
              delay_ms(500);

              for (i=0;i<=7;++i){
              portb = portb <<1;
              delay_ms(500);
              }
              porta = 0x01;
         }
     }
Suerte.
 

Adjuntos

Temas similares


Arriba