📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 10/13/2004 11:05:16 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #define XTAL 22118400
3 #define baudrate 9600
4 #define INLEN 6
5 #define LAMPSPEED 20 //控制CPU灯闪速度,每秒5次
6
7 sbit cpulamp=P3^7; //CPU灯控制
8 bit newnum; //有新的数据标识
9 char is_aa;
10
11 bit key; //调试用***
12 char lamp_speed;
13 char inbuf[INLEN];
14 char getbuf[INLEN];
15 char buf_sit;
16 char Timer_num;
17 int angel_gd;
18 int angel_fw;
19 int angel_gd_get;
20 int angel_fw_get;
21
22 /*串口接收程序*/
23 static void comm_get (void) interrupt 4 using 1
24 {
25 1 char i;
26 1 char get_buf;
27 1 get_buf=SBUF;
28 1 RI=0;
29 1 TI=0;
30 1 if(inbuf[0]==is_aa)
31 1 {
32 2 inbuf[buf_sit]=get_buf;
33 2 buf_sit++;
34 2 if(buf_sit>=6)
35 2 {
36 3 for(i=0;i<INLEN;i++)getbuf[i]=inbuf[i];
37 3 buf_sit=0;
38 3 inbuf[0]=0;
39 3 newnum=1;
40 3 }
41 2 }
42 1 else
43 1 {
44 2 if(get_buf==is_aa)
45 2 {
46 3 inbuf[0]=is_aa;
47 3 buf_sit++;
48 3 }
49 2 }
50 1 }
51
52 /*初始化串行口*/
53 void ini_comm (void)
54 {
55 1 buf_sit=0;
C51 COMPILER V7.06 MAIN 10/13/2004 11:05:16 PAGE 2
56 1 newnum=0;
57 1 is_aa=0xAA;
58 1
59 1 PCON|=0x80;
60 1 TMOD|=0x20;
61 1 TH1=(unsigned char)(256-(XTAL/(16L*12L*baudrate)));
62 1 TR1=1;
63 1 SCON=0x50;
64 1 ES=1;
65 1 }
66
67
68 /* 初始化定时器0*/
69 void ini_time(void)
70 {
71 1 cpulamp=1;
72 1 TMOD&=0xF0;
73 1 TMOD|=0x01;
74 1 TH0=0xB7;
75 1 TL0=0xFd;
76 1 ET0=1;
77 1 TR0=1;
78 1 Timer_num=0;
79 1 lamp_speed=LAMPSPEED;
80 1 }
81
82 /*10ms定时器中断程序*/
83 time0() interrupt 1 using 2
84 {
85 1 if(Timer_num>=lamp_speed) //lamp_speed控制指示灯闪速
86 1 {
87 2 cpulamp=!cpulamp;
88 2 Timer_num=0;
89 2 }
90 1 Timer_num++;
91 1 TH0=0xB7;
92 1 TL0=0xFD;
93 1 }
94
95 /****调试用外部中断****/
96 void ex0_int() interrupt 0 using 3
97 {
98 1 if(key==0)
99 1 {
100 2 angel_gd=30;
101 2 angel_fw=30;
102 2 }
103 1 else
104 1 {
105 2 angel_gd=-30;
106 2 angel_fw=-30;
107 2 }
108 1 key=!key;
109 1 }
110
111
112 /*主程序*/
113 main()
114 {
115 1 char temp;
116 1 char i;
117 1 unsigned char p1_img;
C51 COMPILER V7.06 MAIN 10/13/2004 11:05:16 PAGE 3
118 1 EA=1;
119 1 /*调试用程序*/
120 1 EX0=1;
121 1 angel_gd=0;
122 1 angel_fw=0;
123 1 angel_gd_get=0;
124 1 angel_fw_get=0;
125 1 ini_time();
126 1 ini_comm();
127 1 p1_img=0x20;
128 1 P1=p1_img; //给电机解锁,初始化
129 1 do
130 1 {
131 2 if(newnum) //如果有新的接收数据
132 2 {
133 3 newnum=0;
134 3 temp=0;
135 3 for(i=0;i<INLEN-1;i++) //求校验和
136 3 {
137 4 temp+=getbuf[i];
138 4 }
139 3 if(temp==getbuf[INLEN-1]) //如果校验正确,取出高低方位角
140 3 {
141 4 lamp_speed=2; //加快灯闪速度
142 4 angel_gd_get=getbuf[1];
143 4 angel_gd_get=angel_gd_get<<8;
144 4 angel_gd_get=angel_gd_get+getbuf[2];
145 4 angel_fw_get=getbuf[3];
146 4 angel_fw_get=angel_fw_get<<8;
147 4 angel_fw_get=angel_fw_get+getbuf[4];
148 4 if(angel_gd_get<0);
149 4 {
150 5 angel_gd_get&=0x7f;
151 5 angel_gd_get=~angel_gd_get;
152 5 angel_gd_get++;
153 5 }
154 4 if(angel_fw_get<0)
155 4 {
156 5 angel_fw_get&=0x7f;
157 5 angel_fw_get=~angel_fw_get;
158 5 angel_fw_get++;
159 5 }
160 4 angel_gd_get*=6;
161 4 angel_fw_get*=6;
162 4 angel_gd+=angel_gd_get;
163 4 angel_fw+=angel_fw_get;
164 4 }
165 3 }
166 2 if(angel_gd!=0||angel_fw!=0) //驱动电机
167 2 {
168 3 p1_img&=0xde; //打开电机开关;两电机同时打开
169 3 P1=p1_img;
170 3 if(angel_gd>0)
171 3 {
172 4 p1_img|=0x06;
173 4 angel_gd--;
174 4 }
175 3 if(angel_gd<0)
176 3 {
177 4 p1_img&=0xfd;
178 4 p1_img|=0x04;
179 4 angel_gd++;
C51 COMPILER V7.06 MAIN 10/13/2004 11:05:16 PAGE 4
180 4 }
181 3 if(angel_fw>0)
182 3 {
183 4 p1_img|=0x18;
184 4 angel_fw--;
185 4 }
186 3 if(angel_fw<0)
187 3 {
188 4 p1_img&=0xef;
189 4 p1_img|=0x08;
190 4 angel_gd++;
191 4 }
192 3 P1=p1_img;
193 3 for(i=0;i<77;i++) //延时,大约0.25ms;每一循环用时1.6275μs2个机器周期
194 3 {;}
195 3 for(i=0;i<77;i++)
196 3 {;}
197 3 p1_img&=0xf3;
198 3 P1=p1_img;
199 3 for(i=0;i<93;i++) //延时,大约0.15ms
200 3 {;}
201 3 p1_img&=0x21;
202 3 P1=p1_img; //关电机
203 3 }
204 2 else
205 2 {
206 3 lamp_speed=LAMPSPEED;
207 3 }
208 2 }while(1);
209 1
210 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 583 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -