微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为何串口助手第一下不稳定

为何串口助手第一下不稳定

时间:10-02 整理:3721RD 点击:
写了一个特别简单的程序   但是不知为何 用串口调试助手时候   有不稳定因素产生
程序如下
#include<reg51.h>
int statu;
int dat;
void UsartConfiguration();  //初始化

void main()
{
        //int receiveData;
        UsartConfiguration();
        while(1)
        {
            if(RI)
         {
               dat=SBUF;
             P2=dat;
             RI=0;         
          }
       }          
}

void UsartConfiguration()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;
        RI=0;                                        //打开计数器
}

P2控制流水灯    每次关闭单片机 然后重新启动时候  发送的第一个指令都是无效的,从第二个开始,流水灯才能正常工作,这是为什么?


突然发现 初始化程序里加一句话  TI=1,就没有问题了    虽然不知道为什么?

串口助手在此期间没关闭过串口吧?此外,明明是8位的数据,为什么要用16位有符号数保存?

不对哦,是这么一个区别 a--->A..数字0  对应ascii 0x30,,
错了  ,!

这个不是串口的问题!你上位机的串口一直检测接收信号 满足起始位停止位条件就把数据存入缓存 你软件开着自然就显示了 它哪里管你数据对错!你TI = 1; 初始化单片机的TXD 引脚为高  上位机没有检测到起始条件 自然就不做接下来的事了(采样引脚电平等),

没看懂你想表达什么,但串口一次只能接收一个8位数据这是确定的,所以应该用8位无符号数保存较为恰当。ASCII码当然是8位的

十六进制  是进制!不是位宽!0xff  位宽8位  这个是十六进制表示!

这位兄弟显然还是没搞清楚我到底要说什么。进制只是数值表示的形式,串口传输是以字节为单位的,一字节就是8位,即使你用16位数据空间去保存也只是利用了空间的低8位,而且还给单片机运行带来额外运算开销,降低效率,尤其还是用有符号数的时候。

oh!  法克,没看到程序。理解错了

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

网站地图

Top