新手求助帖:51单片机串口控制LED灯

2019-03-24 18:58发布

刚接触51单片机的串口知识,遇到一个问题,希望大家解答
串口控制LED灯的程序:
#include<reg52.h>
unsigned char flag;
unsigned char temp;
main()
{
  TMOD=0x20;
  TH1=0xFD;
  TL1=0xFD;
  TR1=1;
  EA=1;
  ES=1;
  SCON=0x50;      
  while(1)
  {
  if(flag==1)
    {
        ES=0;
        flag=0;
        SBUF=temp;
        while(!TI);
        TI=0;
        ES=1;
        }
  }
}
void ser() interrupt 4
{
  RI=0;
  P0 = SBUF;
  temp = SBUF;
  flag=1;
}
  理论来说程序的发送和接收的数据是一致的。
  我用串口调试助手这软件,发现发送的数据为什么和PC机接收的数据不一样的呢?如图,
我的发送框中分别是:01 55 aa ff 00,为什么PC机中接收的数据是:81,F5,8A,FF,80呢?
   111112.jpg
  当发送aa和ff的确可以全亮或者全灭。并且低四位的LED灯能准确控制,就是当发送01到0f都能正确显示。
但当发生的数据的高四位不为0时,LED灯就不能准确显示了。比如当我发送是1f时,理论来说,LED灯应正确显示10001111,就是第五、第六、第七位的灯会亮。而实际上它显示是:00111111。
  再比如我发送是3f,而实际上LED灯显示的是01111111.就是只有最高位亮,其他都是灭的。
  为什么是这样子的呢?望解答! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。