51单片机串口通信 到底哪错了

2019-07-15 08:09发布

#include<reg52.h>


#define uintunsigned int


#define ucharunsigned char


uint a,flag;


void initial()


{


    SCON=0X50;                               //设置为工作方式1


              TMOD=0X20;                                     //设置计数器工作方式2


              TH1=0XFD;                                                       //计数器初始值设置,注意波特率是4800


              TL1=0XFD;


    ES=1;//打开串口中断


    EA=1;//打开总中断


    TR1=1;//启动定时器1


}           





void main ()


{


  initial();


  while(1);


             


              








}


void ser()interrupt 4


{            


     


      a=SBUF; //接收串口发来的值


               RI=0;//接收中断标志位,当串行接收第8位数据结束时,内部硬件使RI1,向cpu发中断申请,用软件清零取消中断申请


               SBUF=a;//向串口发送值


               while(!TI);//串行发送停止位开始,内部硬件使T11,向cpu发中断申请,此处验证数据是否发送结束


               TI=0;//用软件清零取消中断申请
}
若把TH1,TL1改为0xf3,然后加个 PCON=0X80;   //波特率加倍后就能正确通信,实在不解


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