求助:C8051F120的UART1通过串口向电脑发数据,收到的一直是错的,是哪儿的设置错了。

2019-07-15 15:25发布

#include<c8051f120.h>



#define systemclock  11059200
#define baudrate          9600
sbit P0_6=P0^6;
sbit P2_3=P2^3;




void OSCILLATOR_init()
{
   int i;
   char SFRPAGE_SAVE=SFRPAGE;
   SFRPAGE=CONFIG_PAGE;
   OSCICN=0x83;

   OSCXCN=0x67;
   for (i = 0; i < 256; i++);
   while (!(OSCXCN & 0x80));
   SFRPAGE=LEGACY_PAGE;
   FLSCL|=0x30;
   if(systemclock<=25000000)
   {
      FLSCL&=~0x30;
   }
   else if(systemclock<=50000000)
   {
             FLSCL&=~0x20;
   }
   else if(systemclock<=75000000)
   {
             FLSCL&=~0x10;
   }
   else
   {
             FLSCL&=~0x00;
   }
   SFRPAGE = CONFIG_PAGE;

   CLKSEL=0x01;
   SFRPAGE = SFRPAGE_SAVE;
}


void port_init()
{
   char SFRPAGE_SAVE=SFRPAGE;
   SFRPAGE=CONFIG_PAGE;
   XBR0=0x04;
   XBR1=0x00;
   XBR2=0x44;
   P0MDOUT=0xf5;

   P1MDOUT=0xff;
   P2MDOUT=0xff;
   P3MDOUT=0xff;
   SFRPAGE = SFRPAGE_SAVE;
}


void uart1_init()
{
   char SFRPAGE_SAVE=SFRPAGE;
   SFRPAGE=tiMER01_PAGE;
   TCON=0x40;
   TMOD=0x20;
   CKCON=0x10;
   TR1=1;
   SFRPAGE=SFRPAGE_SAVE;


   SFRPAGE=UART1_PAGE;
   SCON1=0x00;
   TI1=0;
   TH1=256-(systemclock/(2*baudrate));
   TL1=TH1;
   SFRPAGE = SFRPAGE_SAVE;
}

void senddata(unsigned char i)
{
   //P0_6=0;
   SBUF1=i;
   while(TI1==0);
   TI1=0;
}

void main()
{
  char SFRPAGE_SAVE = SFRPAGE;
  SFRPAGE = CONFIG_PAGE;
  WDTCN=0xde;
  WDTCN=0xad;
  OSCILLATOR_init();
  port_init();
  uart1_init();         
  EA=1;
  SFRPAGE = SFRPAGE_SAVE;



  while(1)
  {       
    int t,x;
    SFRPAGE = UART1_PAGE;
    senddata(0x55);
        for(t=0;t<300;t++)
        for(x=0;x<400;x++);
        SFRPAGE = SFRPAGE_SAVE;
  }         
}


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