微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手求助帖:串口控制LED灯的问题

新手求助帖:串口控制LED灯的问题

时间:10-02 整理:3721RD 点击:
刚接触串口通信,遇到一个问题,希望大家解答
串口控制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呢?


  

  当发送aa和ff的确可以全亮或者全灭。并且低四位的LED灯能准确控制,就是当发送01到0f都能正确显示。

但当发生的数据的高四位不为0时,LED灯就不能准确显示了。比如当我发送是1f时,理论来说,LED灯应正确显示10001111,就是第五、第六、第七位的灯会亮。而实际上它显示是:00111111。
  再比如我发送是3f,而实际上LED灯显示的是01111111.就是只有最高位亮,其他都是灭的。
  为什么是这样子的呢?望解答!

你用的是什么单片机,还有实际波特率是否和要求一致

  我用的是STC89C52芯片,波特率没错。还有我表达有误,应该是:比如当我发送是1f时,理论来说,LED灯应正确显示00011111,就是第六、第七位、第八的灯会亮。而实际上它显示是:00111111。
  你觉得哪里有错呢?

那是由于你用串口助手的时候没选 波特率,不要看上边是9600就不选 一定要再选一次,一定可以的

TH1=0xFD;
  TL1=0xFD
改为TH1=OxF9;
       TL1=0xF9;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top