📄 386.lst
字号:
511 2 case 9: NUMSERIAL=233;break; //数组9的起始位置=91 长3位
512 2
513 2 }
514 1 for(i=1;i<=NUMBYT;i++)
515 1 {
516 2 startWrite: START24C02(); //START24C02()执行完后,scl=0,sda=0
517 2 WriteOneByte(160); //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
518 2 Check_bit=Check24C02(); //校验应答位;执行完后,scl=0,sda不管
519 2 if(Check_bit==1) //如果出错,从新启动总线
520 2 goto startWrite;
521 2
522 2 WriteOneByte(NUMSERIAL); //确定片内寻址地址
523 2 Check_bit=Check24C02(); //校验应答位
524 2 if(Check_bit==1) //如果出错,从新启动总线
525 2 goto startWrite;
526 2
527 2 WriteOneByte(NUMBERW[i]); //原数组把组的序号放在“0”位置,组成员个数放在“1”位置
528 2 Check_bit=Check24C02();
529 2 if(Check_bit==1) //如果出错,从新启动总线
530 2 goto startWrite;
531 2
532 2 STOP24C02(); //执行完后,scl=0,sda=1
533 2 NUMSERIAL=NUMSERIAL+1;
534 2 }
535 1 }//---------------------------------------写整个数组到24c02结束----------------------------------//
536
537 void Write24C02_139()
538 {
539 1 bit Check_bit=1;
540 1 startWrite: START24C02(); //START24C02()执行完后,scl=0,sda=0
541 1 WriteOneByte(160); //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
542 1 Check_bit=Check24C02(); //校验应答位;执行完后,scl=0,sda不管
543 1 if(Check_bit==1) //如果出错,从新启动总线
544 1 goto startWrite;
545 1
546 1 WriteOneByte(99); //确定片内寻址地址
547 1 Check_bit=Check24C02(); //校验应答位
548 1 if(Check_bit==1) //如果出错,从新启动总线
549 1 goto startWrite;
550 1
C51 COMPILER V6.10 386 03/14/2006 10:33:03 PAGE 10
551 1 WriteOneByte(139); //原数组把组的序号放在“0”位置,组成员个数放在“1”位置
552 1 Check_bit=Check24C02();
553 1 if(Check_bit==1) //如果出错,从新启动总线
554 1 goto startWrite;
555 1 STOP24C02(); //执行完后,scl=0,sda=1
556 1
557 1 }
558
559 void Write24C02_1390()
560 {
561 1 bit Check_bit=1;
562 1 startWrite: START24C02(); //START24C02()执行完后,scl=0,sda=0
563 1 WriteOneByte(160); //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
564 1 Check_bit=Check24C02(); //校验应答位;执行完后,scl=0,sda不管
565 1 if(Check_bit==1) //如果出错,从新启动总线
566 1 goto startWrite;
567 1
568 1 WriteOneByte(99); //确定片内寻址地址
569 1 Check_bit=Check24C02(); //校验应答位
570 1 if(Check_bit==1) //如果出错,从新启动总线
571 1 goto startWrite;
572 1
573 1 WriteOneByte(0);
574 1 Check_bit=Check24C02();
575 1 if(Check_bit==1) //如果出错,从新启动总线
576 1 goto startWrite;
577 1 STOP24C02(); //执行完后,scl=0,sda=1
578 1
579 1 }
580
581 void Write24C02_FIRST()
582 {
583 1 bit Check_bit=1;
584 1 startWrite: START24C02(); //START24C02()执行完后,scl=0,sda=0
585 1 WriteOneByte(160); //寻址字节为0A0H,“写”;执行完后,scl=0,sda=0
586 1 Check_bit=Check24C02(); //校验应答位;执行完后,scl=0,sda不管
587 1 if(Check_bit==1) //如果出错,从新启动总线
588 1 goto startWrite;
589 1
590 1 WriteOneByte(98); //确定片内寻址地址
591 1 Check_bit=Check24C02(); //校验应答位
592 1 if(Check_bit==1) //如果出错,从新启动总线
593 1 goto startWrite;
594 1
595 1 WriteOneByte(138);
596 1 Check_bit=Check24C02();
597 1 if(Check_bit==1) //如果出错,从新启动总线
598 1 goto startWrite;
599 1 STOP24C02(); //执行完后,scl=0,sda=1
600 1
601 1 }
602
603
604
605 //-----------------------------------读内容到整个结构,数组------------------------------------------//
606 struct ReadArray Read24C02_Array(unsigned char NUMSERIAL)
607 {
608 1 bit Check_bit;
609 1 unsigned char i;
610 1 struct ReadArray READARRAY;
611 1 switch(NUMSERIAL) //设定数组存放起始位置
612 1 {
C51 COMPILER V6.10 386 03/14/2006 10:33:03 PAGE 11
613 2 case 1: NUMSERIAL=102; break; //数组1的起始位置=0 长20位
614 2 case 2: NUMSERIAL=124;break; //数组2的起始位置=20 长13位
615 2 case 3: NUMSERIAL=144;break; //数组3的起始位置=33 长13位
616 2 case 4: NUMSERIAL=164;break; //数组4的起始位置=46 长13位
617 2 case 5: NUMSERIAL=184;break; //数组5的起始位置=59 长13位
618 2 case 6: NUMSERIAL=204;break; //数组6的起始位置=72 长13位
619 2 case 7: NUMSERIAL=224;break; //数组7的起始位置=85 长5 位
620 2 case 8: NUMSERIAL=230;break; //数组8的起始位置=89 长2位
621 2 case 9: NUMSERIAL=233;break; //数组9的起始位置=90 长3位
622 2 }
623 1
624 1 startRead: START24C02();
625 1 WriteOneByte(160); //寻址字节为0A0H,“写”
626 1 Check_bit=Check24C02(); //校验应答位
627 1 if(Check_bit==1) //如果出错,从新启动总线
628 1 goto startRead;
629 1
630 1 WriteOneByte(NUMSERIAL); //确定片内寻址地址
631 1 Check_bit=Check24C02(); //校验应答位
632 1 if(Check_bit==1) //如果出错,从新启动总线
633 1 goto startRead;
634 1 STOP24C02(); // 执行完后,scl=0,sda=1
635 1
636 1 startReadD: START24C02();
637 1 WriteOneByte(161); //寻址字节为0A1H,“读”
638 1 Check_bit=Check24C02(); //校验应答位
639 1 if(Check_bit==1) //如果出错,从新启动总线
640 1 goto startReadD;
641 1
642 1 READARRAY.Number24[1]=ReadOneByte(); //读出本组有多少个成员,[0]位预留,组成员个数放在[1]位置
643 1 //执行“读”完后,scl=0,sda任意
644 1 if(READARRAY.Number24[1]==0)
645 1 MNACK();
646 1 else
647 1 {
648 2 MACK(); //发送校验
649 2 for(i=0;i<READARRAY.Number24[1];i++)
650 2 {
651 3 READARRAY.Number24[i+2]=ReadOneByte();
652 3 if(i<READARRAY.Number24[1]-1)
653 3 MACK();
654 3 else MNACK();
655 3 }
656 2 }
657 1 STOP24C02();
658 1 return(READARRAY);
659 1 }//---------------------------读内容到整个结构,数组结束------------------------------------------//
660
661
662 //------------------------------处理在一次摘机“编程”过程中的读取 ,存储---------------------------------
--//
663
664 void Make_Program()
665 {
666 1 unsigned char Number_Note=0; //记录是第几个“电话机输入键”
667 1 unsigned char Number_Array=0; //标记是生成的第几号数组。
668 1 unsigned char Number_Key; //存储“电话机输入键值”的中间变量
669 1 Number NUMBER; //生成记录一次摘机过程的数组
670 1 bit SaveTo24C02=0;
671 1 Reset=0;
672 1 ReadStatus: MT8880_StatusRegister_READ();
673 1
C51 COMPILER V6.10 386 03/14/2006 10:33:03 PAGE 12
674 1 if(MT8880_D2==1) //是否有键值生成
675 1 {
676 2 MT8880_CP2=0; //停动8880总线
677 2 MT8880_CS=1; //停动8880总线
678 2
679 2 MT8880_DataRegister_READ(); //读入的一个值出现在MT8880_D0-D3
680 2
681 2 if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“1”
682 2 {Number_Key=1; LED_DRIVER(0,0,0,0,0,1,1,0); }//显示“1”
683 2 if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0) //输入“2”
684 2 {Number_Key=2; LED_DRIVER(1,1,0,1,1,0,1,0);} //显示“2”
685 2 if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1) //输入“3”
686 2 {Number_Key=3; LED_DRIVER(1,1,0,0,1,1,1,0);} //显示“3”
687 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0) //输入“4”
688 2 {Number_Key=4; LED_DRIVER(1,0,0,0,0,1,1,1);} //显示“4”
689 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1) //输入“5”
690 2 {Number_Key=5; LED_DRIVER(1,1,0,0,1,1,0,1); }//显示“5”
691 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0) //输入“6”
692 2 {Number_Key=6; LED_DRIVER(1,1,0,1,1,1,0,1); }//显示“6”
693 2 if(MT8880_D3==0 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1) //输入“7”
694 2 {Number_Key=7; LED_DRIVER(0,1,0,0,0,1,1,0); } //显示“7”
695 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0) //输入“8”
696 2 {Number_Key=8; LED_DRIVER(1,1,0,1,1,1,1,1); }//显示“8”
697 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==1) //输入“9”
698 2 {Number_Key=9; LED_DRIVER(1,1,0,0,1,1,1,1); } //显示“9”
699 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==0) //输入“0”
700 2 {Number_Key=10; LED_DRIVER(0,1,0,1,1,1,1,1); }//显示“0”
701 2 if(MT8880_D3==1 & MT8880_D2==0 & MT8880_D1==1 & MT8880_D0==1) //输入“*”
702 2 {Number_Key=11; LED_DRIVER(1,0,0,1,1,1,0,1); }//显示“b” 代替
703 2 if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==0) //输入“#”
704 2 {Number_Key=12; LED_DRIVER(1,0,0,1,0,1,1,1);}//显示“#”="H"
705 2
706 2
707 2 // if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==0 & MT8880_D0==1) //输入“A”
708 2 // Number_Key=13;
709 2 // if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==0) //输入“B”
710 2 // Number_Key=14;
711 2 // if(MT8880_D3==1 & MT8880_D2==1 & MT8880_D1==1 & MT8880_D0==1) //输入“C”
712 2 // Number_Key=15;
713 2 // if(MT8880_D3==0 & MT8880_D2==0 & MT8880_D1==0 & MT8880_D0==0) //输入“D”
714 2 // Number_Key=0;
715 2
716 2 MT8880_CP2=0; //停动8880总线
717 2 MT8880_CS=1; //停动8880总线
718 2
719 2 if(Number_Note==0) //处理本次摘机编程的第一次电话机键盘数据
720 2 {
721 3 Number_Array=Number_Key;
722 3 if(Number_Array==10||Number_Array==1||Number_Array==2||Number_Array==3||Number_Array==4||Number_Ar
-ray==5||Number_Array==6||Number_Array==7||Number_Array==8||Number_Array==9)
723 3 {
724 4 if(Number_Array==10){NUMBER[0]=0;Reset=1;}
725 4 else{NUMBER[0]=Number_Array;} //把组的序号放在“0”位置
726 4 Number_Note=Number_Note+1;
727 4
728 4 if(ISD1420_REC_ZJ==0) //还处在摘机状态,则继续读状态
729 4 goto ReadStatus;
730 4 else return;
731 4 }
732 3 else return;
733 3 }
734 2 if(Number_Note==1) //处理本次摘机编程的第二次电话机键盘数据,已经处理了1次电话机键盘数据
C51 COMPILER V6.10 386 03/14/2006 10:33:03 PAGE 13
735 2 {
736 3 if(Number_Key!=11) //判断是否为*
737 3 return;
738 3 else
739 3 {Number_Note=Number_Note+1;Reset=0;}
740 3
741 3 if(ISD1420_REC_ZJ==0)
742 3 goto ReadStatus;
743 3 else return;
744 3 }
745 2 if(Number_Note>=22) // 已经处理了22次电话机键盘数据
746 2 {
747 3 LED_DRIVER(0,1,0,1,1,0,0,1); //出错状态,显示c
748 3 return; //出错,跳出
749 3 }
750 2 else
751 2 {
752 3 NUMBER[Number_Note]=Number_Key; //把键值写入数组
753 3 Number_Note=Number_Note+1;
754 3
755 3 if(ISD1420_REC_ZJ==0)
756 3 {
757 4 SaveTo24C02=1; //表示已经有数据,可以写24C02了
758 4 goto ReadStatus;
759 4 }
760 3 else
761 3 goto WriteTo24C02;
762 3
763 3 }
764 2
765 2 }//读键值过程结束
766 1 else
767 1 {
768 2 MT8880_CP2=0; //停动8880总线
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -