Autor Tema: Encender pines uno por uno con ciclo for  (Leído 2114 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PICNASIO

  • PIC10
  • *
  • Mensajes: 1
Encender pines uno por uno con ciclo for
« en: 29 de Enero de 2020, 23:39:37 »
Hola a todos. Alguien sabe como puedo activar los pines de mis salidas uno por uno con un ciclo for?
int8 a=1;
int8 x;
           for(x=0;x<a;x++)
            {
               output_high(pin_ba);
            }
            delay_ms(500);
me sale error ya que no existe pin_b

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender pines uno por uno con ciclo for
« Respuesta #1 en: 30 de Enero de 2020, 00:09:21 »
Código: C
  1. int8 x;
  2.            for(x=1;x!=0;x<<=1)
  3.             {
  4.                output_b(x);
  5.               delay_ms(500);
  6.             }


Espero que funcione

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Encender pines uno por uno con ciclo for
« Respuesta #2 en: 30 de Enero de 2020, 13:02:40 »

Si llegara a ser necesario un barrido continuo es mas negocio usar rotate_left/right

Código: [Seleccionar]
int8  port = 1 ;
#byte port = getenv("SFR:PORTB")

void main(void)
{
    set_tris_b(0) ;
    while(1){
        delay_ms(500) ;
        rotate_left(&port,1) ;
    }


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender pines uno por uno con ciclo for
« Respuesta #3 en: 30 de Enero de 2020, 13:45:39 »
¿Pero no lo estarias haciendo una sola ves con el while(1)?, ya que una vez que quede en 0x80, pasaria a 0x00. Me parece un poco raro que mantenga el bit del carry que queda.
« Última modificación: 30 de Enero de 2020, 13:47:56 por KILLERJC »

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Encender pines uno por uno con ciclo for
« Respuesta #4 en: 30 de Enero de 2020, 14:13:13 »
Eso pasaría si fuera desplazamiento (shift_left/right) , pero al ser rotación de 0x80 pasa a 0x01.

En el código assembler generado, hace:

 RLF    06,W   ;  El MSB va al carry
 RLF    06,F     ;  Rota incluyendo el carry, que tiene el MSB