自己写了一个51单片机的舵机加串口通信的代码,实现目标每次串口中断,i的值加1,舵机的角度值加1, 50
可是现在舵机就只抖了一下,没有转动,代码过多发不了,以下只是主要代码,求大神解答#include<AT89x52.H>volatileinti=14;intp=14;in...
可是现在舵机就只抖了一下,没有转动,代码过多发不了,以下只是主要代码,求大神解答
#include<AT89x52.H>
volatile int i =14 ;
int p = 14;
int set= 0;
void UartConfiguration() //定时器1初始化
{
TH1=0xfd; //设置计数器1的初值,决定波特率
TL1=0xfd; //设置计数器1的初值,决定波特率
PCON=0x00; // 波特率倍增0x00不加倍 0x80加倍
SCON=0x50; //设置工作方式1 开启接受允许
EA=1;
ES=1; //开启串口接受中断
TR1=1; //计数器1开始运行
}
void count_moto() //电机定时器0初始化
{
TH0=(65536-100)/256; //100US定时
TL0=(65536-100)%256;
TR0= 1;
ET1= 1;
ET0= 1;
}
/****************************************************/
////*外部中断服务子函数*****************************/
void Uart() interrupt 4
{
uchar date;
date=SBUF; //取出接受到的数据
RI=0; //清除接受中断标志位
SBUF=date; //接收到的数据放入发送缓存器发送
i=i+8;
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
void main(void)
{
IP =0X10;
TMOD=0x21;
bstv51_init(); //开发板初始化
UartConfiguration();
count_moto();
while(1) /*无限循环*/
{
push_moto1=i; //舵机转动
timer=0;
while(timer<=800); //延时40MS让舵机转到其位置
}
} 展开
#include<AT89x52.H>
volatile int i =14 ;
int p = 14;
int set= 0;
void UartConfiguration() //定时器1初始化
{
TH1=0xfd; //设置计数器1的初值,决定波特率
TL1=0xfd; //设置计数器1的初值,决定波特率
PCON=0x00; // 波特率倍增0x00不加倍 0x80加倍
SCON=0x50; //设置工作方式1 开启接受允许
EA=1;
ES=1; //开启串口接受中断
TR1=1; //计数器1开始运行
}
void count_moto() //电机定时器0初始化
{
TH0=(65536-100)/256; //100US定时
TL0=(65536-100)%256;
TR0= 1;
ET1= 1;
ET0= 1;
}
/****************************************************/
////*外部中断服务子函数*****************************/
void Uart() interrupt 4
{
uchar date;
date=SBUF; //取出接受到的数据
RI=0; //清除接受中断标志位
SBUF=date; //接收到的数据放入发送缓存器发送
i=i+8;
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
void main(void)
{
IP =0X10;
TMOD=0x21;
bstv51_init(); //开发板初始化
UartConfiguration();
count_moto();
while(1) /*无限循环*/
{
push_moto1=i; //舵机转动
timer=0;
while(timer<=800); //延时40MS让舵机转到其位置
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询