TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: PICNASIO en 29 de Enero de 2020, 23:39:37

Título: Encender pines uno por uno con ciclo for
Publicado por: PICNASIO 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
Título: Re:Encender pines uno por uno con ciclo for
Publicado por: KILLERJC 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
Título: Re:Encender pines uno por uno con ciclo for
Publicado por: Eduardo2 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) ;
    }

Título: Re:Encender pines uno por uno con ciclo for
Publicado por: KILLERJC 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.
Título: Re:Encender pines uno por uno con ciclo for
Publicado por: Eduardo2 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