是什么原因导致仿真时vb不能控制电机转动

程序编译没报错,但是上位机控制不了下位机。
#include<reg51.h>//C51系列单片机库文件
#include<intrins.h>//库函数调用,延时_nop_函数库
#include<Delay.h> //延时函数库
#define uchar unsigned char//宏定义 简化程序编写
#define uint unsigned int
uchar temp;
char strTemp[20]; //定义一个字符串缓存
bit TX1_Busy; //串口发送忙标志 1为忙 2为闲
void Send_Onechar(uchar i);
void Send_String(uchar puts);
sbit moto1_en = P1^4;
sbit moto2_en = P1^5;
sbit moto1_a = P1^0;
sbit moto1_b = P1^1;
sbit moto2_a = P1^2;
sbit moto2_b = P1^3;
sbit k1 = P1^6;
sbit k2 = P2^3;
sbit k3 = P2^4;
sbit k4 = P2^5;
sbit k5 = P2^6;
sbit k6 = P2^7;
/串口初始化程序/
void Ser_init()
{SCON = 0x50; //串口工作方式1
TMOD |= 0x20; //等同于 TMOD = TMOD|0x20;
PCON |= 0x00; //将PCON最高位SMOD = 1,将波特率翻倍19200bps
TH1 = 0xfd;
TR1 = 0; //开启定时器1
EA = 1;
ES = 0;}
void moto1_zen()
{moto1_en = 1;
moto1_a = 0:
moto1_b=1;}
void moto1_fan()
{moto1_en = 1;
moto1_a = 1;
moto1_b = 0;}
void moto2_zen()
{moto2_en = 1;
moto2_a = 0;
moto2_b = 1;}
void moto2_fan()
{moto2_en = 1;
moto2_a = 1;
moto2_b = 0;}
void key_scan()
{if(k1==0)
{delay(10);
if(k1==0)
{while(!k1);
moto1_zen();}
}if(k2==0)
{delay(10);
if(k2==0){
while(!k2);
moto1_fan();}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
while(!k3);
moto1_en=0;
}
}
if(k4==0)
{
delay(10);
if(k4==0)
{
while(!k4);
moto2_zen();
}
}
if(k5==0)
{
delay(10);
if(k5==0)
{
while(!k5);
moto2_fan();
}
}
if(k6==0)
{
delay(10);
if(k6==0)
{
while(!k6);
moto2_en=0;
}
}
}

void main(void) //主函数
{
int num = 100;
Ser_init();
while(1)
{
key_scan();
switch(temp)
{
case 1:moto1_zen();break;
case 2:moto1_fan();break;
case 3:moto1_en=0;;break;
case 4:moto2_zen();break;
case 5:moto2_fan();break;
case 6:moto2_en=0;break;
}
}
}
/发送一个字节数据/
void Send_Onechar(uchar d) //发送一个字节的数据,最大255,形参d即为待发送数据。
{
SBUF = d; //将数据写入到串口缓冲
TX1_Busy = 1; //设置发送标
while(TX1_Busy); //等待发送完毕
}
/串口1发送字符串函数/
void Send_String(uchar *puts)
{
for (; *puts == 0; puts++) //遇到停止符0结束
{
SBUF = *puts;
TX1_Busy = 1;
while(!TX1_Busy);
}
}
void UART_SER(void) interrupt 4
{
if(RI)
{
RI = 0;
temp = SBUF;
SBUF = temp;
}
if(TI)
TI = 0;
TX1_Busy = 0;
}