TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: gaitan en 25 de Septiembre de 2018, 21:21:08

Título: ayuda¡ pic16f873a delays
Publicado por: gaitan en 25 de Septiembre de 2018, 21:21:08
buenas amigos lo que pasa es que necesito obtener las señales de salida al mismo tiempo con diferentes delays, el problema con la programación que tengo es que salen una por una adjunto la programación que tengo agradezco cualquier ayuda que se me pueda brindar.
void main() {
 TRISB=0;
 PORTB=0;
 while(1){
 PORTB.F0=1;
 delay_mS(2000);
 PORTB.F0=0;
 delay_mS(2000);
 PORTB.F1=1;
 delay_mS(1500);
 PORTB.F1=0;
 delay_mS(1500);
 PORTB.F2=1;
 delay_mS(1000);
 PORTB.F2=0;
 delay_mS(1000);
 PORTB.F3=1;
 delay_mS(500);
 PORTB.F3=0;
 delay_mS(500);
 }
}
Título: Re:ayuda¡ pic16f873a delays
Publicado por: KILLERJC en 25 de Septiembre de 2018, 22:09:56
Usa un solo delay (el más pequeño 500 ms). Usa una XOR para cambiar el estado de un pin y....
Utiliza una variable para saber cuándo usar las demás salidas.. me explico mejor... Si tenés un solo delay de 500ms F3 lo cambias siempre, pero F2 lo haces cuando pase 2 veces, F1 cuando pase 3 veces y por último F0 cuando pase 4 veces.
Título: Re:ayuda¡ pic16f873a delays
Publicado por: gaitan en 26 de Septiembre de 2018, 01:03:35
gracias por responder pero quisiera saber con que linea de codigo ejecuto el xor, y para incrementar el numero de veces utilizo un for?
Título: Re:ayuda¡ pic16f873a delays
Publicado por: KILLERJC en 26 de Septiembre de 2018, 07:18:26
Un for o un if.. Por ahi te sea mas simple utilizar varias variables ( 1 para cada salida por ejemplo ) luego lo podes intentar reducir a 1 sola cuando entiendas que estas haciendo.

Para hacer la XOR lo haces con:

Código: C
  1. PORTB.F3 ^= 1;

La ventaja que tenes es que si estaba en 1 pasa a 0, y si estaba en 0 pasa a 1. Es decir, invierte el estado del bit.
Título: Re:ayuda¡ pic16f873a delays
Publicado por: gaitan en 16 de Octubre de 2018, 03:04:31
muchas gracias por su colaboración  :) al final lo logre con el timer 0 del micro. Muy buen foro  ;-)