51单片机串口接收十六进制数组数据有误

来源:百度知道 编辑:UC知道 时间:2024/05/17 08:13:31
我用VB做为上位机通过串口发送一组数据给51单片机,让单片机去控制步进电机运动.但实验了好久都还不能正常工作,请能人帮忙一下.

VB的发送程序如下:
Dim sende(0 To 3) As Byte
sende(0) = "&H" & Text1.Text

sende(1) = "&H" & Text3.Text

MSComm1.Output = sende

text1.text是正反转标志位
text2.text是电机要转的圈数

单片机的接收程序如下:
void serial () interrupt 4 using 3

{ uchar a;

a=0;
RI=0;

str[a++] =SBUF;

iab=str[0];
// iab=1;
n=str[1];

flg=1;

}
iab是正反转标志位,
n为步进电机要转的圈数,都是全局变量

步进电机正反转程序没有问题,因为如果我在下位机中把电机要转的圈数定义为常数,比如:n=5时,步进电机可以按要求正反转,但如果用到n=str[1]时(通过上位机来控制电机的转数),电机就不能动了,谁知道我的程序错在哪里了?

单片机程序好像有问题

void serial () interrupt 4 using 3

{

RI=0;

iab =SBUF;
while(!RI){
RI=0;
n =SBUF;

flg=1;

}

///////////////////////////////

void serial () interrupt 4 using 3

{ uchar a;

a=0; //每次都会初始化为零
RI=0;

str[a++] =SBUF; //所以每次都是str[0]=SBUF;str[1]永远都没有得到更新

iab=str[0];
// iab=1;
n=str[1];

flg=1;

}

Dim sende(1) As Byte
sende(0) = Val("&H" & Text1.Text)
sende(1) = Val("&H" & Text3.Text)
MSComm1.Output = sende
这样才发送2字节指令,你代码是发了4字节指令.