单片机串口程序,单片机只能发送不能接收?为什么?

2019-07-15 17:45发布

初始化,硬件和连线是没有问题的,因为用其他串口范例程序能够发送和接受。感觉是do...while语句有问题。

//串口试验程序
  /*电脑向单片机发送数据,单片机返回该数据给电脑*/

#include<c8051f310.h>
#define SYSCLK  24500000
#define BUADRATE 9600

void SYSCLK_Init(void);
void UART0_Init(void);
void PORT_Init(void);

void main(void)
{

   unsigned char temp;
   PCA0MD &= ~0x40;               
   PORT_Init();                  
   SYSCLK_Init ();                  
   UART0_Init();

do{
   while(RI0==0);
   temp=SBUF0;
   RI0=0;
   temp=SBUF0;
   while(ti0==0);
   TI0=0;
   }while(1);          
}

void PORT_Init(void)
{
  P0MDOUT = 0x10;//P0.4 digital push-pull uart TX
  XBR0    = 0x01; //Configure the crossbar and GPIO ports       
  XBR1    = 0x40;//P0.5 digital open-drain uart RX
}

//-------------------------------------------------------------------------------------
void SYSCLK_Init(void)
{
  OSCICN = 0x83;//internal oscillater  at it maximum frequncy
  RSTSRC = 0x04;//enable missing clock detecter
}
//--------------------------------------------------------------------------------------

void UART0_Init(void)
{
SCON0 = 0x00;              // SCON0: 8-bit variable bit rate
                            //        level of STOP bit is ignored
                            //        RX enabled
                            //        ninth bits are zeros
                            //        clear RI0 and TI0 bits


   CKCON = 0x00;
   TH1=0x96;
   TL1 = TH1;                          // Init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;                       
   TR1 = 1;                            // START Timer1
}  


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。