微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机串口程序,单片机只能发送不能接收?为什么?

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

时间:10-02 整理:3721RD 点击:
初始化,硬件和连线是没有问题的,因为用其他串口范例程序能够发送和接受。感觉是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
}  

do{
   while(RI0==0);
   temp=SBUF0;
   RI0=0;
   SBUF= temp0;
   while(TI0==0);
   TI0=0;
   }while(1);         
}
还有就是f310单片机Uart端口初始化时要准许接收。

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
接收使能没打开

的确。后来发现了。还是谢谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top