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
  • 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.

Reply
  • 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.

Children
No data