×
单片机 > 单片机程序设计 > 详情

PIC16F877A一路舵机参数化控制程序

发布时间:2020-05-16 发布时间:
|
;**    日期:  2010年.10月
;**    描述:  一路舵机参数化控制
;**    功能:  用Time1中断,RD6口输出
;**    晶振:       12M         
;**    适用机型:  PIC16F877A,TowerPro MG995
*********************************************************************************/
#include
#define uchar unsigned char
#define uint  unsigned int
uint f;
uchar servo_angle_H;
uchar servo_angle_L;
uchar compensate_L;
uchar compensate_H;
void delay(uint x)
{
      uint a,b;
      for(a=x;a>0;a--)
           for(b=110;b>0;b--);
}
void init()
{
      TRISD=0x00;
      PORTD=0x00;
      INTCON=0xc0;
      PIE1=0x01;
      TMR1L=0;  
      TMR1H=0;  
      T1CON=0x21;
       f=0;
}
void servo(uint angle)
{
      uint temp,value;
      value=(65536-368)-(75*angle)/9;
      temp=(65536-14617)+(75*angle)/9;
      servo_angle_H=value%256;
      servo_angle_L=value/256 ;
      compensate_L=temp%256;
      compensate_H=temp/256;
}
void main()
{
      init();
      uint angle;
      servo(0);
      delay(200);
      while(1)
      {
             for(angle=0;angle<181;angle++)
            {
                 servo(angle);
                 delay(100);
            }
            for(angle=180;angle>0;angle--)
            {
                 servo(angle);
                 delay(100);
            }
      }
}
 
void interrupt time1()
{
      TMR1IF=0;
       f=~f;
       if(f==0)
       {
             TMR1L=servo_angle_H;
             TMR1H=servo_angle_L;       
              RD6=1;
       }
       else
       {
              TMR1L=compensate_L;
              TMR1H=compensate_H;
               RD6=0;
         }
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计