• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

avr atmega16单片机舵机问题 不按指示走

a049f48b0d2d2dc5 2020-06-05 浏览量:449
#include <avr/io.h>       12m晶振 想0度和45度之间转sg90舵机
#include <util/delay.h>
#include <avr/interrupt.h>
#define  BIT(x) (1<<x);
unsigned typedef char u8;
u8 jsi;
void pz()//配置步进电机IO口输出
{        DDRB|=BIT(3);
        DDRB|=BIT(2);        
        DDRB|=BIT(1);
}

void BJDJ()//配置步进电机IO口
{        PORTB|=BIT(2);        
        PORTB&=~BIT(1);
}
void dsp()//配置定时器
{        TCCR1B=0x04;        
        TIMSK=0x04;        
        sei();        
       TCNT1H=0xff;        
       TCNT1L=0xfa;
}
ISR (TIMER1_OVF_vect)//定时器1
{        TCNT1H=0xff;//设置初值 定时时间0.1毫秒         
         TCNT1L=0xfa;        
          js++;
                if(js<=200)        
           {                  if(js<=5)                
                          PORTB|=BIT(3);                
                          if(js>5);                
                         PORTB&=~BIT(3);        
           }
      else
        {                i++;                
                   if(i<=200)                
             {                        
                          if(i<=10)                        
                          PORTB|=BIT(3);                        
                          if(js>10);                         
                          PORTB&=~BIT(3);                
             }
                   else                
                 {                i=0;                        
                                 js=0;                  
                   }
   }        
    }

int main(void)
{        unsigned char kp;        
         pz();        
         BJDJ();        
          dsp();        
         while(1);
}
     
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 要说明,是走的多还是走的少了,是有规律的还是乱走的。

    一般的问题就是定时器的时间设置有问题,导致每次定时的时间不同

    • 发布于 2020-06-18
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:0

相关问题

问题达人换一批

avr atmega16单片机舵机问题 不按指示走