📄 main.lst
字号:
194 bit FlagOrderSaved = 1; //命令已保存的标志。
195 bit FlagSendSlaveData =0 ; //发送从机命令
196 bit FlagExtInterrupt = 0;
197 bit FlagMainFirstExtInterrupt = 0;
198 /******************************************标识位定义信息****************************************/
199
200 /******************************************其它变量相关******************************************/
201 uchar RecvCount = 0; //串口中断里的计数。
202 uchar RecvState = InitState; //接收的状态。
203 uchar RecvSize = 0; //需要接收的数据长度。
204 xdata uchar RecvOrderBuff[LEN]; //串口接受缓冲区。
205 xdata uchar CopyToComRamBuff[NUM1];
206 xdata uchar CopyToMyRamBuff[NUM1];
207 xdata uchar SendSlaveDataBuff[NUM1];
208 uchar TimesCount = 0;
209 /******************************************其它变量相关******************************************/
210
211 uchar code valid_cmd[256]={ // 如果输入命令有效则为1,为了验证数据包的有效性。
212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00 - 0F
213 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 10 - 1F
214 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20 - 2F
215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 30 - 3F
216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40 - 4F
217 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 50 - 5F
218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60 - 6F
219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 70 - 7F
220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 80 - 8F
221 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 90 - 9F
222 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, // A0 - AF
223 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B0 - BF
224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C0 - CF
225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D0 - DF
226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E0 - EF
227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // F0 - FF
228 };
229
230 /****************************************************************************************
231 功能:Delay
232 描述:延时函数
233 参数:t
234 返回:无
235 ****************************************************************************************/
236 void Delay(uint t)
237 {
238 1 while(t!=0)
239 1 t--;
240 1 }
241
C51 COMPILER V7.50 MAIN 03/17/2008 20:43:15 PAGE 5
242 /****************************************************************************************
243 功能:InitSerialComm
244 描述:串口初始化
245 参数:无
246 返回:无
247 ****************************************************************************************/
248 void InitSerialComm(void)
249 {
250 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
251 1 TMOD |= 0x21; //TMOD: timer 1, mode 2, 8-bit reload
252 1 PCON |= 0x80; //SMOD=1;
253 1 TH1 = 0xF3; //Baud:4800 fosc=12MHz
254 1 IE |= 0x93; //Enable Serial Interrupt
255 1 TR1 = 1; // timer 1 run
256 1 IT0 = 1;
257 1 // TI=1;
258 1 }
259
260 /*****************************************************************************************
261 功能:Time0Initial()
262 描述:定时器0初始化,主要设定初值
263 参数:无
264 返回:无
265 *****************************************************************************************/
266 void Time0Initial()
267 {
268 1 TR0=0;
269 1 TH0=0x3C; //50ms
270 1 TL0=0xB0;
271 1 TR0=1;
272 1 }
273
274 /*****************************************************************************************
275 功能:Time0
276 描述:产生定时器0中断
277 参数:无
278 返回:无
279 *****************************************************************************************/
280 void Time0() interrupt 1 using 2
281 {
282 1 TimeCount++;
283 1 if(TimeCount >= MAX)
284 1 {
285 2 FlagTime0=1;
286 2 TimeCount = 0;
287 2 }
288 1 Time0Initial();
289 1 }
290
291 /****************************************************************************************
292 功能:SendCharCom
293 描述:向串口发送一个字符
294 参数:ch
295 返回:无
296 ****************************************************************************************/
297 void SendCharCom(unsigned char ch)
298 {
299 1 SBUF=ch;
300 1 while(TI==0);
301 1 TI=0;
302 1 }
303
C51 COMPILER V7.50 MAIN 03/17/2008 20:43:15 PAGE 6
304 /****************************************************************************************
305 功能:SendStringCom
306 描述:向串口发送一个字符串,strlen为该字符串长度
307 参数:str---要发送的字符串指针 strlen---字符串长度
308 返回:无
309 ****************************************************************************************/
310 void SendStringCom(unsigned char *str,unsigned int strlen)
311 {
312 1 unsigned int k=0;
313 1 while( (k < strlen) && (strlen > 0) )
314 1 {
315 2 SendCharCom(*(str + k));
316 2 k++;
317 2 }
318 1 }
319
320 /****************************************************************************************
321 功能:Extern0;产生外部中断0,是仲裁机分配IIC使用权的。
322 描述:FlagMutex---用于隔离外部中断,假如一次外部中断没有执行完,能响应下一次外部中断;
323 FlagExt0---外部中断期间标志;P20---保证IIC使用权已经完全释放才可以再次响应。
324 参数:无
325 返回:无
326 ****************************************************************************************/
327 void Extern0() interrupt 0 using 3
328 {
329 1 if((FlagExt0 == 0) && (P20 == 1))
330 1 {
331 2 FlagExt0 = 1;
332 2 }
333 1 }
334
335 /****************************************************************************************
336 功能:SendEndSignal
337 描述:发送结束字符
338 参数:无
339 返回:无
340 ****************************************************************************************/
341 void SendEndSignal()
342 {
343 1 xdata uchar temp[2];
344 1 temp[0]=0x44;
345 1 temp[1]=0x44;
346 1 SendStringCom(temp,2);
347 1 }
348
349 /****************************************************************************************
350 功能:ClearMyRom
351 描述:清零字节数存储地址
352 参数:无
353 返回:无
354 ****************************************************************************************/
355 void ClearMyRam(uint address)
356 {
357 1 xdata uchar temp[2];
358 1 temp[0]=0x00;
359 1 temp[1]=0x00;
360 1 MyWriteBytes(address,temp,2);
361 1 }
362
363 /****************************************************************************************
364 功能:SetDataBytes
365 描述:设置自带RAM的字节长度
C51 COMPILER V7.50 MAIN 03/17/2008 20:43:15 PAGE 7
366 参数:address---存放长度的地址 len---长度值
367 返回:无
368 ****************************************************************************************/
369 void SetMyDataBytes(uint address,uchar len)
370 {
371 1 xdata uchar temp[2];
372 1 uint num;
373 1 MyReadBytes(address,temp,2);
374 1 num = temp[0] + temp[1] * 0x100 + len;
375 1 temp[0]=num%256;
376 1 temp[1]=num/256;
377 1 MyWriteBytes(address,temp,2);
378 1 }
379
380 /****************************************************************************************
381 功能:GetMyDataBytes
382 描述:得到自带RAM里的数据字节数
383 参数:address---存放长度的地址
384 返回:uint
385 ****************************************************************************************/
386 uint GetMyDataBytes(uint address)
387 {
388 1 xdata uchar temp[2];
389 1 uint num;
390 1 MyReadBytes(address,temp,2);
391 1 num = temp[0] + temp[1] * 0x100;
392 1 return num;
393 1 }
394
395 /*****************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -