This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

89c2051 not booting

Hello,

I am developing a project on IR based remote control switch using 89C2051 uC. I am using Keil uV2 for compiling the code. I have tested my code on a different uC 89V51RD2 and it works fine. But when I am testing it on 89C2051, the uC behaves strangely, sometimes it works fine but sometimes it doesn't boot at all and nothing happens.

I want to know that is there any kind of special setting in Keil uv2 for 2051 uC, or is there something else which I should take care for 2051 uC.

My code is:

int main()
{
        TCON = 0x01;// IE = 0x81;       // For External Interrupt P3.2
        EA = 1;
        EX0 = 1;

        led = 0; toggle = 0;
        delay();
#if MEM
        toggle = read(0x00);    // Passing the addr
#endif

        while(1) {}
}

void tsop_delay1()
{
#pragma asm
        mov R7,#255             ;1.728mS delay for each bit
        djnz R7,$
        mov R7,#255
        djnz R7,$
        mov R7,#255
        djnz R7,$
        mov R7,#30
        djnz R7,$
#pragma endasm
}

void tsop_delay2()
{
#pragma asm
        mov R7,#255             ;1.296ms delay for each bit
        djnz R7,$
        mov R7,#255
        djnz R7,$
        mov R7,#87
        djnz R7,$
#pragma endasm
}

void compare_and_set_cmd(int cmd)
{
        if(cmd == 0x01) {                                                       /* Decimal 2*/
                toggle = !toggle;
#if MEM
                write(0x00, toggle);
#endif
                led = !led;
        }
}
void ext_interrupt(void) interrupt 0
{
        int fieldbit=0, flip=0, addr=0, cmd=0;
        int i;

        if(!tsop) {                                     // 1st bit = 1
                tsop_delay2();
                fieldbit = !tsop;               // 2nd bit = 0 or 1
                tsop_delay1();
                flip = !tsop;                   // 3rd bit 0 or 1
                tsop_delay1();

                for(i=0; i<5; i++) { // 4th to 8th bit = address bits
                        addr |= !tsop;
                        addr = addr << 1;
                        tsop_delay1();
                }
                addr = addr >> 1;

                for(i=0; i<6; i++) { // 9th to 14th bit = command bits
                        cmd |= !tsop;
                        cmd = cmd << 1;
                        tsop_delay1();
                }
                cmd = cmd >> 1;

                compare_and_set_cmd(cmd);
        }
}

Please help!

Thanks