-
Notifications
You must be signed in to change notification settings - Fork 0
/
Servo.c
78 lines (69 loc) · 1.32 KB
/
Servo.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <REGX52.H>
#include "Delay.h"
static int k=0;
sbit signal=P1^0; //SG90PMW的引脚接线的时候要注意接到这个口
//旋转度数的宏定义,更改旋转角度
#define spin0 1
#define spin45 2
#define spin90 3
#define spin135 4
#define spin180 5
unsigned int spin;
void timer_init() //0.5ms定时器初始化
{
TMOD=0x01; //定时器0工作模式16位计数器
ET0=1; //允许定时器0中断
TR0=1; //开启定时器0中断
EA=1; //开启总中断
TH0=0xFE;
TL0=0x33; //0.5ms定时对应到Unlock里面那个Delay(500)
}
void timer_close()
{
ET0=0; //不允许定时器0中断
TR0=0; //关闭定时器0中断
EA=0; //关闭总中断
}
void Timer0() interrupt 1
{
TR0=0; //关闭计数
k=k+1;
TH0=0xFE;
TL0=0x33; //重置使得下次定时器只计时0.5ms
if(k<=spin)
{
signal=1;
}
else
{
signal=0;
if(k==40)
{
k=0;
}
}
TR0=1; //开启计数
}
void delayms(int ms)
{
int i,j;
for(j=ms;j>0;j--)
for(i=110;i>0;i--);
}
void Unlock()
{
P1=0x00;
timer_init(); //0.5ms定时器初始化
spin=spin180;
delayms(500);
timer_close(); //关闭其中断
}
void Lock()
{
P1=0x00;
timer_init(); //0.5ms定时器初始化
spin=spin0;
delayms(500);
P1=0x00;
timer_close(); //关闭其中断
}