为啥这个程序上位机不能显示返回值 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;
}
会发现一个问题,因为显示方式为十六进制,所以不能达到你要以十进制方式显示1到255的目的。
#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就不需要了
- #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;//i循环意义何在?
- flag=1;
- }
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;
谢谢 十分感谢