• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机串口通信为什么发出的字节最后会自带0XFF

sjsjling 2018-06-20 浏览量:3360
为什么单片机发出的字节最后会自带0XFF?
代码如下:
  1. #include <REG52.H>
  2. #define uchar unsigned char
  3. uchar aflagi;
  4. uchar code table[]={0xff0x010x000x000x020x000x000x030x000x000x040x000x000xee};
  5. void main()
  6. {
  7.         TMOD=0x20;//定时器工作方式,8位数据自动重装
  8.         TH1=0xFD;//高8位,低8位装入的初值一样
  9.         TL1=0xFD;//串口通信方式为1,波特率为9600bps,装入初值;
  10.                  //SMOD所在的PCON寄存器中的值默认为0所以SMOD为0;
  11.         TR1=1;//打开定时器
  12.         REN=1;//打开串口允许接收位
  13.         SM0=0;//串口通信方式为1
  14.         SM1=1;        
  15.         EA=1;//打开总中断
  16.         ES=1;//串口中断允许位
  17.         while(1)
  18.         {
  19.                 if(flag==1)//中断函数开始
  20.                 {
  21.                         ES=0;//关闭中断允许位,防止出错
  22.                         for(i=0;i<14;i++)//传送固定字符位
  23.                         {
  24.                                 SBUF=table[i];
  25.                                 while(!TI);//判断有无中断申请
  26.                                 TI=0;//传输数据后清零
  27.                         }
  28.                         SBUF=a;//将期望字符送给传送SBUF缓冲寄存器
  29.                         while(!TI);//传输申请中断
  30.                         TI=0;//清零
  31.                         ES=1;//串口中断允许位
  32.                         flag=0;//标志位清零
  33.                 }

  34.         }

  35. }
  36. void ser() interrupt 4
  37. {

  38.         RI=0;//将要接收数据中断申请,RI清零
  39.         P1=SBUF;
  40.         a=SBUF;//SBUF中为接收的数据
  41.         flag=1;//标志位置1        
  42. }

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你的中断接收函数里面有个a=SBUF;//SBUF中为接收的数据,你的上位机有发送过数据给单片机?另外,你的主函数中有这个:

    QQ截图20180620153708.png

    这样的话,在你的发送完table中的数据之后,自然还会多发一个变量a的值,至于a的值是多少,应该是你上位机发送的数据。


    • 发布于 2018-06-20
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:7
  • 你的数组里数据发完以后,又多发了一个a,a是0xff吗?
    • 发布于2018-06-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的程序中,在用for发完数据后,又有一个SBUF=a;又发了一个
    • 发布于2018-06-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是在程序里面多发了SBUF=a,这个明显多发了一个
    • 发布于2018-06-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 你在发完那14个指定字符之后又执行了

    SBUF=a;//将期望字符送给传送SBUF缓冲寄存器

    这句程序里面的a是否是0xff​

    • 发布于2018-06-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 仔细看你的程序,你在发完数据后又传输了一个SBUF=a,这个应该是原因
    • 发布于2018-06-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 0xff其实是你预设给SBUF寄存器写入的字符,是最后执行的SBUF=a。

    • 发布于2018-06-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是你程序的问题,你在最后又发送了一个SBUF=a
    • 发布于2018-07-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机串口通信为什么发出的字节最后会自带0XFF