📄 servo.lst
字号:
C51 COMPILER V8.02 SERVO 11/10/2007 21:18:44 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SERVO
OBJECT MODULE PLACED IN servo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE servo.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"at89x51.h"
2 unsigned char TL01;
3 unsigned char TH01;
4 unsigned char TL02;
5 unsigned char TH02;
6 int A,C;
7
8 void delay10ms(void) //延时10ms子程序
9 {
10 1 unsigned char i,j;
11 1 for(i=20;i>0;i--)
12 1 for(j=248;j>0;j--) ;
13 1 }
14 void delay02s(void) //延时200ms子程序
15 {
16 1 unsigned char i;
17 1 for(i=20;i>0;i--)
18 1 delay10ms();
19 1 }
20
21
22 void main(void)
23 {
24 1 EA=1; //开总中断
25 1 ET0=1;
26 1 P3_7=0; //脉冲波形起始状态
27 1 TMOD=0x01; //定时,方式0
28 1
29 1 F0=0; //清标志位
30 1 TR0=1; //启动T0
31 1 TL01=0x2E; //舵机0 位,脉宽1.5ms
32 1 TH01=0x0FA;
33 1 TL02=0x0B2;
34 1 TH02=0x0B7;
35 1 while(1)
36 1 {
37 2 if(P1_0==0)
38 2 {
39 3 delay10ms(); //按下,延时,防抖
40 3 if(P1_0==0)
41 3 { //等待释放
42 4 delay02s();
43 4 A=TL01;
44 4 if(A!=0xFF)
45 4 {
46 5 C=0;
47 5 A=A-20;
48 5 if(A<=0)
49 5 {A+=255;C=1;}
50 5 if(C==0)
51 5 {
52 6 TL01=A;
53 6 C=0;
54 6 A=TL02;
55 6 A=A+20;
C51 COMPILER V8.02 SERVO 11/10/2007 21:18:44 PAGE 2
56 6 if(A>=255)
57 6 {A-=255;C=1;}
58 6 if(C==0)
59 6 {TL02=A;}
60 6 else
61 6 {TH02++;TL02=A;C=0;}
62 6 }
63 5 else
64 5 {
65 6 TH01--;
66 6 TL01=A;
67 6 C=0;
68 6 A=TL02;
69 6 A=A+20;
70 6 if(A>=255)
71 6 {A-=255;C=1;}
72 6 if(C==0)
73 6 {TL02=A;}
74 6 else
75 6 {TH02++;TL02=A;C=0;}
76 6 }
77 5 }
78 4 }
79 3 }
80 2 if(P1_1==0)
81 2 {
82 3 delay10ms(); //按下,延时,防抖
83 3 if(P1_1==0)
84 3 { //等待释放
85 4 delay02s();
86 4 A=TL01;
87 4 if(A!=0x22)
88 4 {
89 5 C=0;
90 5 A=A+20;
91 5 if(A>=255)
92 5 {A-=255;C=1;}
93 5 if(C==0)
94 5 {
95 6 TL01=A;
96 6 C=0;
97 6 A=TL02;
98 6 A=A-20;
99 6 if(A<=0)
100 6 {A+=255;C=1;}
101 6 if(C==0)
102 6 {TL02=A;}
103 6 else
104 6 {TH02--;TL02=A;C=0;}
105 6 }
106 5 else
107 5 {
108 6 TH01++;
109 6 TL01=A;
110 6 C=0;
111 6 A=TL02;
112 6 A=A-20;
113 6 if(A<=0)
114 6 {A+=255;C=1;}
115 6 if(C==0)
116 6 {TL02=A;}
117 6 else
C51 COMPILER V8.02 SERVO 11/10/2007 21:18:44 PAGE 3
118 6 {TH02--;TL02=A;C=0;}
119 6 }
120 5
121 5 }
122 4 }
123 3 }
124 2 if(P1_2==0)
125 2 {
126 3 delay10ms(); //按下,延时,防抖
127 3 if(P1_2==0)
128 3 { //等待释放
129 4 delay02s();
130 4 TL01=0x2E; //舵机0 位,脉宽1.5ms
131 4 TH01=0x0FA;
132 4 TL02=0x0B2;
133 4 TH02=0x0B7;
134 4 }
135 3 }
136 2 }
137 1 }
138
139 void timer0() interrupt 1 using 1
140 {
141 1 F0=~F0; //中断服务程序
142 1 P3_7=~P3_7; //输出高、低电平脉冲
143 1 if(F0==1)
144 1 {
145 2 TL0=TL01; //高电平脉冲定时常数
146 2 TH0=TH01;
147 2 }
148 1 else
149 1 {
150 2 TL0=TL02; //低电平脉冲定时常数
151 2 TH0=TH02;
152 2 }
153 1 }
154
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 551 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -