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

serial communication

I am using a Atmel AT89C51 and I am having trouble doing serial communication. Here is what I am trying:

#include <AT89X51.H>
#include <STDIO.H>
#include <intrins.h>

int i,j;

void main()
{
PCON |= 0x00; /* don't double baud rate */
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 253; /* TH1: reload value for 9600 baud @ 11.0592 MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */

do{
P1 = P2;
printf("i got a pocket full");
putchar(0x20);
for(j=0; j<255; j++);
{
for(i=0; i<255; i++)
{
_nop_();
_nop_();
}
}
printf("yyyyyyy\n\n");
}while(1);
}

Any suggestions as to what I should try would be appreciated. Thanks.

Parents
  • I just want to have a simple program to print something out using hyperterminal. Also it would be nice to receive a character and echo it back. I have been able to do this in assembly but I can't get it to work in C. Here is the latest code I have tried:

    #include <AT89X51.H>
    #include <CTYPE.H>
    #include <STDIO.H>

    int i;

    void main()
    {
    SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr
    TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
    TH1 = 0xFD; //TH1: reload value for 9600 baud @ 11.0592MHz
    TR1 = 1; //TR1: timer 1 run
    TI = 1; //TI: set TI to send first char of UART

    while (1)
    {
    P1 ^= 0x01;
    printf ("\n\nHello World\n\n");
    i = _getkey();
    putchar('$');
    putchar(i);
    }
    }

    Is there anything wrong with my code? Or is there something in how I am compiling? I am confident my hardware is fine because I can get it to work in assembly. Any help would be appreciated. Thank you.

Reply
  • I just want to have a simple program to print something out using hyperterminal. Also it would be nice to receive a character and echo it back. I have been able to do this in assembly but I can't get it to work in C. Here is the latest code I have tried:

    #include <AT89X51.H>
    #include <CTYPE.H>
    #include <STDIO.H>

    int i;

    void main()
    {
    SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr
    TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
    TH1 = 0xFD; //TH1: reload value for 9600 baud @ 11.0592MHz
    TR1 = 1; //TR1: timer 1 run
    TI = 1; //TI: set TI to send first char of UART

    while (1)
    {
    P1 ^= 0x01;
    printf ("\n\nHello World\n\n");
    i = _getkey();
    putchar('$');
    putchar(i);
    }
    }

    Is there anything wrong with my code? Or is there something in how I am compiling? I am confident my hardware is fine because I can get it to work in assembly. Any help would be appreciated. Thank you.

Children