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 Reply Children
  • You don't need to set pins as output, they're all pseudo-bidirectional. You write out to them an they'll attempt to drive that level (port 0 is open drain so you'll need a pull-up, actually, I often pull all my ports up). To read a port just write a one to the pin and then read it.

    For the UART and TxD the pin just works as an output, nothing for you to do. It's not like the PIC.