51单片机串口发送数据控制双舵机达到云台效果实现定位

舵机无法运转,串口接收不到信号

不知道编程思路是否有误,如何改进以实现效果
#include <REGX52.H>
#include <intrins.h>

    //舵机信号输入端

#define Sevro_moto_pwm1 P2_7
#define Sevro_moto_pwm2 P2_5

unsigned char pwm_val_left1 = 0;//变量定义
unsigned char pwm_val_left2 = 0;//变量定义
unsigned char push_val_left[2]={20,20};
unsigned int Angle[2]={0x5A,0x5A};
int count=0;

void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;;
}

  • 函数名 :UsartInit()
  • 函数功能 :设置串口

void UsartInit() // 9600bps
{
SCON=0X50; //设置为工作方式1
TMOD&=0X0F;
TMOD|=0X20; //计数器工作方式2
PCON=0X7F; //波特率加倍
//PCON &= 0x7F; //波特率不加倍
TH1=0XFD; //计数器初始值设置,波特率是4800
TL1=0XFD;
ES=1; //打开接收中断
ET1 = 0;
EA=1; //总中断
TR1=1; //计数器
}

/*调节push_val_left的值改变舵机占空比 */
void pwm_Servomoto(void)
{
if(count==0)
{
if(pwm_val_left1<=push_val_left[1])
Sevro_moto_pwm1=1;
else
Sevro_moto_pwm1=0;
if(pwm_val_left1>=200)
{
pwm_val_left1=0;
}
}

    if(count==1)
    {
        if(pwm_val_left2<=push_val_left[2])
            Sevro_moto_pwm2=1;
        else 
                 Sevro_moto_pwm2=0;
        if(pwm_val_left2>=200)
        {
            pwm_val_left2=0;
        }
    }
        
    

}

void time1()interrupt 1 using 2
{
TH0=(65536-100)/256; //100US定时
TL0=(65536-100)%256;
pwm_val_left1++;
pwm_val_left2++;
pwm_Servomoto();
}

void Usart() interrupt 4
{
if(RI==1)
{
Angle[count]=SBUF;//出去接收到的数据
UART_SendByte(Angle[count]);
push_val_left[count]=1/9*Angle[count]+5;
count++;
count%=2;
RI=0;
}
}

void main(void)
{

TMOD=0X21;//根据器件手册选择想要的功能进行设置,我这里同时用了定时器0,1
TH0=(65536-100)/256;      //100US
TL0=(65536-100)%256;    
ET0= 1;                    
TR0= 1;//打开计数器
UsartInit();        

while(1);       /*无限循环*/

}

用两个变量产生PWM
电脑发送两个数据,分别控制两个舵机(水平方向竖直方向,发送坐标实现定位)

屏蔽计时器0试试uart是否能通信