📄 host.lst
字号:
268 1 }
269
270 /*;*******************************************************************************************
271 *
272 ;* Name: WIP_POLL
273 ;* Description: Write-In-Progress Polling
274 ;* Function: This routine polls for completion of a nonvolatile write cycle by examining the
275 ;* WIP bit of the status register
276 ;* Calls: rdsr_cmdXicor Application Note AN21
277 ;* Input: None
278 ;* Outputs: None
279 ;* Register Usage: R1, A
280 ;*******************************************************************************************
281 */
282 /*检测写入的过程是否结束*/
283 void wip_poll(void)
284 {
285 1 uchar aa;
286 1 uchar idata my_flag;
287 1 for (aa=1;aa<MAX_POLL;aa++)
288 1 {
289 2 my_flag=rdsr_cmd();
290 2 if ((my_flag&&0x01)==0) {aa=MAX_POLL;}/*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等
-待直到达到最大记数值*/
291 2 }
292 1 }
293
294 /*;*******************************************************************************************
295 *
296 ;* Name: OUTBYT
297 ;* Description: Sends byte to EEPROM
298 ;* Function: This routine shifts out a byte, starting with the MSB, to the EEPROM
299 ;* Calls: None
300 ;* Input: A = byte to be sent
301 ;* Outputs: None
302 ;* Register Usage: R0, A
C51 COMPILER V7.01 HOST 03/24/2005 22:10:08 PAGE 6
303 ;*******************************************************************************************
304 */
305 /*输出一个数据到25045,此数据可能为地址,先导字,写入的数据等*/
306 void outbyt(aa)
307 uchar aa;
308 {
309 1 uchar Data, i;
310 1 Data = aa;
311 1 for (i=0; i<8; i++)
312 1 {
313 2 SCK=0;
314 2 SI = (bit)(Data & 0x80);
315 2 Data = Data << 1;
316 2 SCK=1;
317 2 }
318 1 SI=0;/*使SI处于确定的状态*/
319 1 }
320
321 /*;*******************************************************************************************
322 *
323 ;* Name: INPUTBYT
324 ;* Description: Recieves byte from EEPROM
325 ;* Function: This routine recieves a byte, MSB first, from the EEPROM
326 ;* Calls: None
327 ;* Input: None
328 ;* Outputs: A = recieved byte
329 ;* Register Usage: R0, A
330 ;*******************************************************************************************
331 */
332 /*得到一个数据,此数据可能为状态寄存器数据,读出的单元数据等*/
333 uchar inputbyt(void)
334 {
335 1 uchar uData;
336 1 char i;
337 1 for (i=0; i<8; i++)
338 1 {
339 2 SCK=1;
340 2 SCK=0;
341 2 uData *= 2;
342 2 if (SO)
343 2 uData ++;
344 2 }
345 1 return uData;
346 1 }
347
348 void WriteParams() //保存参数
349 {
350 1 //保存零位到地址0;
351 1 wren_cmd();
352 1 page_write(Param.wZero.b[0], Param.wZero.b[1],
353 1 Param.wZero.b[2], Param.wZero.b[3], 0);
354 1 //保存校准信号到地址4;
355 1 wren_cmd();
356 1 page_write(Param.wInCount.b[0], Param.wInCount.b[1],
357 1 Param.wInCount.b[2], Param.wInCount.b[3], 4);
358 1 //保存输入值到地址8, 输出值到10;
359 1 wren_cmd();
360 1 page_write(Param.wInput.b[0], Param.wInput.b[1],
361 1 Param.wOutput.b[0], Param.wOutput.b[1], 8);
362 1 //保存报警下限到地址12,报警上限到地址14;
363 1 wren_cmd();
364 1 page_write(Param.wALR_L.b[0], Param.wALR_L.b[1],
C51 COMPILER V7.01 HOST 03/24/2005 22:10:08 PAGE 7
365 1 Param.wALR_H.b[0], Param.wALR_H.b[1], 12);
366 1 //保存报警标志位,波特率下标,小数点位置,地址到地址16
367 1 wren_cmd();
368 1 page_write(Param.bAlert, Param.BaudIndex,
369 1 Param.PointPos, Param.bAddress, 16);
370 1 //保存密码下标到地址20
371 1 wren_cmd();
372 1 byte_write(Param.Password.b[0], 20);
373 1 wren_cmd();
374 1 byte_write(Param.Password.b[1], 21);
375 1 }
376
377 void ReadParams() //读参数
378 {
379 1 uchar i;
380 1 //读零位
381 1 for (i=0; i<4; i++)
382 1 Param.wZero.b[i] = byte_read(i);
383 1 //读校准信号
384 1 for (i=0; i<4; i++)
385 1 Param.wInCount.b[i] = byte_read(i+4);
386 1 //读输入值
387 1 Param.wInput.b[0] = byte_read(8);
388 1 Param.wInput.b[1] = byte_read(9);
389 1 //读输出值
390 1 Param.wOutput.b[0] = byte_read(10);
391 1 Param.wOutput.b[1] = byte_read(11);
392 1 //读报警下限
393 1 Param.wALR_L.b[0] = byte_read(12);
394 1 Param.wALR_L.b[1] = byte_read(13);
395 1 //读报警上限
396 1 Param.wALR_H.b[0] = byte_read(14);
397 1 Param.wALR_H.b[1] = byte_read(15);
398 1 //读报警标志位
399 1 Param.bAlert = byte_read(16);
400 1 //读波特率下标
401 1 Param.BaudIndex = byte_read(17);
402 1 //读小数点位置
403 1 Param.PointPos = byte_read(18);
404 1 //读地址
405 1 Param.bAddress = byte_read(19);
406 1 //读密码
407 1 Param.Password.b[0] = byte_read(20);
408 1 Param.Password.b[1] = byte_read(21);
409 1 }
410
411 void Delay(uint utime, uint utime2) reentrant
412 {
413 1 uint utimein;
414 1 while (utime --)
415 1 {
416 2 rst_wdog();
417 2 utimein = utime2;
418 2 while(utimein --)
419 2 rst_wdog();
420 2 }
421 1 return;
422 1 }
423
424 void I_Send(byte Data)
425 {
426 1 register byte i;
C51 COMPILER V7.01 HOST 03/24/2005 22:10:08 PAGE 8
427 1 //发送8位数据
428 1 for (i=0; i<8; i++)
429 1 {
430 2 CLK = 0;
431 2 _nop_();
432 2 _nop_();
433 2 _nop_();
434 2 _nop_();
435 2 _nop_();
436 2 DATA = (bit)(Data & 0x80);
437 2 Data = Data << 1;
438 2 CLK = 1;
439 2 }
440 1 CLK = 0;
441 1 return;
442 1 }
443
444 //显示数据
445 void Display(dword Data, uchar PointIndex) reentrant
446 {
447 1 byte Value, i;
448 1 uchar Array[5];
449 1 //换算段码
450 1 for (i=0; i<5; i++)
451 1 {
452 2 Value = Data % 10;
453 2 Data = Data / 10;
454 2 if ((i == 4 - PointIndex) && (PointIndex < 4))
455 2 Array[i] = uLEDChar[Value] | 0x40;
456 2 else
457 2 Array[i] = uLEDChar[Value];
458 2 rst_wdog();
459 2 }
460 1 //去除开始的0
461 1 while (i--)
462 1 {
463 2 if ((Array[i] == 0x3f) && (i > 4-PointIndex))
464 2 {
465 3 Array[i] = 0x00;
466 3 rst_wdog();
467 3 }
468 2 else
469 2 {
470 3 rst_wdog();
471 3 break;
472 3 }
473 2 }
474 1 TRG = 1;
475 1 TRG = 0;
476 1 I_Send('T');
477 1 Delay(1, 5);
478 1 for (i=0; i<5; i++)
479 1 {
480 2 I_Send(Array[i]);
481 2 rst_wdog();
482 2 }
483 1 return;
484 1 }
485
486 void GetKeyInput()
487 {
488 1 uchar KeyValue;
C51 COMPILER V7.01 HOST 03/24/2005 22:10:08 PAGE 9
489 1 KeyValue = P2 & 0xF0; //去掉低4位
490 1 if (KeyValue != 0xF0)
491 1 {
492 2 flag = 0;
493 2 Delay(15, 500);
494 2 KeyValue = P2 & 0xF0;
495 2 while ((P2 & 0xF0) != 0xF0)
496 2 rst_wdog();
497 2 switch (KeyValue)
498 2 {
499 3 case 0xE0: //左键
500 3 KeyFuncIndex = KeyTab[KeyFuncIndex].KeyLeftState;
501 3 if (KeyFuncIndex == 0)
502 3 flag = 1;
503 3 break;
504 3 case 0xD0: //右键
505 3 KeyFuncIndex = KeyTab[KeyFuncIndex].KeyRightState;
506 3 if (KeyFuncIndex == 0)
507 3 flag = 1;
508 3 break;
509 3 case 0xB0: //MENU
510 3 KeyFuncIndex = KeyTab[KeyFuncIndex].KeyMenuState;
511 3 break;
512 3 case 0x70: //回车
513 3 KeyFuncIndex = KeyTab[KeyFuncIndex].KeyEnterState;
514 3 break;
515 3 default:
516 3 //KeyFuncIndex = 30;//默认显示电流
517 3 //DisplayCurrent();
518 3 return;
519 3 }
520 2 rst_wdog();
521 2 KeyFuncPtr = KeyTab[KeyFuncIndex].CurrentOperate;
522 2 (*KeyFuncPtr)(); //执行
523 2 }
524 1 return;
525 1 }
526
527 void GetParamsCode(uchar *pChar, uchar begin, word wData) reentrant //段码、显示片选起点、参数
528 {
529 1 uchar i;
530 1 if (wData > 0)
531 1 {
532 2 for (i=4; i>=begin; i--)
533 2 {
534 3 pChar[i] = uLEDChar[wData % 10];
535 3 wData = wData / 10;
536 3 rst_wdog();
537 3 }
538 2 if (Param.PointPos < 5)
539 2 pChar[Param.PointPos] |= 0x40;
540 2 }
541 1 }
542
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -