串口控制舵机的问题
2019-07-14 20:01发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
首先是本人用键盘控制舵机的程序
#include<reg52.h>
sbit jia=P3^3;
sbit jian=P3^4;
#define uchar unsigned char
sbit pwm=P1^7;
uchar count,jd;
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}
void timer0_init()
{
TMOD=0x01;
IE=0x82;
TH0=0xfe;
TL0=0x33;
TR0=1;
}
void timer0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd)
pwm=1;
else
pwm=0;
count=(count+1);
// if(count==40)
// TR0=0;
count=count%40;
}
void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
jd++;
count=0;
if(jd==6)
jd=5;
while(jia==0);
delay(10);
while(jia==0);
}
}
if(jian==0)
{
delay(10);
if(jian==0)
{
jd--;
count=0;
if(jd==0)
jd=1;
while(jian==0);
delay(10);
while(jian==0);
}
}
}
void main()
{
jd=1;
count=0;
timer0_init();
while(1)
{
keyscan();
}
}
舵机正常转动,通过按键加减45度。
接下来我用串口发送数据来代替按键,程序如下
#include <stc12c5a60s2.h>
#define uchar unsigned char
sbit pwm=P1^7;
uchar count,jd,flag,a;
void timer0_init()
{
TMOD=0x01;
IE=0x82;
TH0=0xfe;
TL0=0x33;
TR0=1;
}
void lanya()
{
TMOD=0x20;
TR1=1;
TH1=0xfd;
TL1=0xfd;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void timer0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd)
pwm=1;
else
pwm=0;
count=(count+1);
// if(count==40)
// TR0=0;
count=count%40;
}
void exter() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
void main()
{
jd=1;
count=0;
timer0_init();
lanya();
while(1)
{
if(flag==1)
{
EA=0;
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
EA=1;
switch(SBUF)
{
case '0':
jd++;
count=0;
if(jd==6)
jd=5;
break;
case '1':
jd--;
count=0;
if(jd==0)
jd=1;
break;
}
}
}
却没有任何反应了。这次之前我将串口部分屏蔽,将按键控制舵机写进去,发现舵机是又能正常工作了,想请教大神是哪里出问题了。如果有已经调试成功的程序希望可以分享下些谢谢!
一周热门 更多>