8051 se comporta de manera diferente con dos programas similares

0

Estoy tratando de activar los relés con un 8051. Para esto, P2 está conectado a la matriz ULN2803A de Darlington, y los relés están conectados a las salidas correspondientes del ULN2803A.

Primero, intenté probar si el circuito está funcionando, con este código muy simple:

#include <at89c51cc03.h>

void main()
{
    P2 = 0xFF;
    while (1)
    {
    }
}

No pasó nada. Luego encontré este código en el sitio web de Keil, para volver a conducir los relés:

#include <reg52.h>

#define relayport P2

void Delay_ms(int);

void main()
{
  do
  {
    relayport = 0xFF; //All relays On
    Delay_ms(1000);
    relayport = 0x00; //All relays Off
    Delay_ms(1000);
  }while(1);
}

void Delay_ms(int k)
{
  int j;
  int i;
  for(i=0;i<k;i++)
  {
    for(j=0;j<100;j++)
    {
    }
  }
}

Esto funcionó, por alguna razón ... los relés comenzaron a activarse y desactivarse.

La pregunta es, ¿por qué no funcionó el primer código? Esperaba que el primer código girara y mantuviera los relés encendidos. La variante es AT89C51CC03.

Editar: se observa el mismo comportamiento defectuoso cuando hice lo siguiente, con la intención de activar y desactivar los relés una vez:

void main(){  
    relayport = 0xFF; //All relays On
    Delay_ms(1000);
    relayport = 0x00; //All relays Off
    Delay_ms(1000);
  while(1);
}

Muy raro ... ¿Alguien sabe qué se debe hacer en el caso de que quiera activar los relés una vez y luego ingresar al superloop?

Edit 2: Parece que es un error muy específico, porque el programa también se está comportando normalmente en el depurador de software. Voy a informar a Keil.

    
pregunta Çetin K

0 respuestas

Lea otras preguntas en las etiquetas