📄 servo.c
字号:
#include <REGX52.H>
#define SERVO_CONTROL P2_0 //Servo's control pin
//Servo
void driveServo(void);
//Timer 0
int t0Counter = 0;
//Servo
unsigned int servoCounter = 0; //Servo Counter
unsigned char servoPos = 0; //set Servo's Position
void main(void)
{
IE = 0x82; //Interrupt enable
TMOD = 0x02; //Mode 2
//Timer0
TL0 = 156; //0.1ms
TH0 = 156; //0.1ms
TR0 = 1;
//Servo
SERVO_CONTROL = 0; //Init
while(1);
}
void T0_int(void) interrupt 1
{
//T0 Counter
t0Counter++;
if(t0Counter>=10000) //0.1s
{
t0Counter = 0;
if(servoPos<20)
servoPos+=1; //set servo's Position (0-20)
else
servoPos=0; //set servo's Position (0-20)
}
//Servo
driveServo();
}
/*************************************
Send control signal to servo
call it when each interrupt occur
Timer 0 value
TL0 = 156; //0.1ms
TH0 = 156; //0.1ms
*************************************/
void driveServo(void)
{
//**send signal to servo**
//
servoCounter++;
//T = 200*0.1ms = 20ms
if(servoCounter<=5+servoPos) //duty cycle : high
{
SERVO_CONTROL = 1;
}
else if(servoCounter<=200) //low cycle
{
SERVO_CONTROL = 0;
}
else
{
servoCounter = 0; //repeat
}
//
//**end send signal
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -