自己写了一个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让舵机转到其位置
}

}
展开
 我来答
he_123456
2017-03-24 · TA获得超过2892个赞
知道大有可为答主
回答量:3162
采纳率:58%
帮助的人:1346万
展开全部
只是代码碎片不容易确定问题,例如:
timer=0;
while(timer<=800);
不知道timer是被谁改变的?另外的中断?如果没地方改变的话显然就死循环了。
追问
产生pwm的中断,每100微秒timer++,全都粘上去空间不够,有空吗,帮我看看,我吧源码发过去,舵机,串口通讯都可以执行但是,i得值就是不变化
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式