Hola, haber si te ayudo
* solucion 1: Has programado correctamente los puertos como entrada o salida?
Toma un ejemplo:
void init_system (void)
{
P0 = 0x00; // puerto 1 como salidas, DAC, RELES, LCD
P1 = 0x00; // puerto 1 como salidas, control...
P2 = 0x0F; // teclado 4 bits lsb entradas, 4 bits msb salidas
P3 = 0X10;
}
* Solucion 2: Has puesto las resistencias de pull-up de los puertos?
Se colocan entre +Vcc y el pin del puerto, con unas de 10 k te valdran
* Solucion 3: Creas correctamente el reset?
Te recuerdo que si no hay reset el micro no funciona correctamente, con un condensador de 10 uF y una resistencia de 10k creas correctamente el reset tras encendido.
#include AT89C51.h /* LIbreria para la gestion de las direcciones de memoria
de los dispositivos y puertos del 89C51 */
main()
{
unsigned int i,x;
init_system()
while (1)
{
for (i=0;i<10000;i++)
P0.0 = ~P0.0;
}
Con este pequeño programa, puedes ver por el puerto 0 pin 0 un a señal cuadrada,
la frecuencia la determinara el Xtal que tengas puesto, te acosejo uno pequeño para verlo.
Por cierto prueba a programarlo con el Keil C, tiene un debuger bastante majo que te puede ayudar a detectar tu problema. La version demo te permite hasta 2k de codigo en cualquier micro sin el soporte para calculos en coma flotante. Un saludo.