微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为啥这个程序上位机不能显示返回值 i

为啥这个程序上位机不能显示返回值 i

时间:10-02 整理:3721RD 点击:
为啥这个程序上位机不能显示返回值 i 这是为什么 大神们
#include <reg51.h>
unsigned char flag,a;
int i;
void main ()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
while(1)
        {
                if(flag==1)
                {       
                        ES=0;
                        flag=0;
                        SBUF=i;
                        while(!TI);
                        TI=0;
                        SBUF=a;
                        while(!TI);
                        TI=0;
                        ES=1;                       
                }
        }
}
void inti () interrupt 4
{
        RI=0;
        a=SBUF;
        P0=SBUF;
        i=0;
        i++;
        if(i==256)
                i=0;
        flag=1;
}

void inti () interrupt 4
{
? ? ? ? RI=0;
? ? ? ? a=SBUF;
? ? ? ? P0=SBUF;
? ? ? ? i=0;
? ? ? ? i++;
? ? ? ? if(i==256)
? ? ? ? ? ? ? ? i=0;
? ? ? ? flag=1;
}
你每次进入中断都i=0;i++;那就是i永远都是1了

那应该怎么改 求指导 谢谢 那把i=0放外面?

在最前面那个int i改回unsigned int i,那个i=0就不需要了

  1. #include <reg51.h>

  2. unsigned char flag,a;
  3. int i;

  4. void main ()
  5. {
  6.         TMOD=0x20;
  7.         TH1=0xfd;
  8.         TL1=0xfd;
  9.         TR1=1;
  10.         REN=1;
  11.         SM0=0;
  12.         SM1=1;
  13.         EA=1;
  14.         ES=1;

  15. while(1)
  16.         {
  17.                 if(flag==1)
  18.                 {        
  19.                         ES=0;
  20.                         flag=0;
  21.                                                SBUF=i; //这个做什么的?
  22.                         while(!TI);
  23.                         TI=0;
  24.                         SBUF=a;
  25.                         while(!TI);
  26.                         TI=0;
  27.                         ES=1;                        
  28.                 }
  29.         }
  30. }

  31. void inti () interrupt 4
  32. {
  33.         RI=0;
  34.         a=SBUF;
  35.         P0=SBUF;
  36.         i=0;
  37.         i++;
  38.         if(i==256)
  39.                 i=0;//i循环意义何在?
  40.         flag=1;
  41. }

复制代码

SBUF='C'
右边要写字符或ASCII码
你写一个SBUF=i,什么意思?

我想输出i的值 比如说 子函数那个当i=2时 SBUF输出2
不知道怎么做

首先我也是新手,也是最近才开始接触到单片机,最近刚刚看到串口通讯,有什么不对的地方,还请见谅。
1.你程序的问题,二楼已经指出来了,中断中i=0这条语句是多余的。
   还有就是main函数中,REN=1这条语句放在main最后,这个不放的话单片机上电后默认SM0和SM1为零,如果先使REN=1,就会接受串口数据,但这个数据不是你发送的,是单片机和上位机之间的通讯数据,会影响实验。
2.你用的是串口调试助手吗?是的话看下面。
串口调试助手有两种显示和输入方式,十六进制和ASSIC码,这两种。因为你要输出,SBUF=i,你这里i采用的是十进制(i在0到256之间变化),若只按我上面的两条该好程序的话,就能显示了,调试结果如下(要选择串口调试助手显示和发送方式为十六进制)


会发现一个问题,因为显示方式为十六进制,所以不能达到你要以十进制方式显示1到255的目的。

忘了一点,在定义int i时,就因该给i赋值,int i=0;

谢谢 十分感谢

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

网站地图

Top