hace un bucle con el compilador C18 en mplabide para 18f4550

1

Estoy enfrentando problemas con el encendido de varios LED simultáneamente en un microcontrolador 18f4550 bajo el mismo "while (1)". Soy nueva programacion [Compilador C18 con Mplab ide.]

Pude alternar el parpadeo del LED RB0 y RB1 con una parte del código que se encuentra en la web al configurar los pines RB a la salida y luego hacerlos altos.

#include<pic18f4550>
// Chip config and setting for make RB pins output 

void main(void) // Main block
   {

   While(1)
        {
          blink-RB-two-led-alternatively-forever(); // a function prototype for blinking RB0 and RB1 Alternatively. 

         } // loop forever 

   }

Eso funciona bien sin ningún problema. También puedo hacer lo mismo con los pines PortD. Sin problemas.

Pero quiero que RD0 y RD1 parpadeen alternativamente, simultáneamente con RB0-RB1.

Significa que cuando enciendo el pic18f4550 deseo obtener tanto RB0-RB1 como RD0-RD1 Flash alternativamente y simultáneamente.

He intentado esto. Pero no funcionó.

void main(void) // Main block
   {

   While(1)
        {
          blink-RB-two-led-alternatively-forever(); // a function prototype for blinking RB0 and RB1 Alternatively. 

          blink2-RD-two-led-alternatively-forever(); // a function prototype for blinking RD0 and RD1 Alternatively. 

         }

   }

El bucle entra en "parpadeo-RB-dos-led-alternativamente-para siempre ();" mantiene el parpadeo de los pines RB0 y RB1 y nunca llega a la Segunda función Prototipo.

Si cambio el orden, entonces RD0 -RD1 comienza a parpadear alternativamente, pero nunca llega a PortB.

Por favor, sugiéreme una solución. Cómo hacer que ambas cosas funcionen simultáneamente.

Muchas gracias de antemano.

    
pregunta Sanju

1 respuesta

1

Suena como la función "blink-Rx-two-led-alternativamente-forever ();" En realidad permanece en el bucle para siempre.

No tenemos el código para esta subrutina, pero supongo que el código cumple la primera función (la que usted coloque primero, como describió), entra en ella y parpadea el LED para siempre, como Dice en el nombre del prototipo.

Si desea parpadear ambos LED, comience por inicializar los puertos B y D en las salidas (el registro TRISx). Luego, ingrese el bucle while (1) [1], exclusivo O cada bit, y agregue un retardo para establecer el tiempo o parpadeará tan rápido que se verá oscuro. Una demora puede ser tan simple como configurar un bucle for con un número grande y disminuir hasta que llegue a 0.

EDITAR: La operación OR exclusiva cambia un bit (un 1 se convierte en un 0 y un 0 se convierte en un 1), por lo que, por ejemplo, para la variable uint8_t my_light, para alternar el bit 0, escribiría:

my_light ^ = 0b00000001;

o podrías escribir: my_light = my_light ^ 0b00000001;

El "^" es la operación OR exclusiva .

Además, si va a utilizar C, obtenga una copia de Kernighan and Ritchie ; No podría hacerlo sin él.

[1] a for (;;) para crear un bucle infinito a menudo se prefiere usar while (1)

    
respondido por el Bob

Lea otras preguntas en las etiquetas