微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口控制舵机的问题

串口控制舵机的问题

时间:10-02 整理:3721RD 点击:
首先是本人用键盘控制舵机的程序
#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;
                           }
                }

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

来过

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top