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;   //波特率加倍后就能正确通信,实在不解


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
liujinyi016
1楼-- · 2019-07-15 15:06
中断占用时间太长,丢了数据了
freedom_lq
2楼-- · 2019-07-15 17:43
建议参考一下STC官方的官方例程。
wulinwl
3楼-- · 2019-07-15 22:08
 精彩回答 2  元偷偷看……
海尔号
4楼-- · 2019-07-16 00:49
中断里面处理数据很容易丢失数据,而且你最好在发送和接收之间稍微加一下延时

一周热门 更多>