串口控制舵机的问题

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;
                           }
                }



}

却没有任何反应了。这次之前我将串口部分屏蔽,将按键控制舵机写进去,发现舵机是又能正常工作了,想请教大神是哪里出问题了。如果有已经调试成功的程序希望可以分享下些谢谢!

0条回答

一周热门 更多>