不知道编程思路是否有误,如何改进以实现效果
#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;;
}
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); /*无限循环*/
}
屏蔽计时器0试试uart是否能通信