舵机的控制程序

舵机的控制

/**************************************************************************/
#include <c8051f310.h> //C8051F31X系列头文件
sbit Addr1=P3^1;
sbit Addr2=P3^2;
sbit Addr3=P3^3;
sbit Addr4=P3^4; //开关输入
sbit IN0=P1^1; //传感器输入
sbit IN1=P1^2;
sbit TXD=P0^4; //串口通信
sbit RXD=P0^5;
sbit PWM0=P0^0; //PWM信号传输接口
sbit PWM1=P0^1;
sbit PWM2=P0^6;
sbit PWM3=P0^7;
sbit PWM4=P1^0;


unsigned int order1=0,order2=0,bz0=0,B1=0,B2=0,B3=0,B4=0,B5=0,B6=0,B7=0,B8=0,B9=0,B10=0;
unsigned int jd1,jd2,jd3,jd4,jd5; //角度变量



/************************************************************************

子函数

************************************************************************/

//函数名:void PORT_Init(void)**************//
//功能描述:端口初始化**********************//
void PORT_Init(void)
{

P0MDIN=0xff;//P0口
P0MDOUT=0xff;
P0SKIP=0x0C;
P1MDIN=0xff;//P1口
P1MDOUT=0xff;
P2MDIN=0xff;//P2口
P2MDOUT=0xff;
P3MDIN=0Xff;//P3口
P3MDOUT=0xff;


XBR0 = 0x00;
XBR1 = 0xC0;

}


//函数名:void PWM_Init(void)**************//
//功能描述:端口初始化**********************//
void PWM_Init(void)
{
PCA0MD &= ~0x40;
PCA0MD = 0x00;
PCA0CPM0 =0x42; //CCM0为8位PWM方式
PCA0CPM1 =0x42; //CCM1为8位PWM方式
PCA0CPM2 = 0x42; //CCM2为8位PWM方式
PCA0CPM3 = 0x42; //CCM3为8位PWM方式
PCA0CPM4 =0x42; //CCM4为8位PWM方式
PCA0CN = 0x40; // 允许PCA计数器

}


//函数名:void Internal_Crystal(void)*******//
//功能描述:设计内部时钟********************//
void Internal_Crystal(void)
{
OSCICN=0x82; // 不分频
CLKSEL=0x00; // 内部振荡器 24.5MHz
}


//****************延时函数******************//
void delay1(int time)
{
int x,y;
for(x=0;x<1000;x++)
{
for(y=0;y<time;y++) ;

}
}

void delay2(int time)
{
int x,y;
for(x=0;x<100;x++)
{
for(y=0;y<time;y++) ;

}
}


void delay3(int time)
{
int x,y;
for(x=0;x<10;x++)
{
for(y=0;y<time;y++) ;

}
}

//***************Timer函数********************//

void Time_Init(void) //定时器初始化
{
TMOD=0x11; // T1 、T0 工作在方式1
EA=1;
EA=1;
ET1=1;
ET1=1;
ET0=1;
ET0=1;
// IE=0X8A; //开总中断,允许定时0、1 中断
CKCON=0X01;

TH0=0XFC;
TL0=0X02; //24.5MHz,0.5ms

// TH1=0X60;
// TL1=0X7D; //20ms
}


//******************定时器0中断函数************//
void Time0_Int() interrupt 1
{

switch(order1)
{
case 1: PWM0=1;
TR1=1;
TH0=-jd1/256; //定时状态:X=M-定时时间/T
delay3(1);
TL0=-jd1%256;
break;
case 2: PWM0=0;
TH0=-(8140-jd1)

舵机的控制程序相关文档

最新文档

返回顶部