📄 otp.lst
字号:
544 4 return 0;
545 4 }
546 3 }
547 2 P1=P1^0x01;
548 2
549 2 }
550 1
551 1 pulse_read();
C51 COMPILER V8.02 OTP 12/19/2007 17:51:25 PAGE 10
552 1 read_configue(); //read config
553 1
554 1
555 1 if(EpBuf[0]!=blank_config[otp_type]/0x100||EpBuf[1]!=blank_config[otp_type]%0x100)
556 1 {
557 2 buzzer_2();
558 2 return 0;
559 2 }
560 1
561 1 buzzer_1();
562 1 return 1;
563 1 }
564
565
566 void verify_otp(void)
567 {
568 1 uchar iv, jv, temp;
569 1 uint adr;
570 1 if(!PIN_TEST())
571 1 {
572 2 buzzer_3();
573 2 buzzer_3();
574 2 return ;
575 2 }
576 1
577 1 pulse_read(); //???改善挑片的毛病
578 1 for(iv=0; iv<mcu_size[otp_type]*16; iv++)
579 1 {
580 2 otp_read(iv);
581 2 P1=P1^0x01;
582 2 adr=128*iv;
583 2 for(jv=0; jv<128; jv++)
584 2 {
585 3 CE_FLS = 0;
586 3 temp=XBYTE[adr++];
587 3 if(temp!=EpBuf[jv])
588 3 {
589 4 buzzer_3();
590 4 return ;
591 4 }
592 3 }
593 2 }
594 1
595 1 EpBuf[1]=EpBuf[0]=0xaa;
596 1 read_configue(); //read config and save them start at 0x8000
597 1
598 1 CE_FLS =0;
599 1 nop; nop;
600 1 iv=XBYTE[0x8000];
601 1 jv=XBYTE[0X8001];
602 1 read_configue(); //read config
603 1 nop; nop;
604 1 if((jv!=EpBuf[1])||((iv&0xdf)!=(EpBuf[0]&0xdf))) //((iv&0xdf)!=(EpBuf[0]&0xdf))
605 1 {
606 2 buzzer_2();
607 2 return ;
608 2 }
609 1
610 1 buzzer_1();
611 1 return ;
612 1 }
613
C51 COMPILER V8.02 OTP 12/19/2007 17:51:25 PAGE 11
614 void scan_popkey(void)
615 {
616 1 uchar temp_key=0x0;
617 1 if(_50ms!=1)
618 1 return;
619 1 _50ms=0;
620 1
621 1 KEY1=1; KEY0=1;
622 1 nop;
623 1 if(KEY0==0)
624 1 temp_key=temp_key|0x01;
625 1 if(KEY1==0)
626 1 temp_key=temp_key|0x02;
627 1 //==============================
628 1 if(temp_key!=0)
629 1 { //handle with key push_down
630 2 _kdown=1;
631 2 if(temp_key!=key_buf) //如果按键中途改变, 就重新计算新的长按键
632 2 {
633 3 key_buf=temp_key;
634 3 lkey_num=0;
635 3 return;
636 3 }
637 2 else
638 2 {
639 3 if(lkey_num<250)
640 3 lkey_num++;
641 3 if(lkey_num==150)
642 3 {
643 4 if(key_buf==0x01)
644 4 _lkey0=1;
645 4 if(key_buf==0x02)
646 4 _lkey1=1;
647 4 return;
648 4 }
649 3 }
650 2 }
651 1 else
652 1 {
653 2 if(_kdown!=1)
654 2 {
655 3 k_flag=0;
656 3 return;
657 3 }
658 2 if(lkey_num<150)
659 2 {
660 3 k_flag=0;
661 3 if(key_buf==0x01)
662 3 _key0=1;
663 3 if(key_buf==0x02)
664 3 _key1=1;
665 3 }
666 2 key_buf=0x0;
667 2 lkey_num=0x0;
668 2 return;
669 2
670 2 }
671 1
672 1 }
673
674 bit write_protect(void) //加密成功返回1 //多个警告//???
675 {
C51 COMPILER V8.02 OTP 12/19/2007 17:51:25 PAGE 12
676 1 unsigned char jj, tmp1, tmp2;
677 1 I2cReset();
678 1 start();
679 1 smart_command(1, 0x3f, 0xff);
680 1 EpBuf[0]=0x1f; EpBuf[1]=0xff;
681 1 write_data(&EpBuf[0], 1);
682 1 stop();
683 1 //=========================== 判断加密是否成功
684 1 pulse_read();
685 1 otp_read(0);
686 1 if(EpBuf[0]!=0x00)
687 1 {
688 2 tmp1=0x3f; tmp2=0xff;
689 2 }
690 1 else
691 1 {
692 2 tmp1=tmp2=0x00;
693 2 }
694 1 for(jj=0; jj<128; jj=jj+2)
695 1 {
696 2 if(EpBuf[jj]!=tmp1||EpBuf[jj+1]!=tmp2)
697 2 {
698 3 buzzer_3();
699 3 return 0;
700 3 }
701 2 }
702 1
703 1 return 1 ;
704 1 }
705
706
707 void initial_timer0(void)
708 {
709 1 TMOD=0XF0&TMOD|0X01; //定时方式0
710 1 TH0=(65536-50000)/256; /*每隔50MS扫描一次*/
711 1 TL0=(65536-50000)%256;
712 1 TR0=1;
713 1 ET0=1;
714 1 EA=1;
715 1 }
716
717 bit PIN_TEST(void)
718 {
719 1 pulse_read();
720 1 read_configue();
721 1 if( EpBuf[0]>0x3f )
722 1 return 0;
723 1 else if( (EpBuf[0]|EpBuf[1])==0x00 )
724 1 return 0;
725 1 else
726 1 return 1;
727 1 }
728
729 /*
730 bit pin_test_by_type(unsigned char mcu_type)
731 {
732 uchar i;
733 if(mcu_type<2)
734 {
735 OE=0; //VC_DOWN=1;
736 INH=0;
737 nop;
C51 COMPILER V8.02 OTP 12/19/2007 17:51:25 PAGE 13
738 for(i=0; i<3; i++)
739 {
740 nop;
741 P2=(P2&0xf0)+i+3; //只测试了3个脚
742 DelayXus();
743 VDET=1;
744 nop; nop; nop;
745 if(VDET==0)
746 {
747 OE=1;
748 return 1; //????
749 }
750
751 }
752 OE=1;
753 return 1;
754 }
755
756 else
757 {
758 pulse_read();
759 read_configue(); //10p20(8pin) read config
760 if( EpBuf[0]>0x3f )
761 return 0;
762 else
763 return 1;
764
765
766 }
767 } */
768
769 void check_buttton()
770 {
771 1 scan_popkey();
772 1 EA=0;
773 1 if(_lkey1==1)
774 1 {
775 2 _lkey1=0;
776 2 verify_otp();//校验PM10P40
777 2 }
778 1 if(_key1==1)
779 1 {
780 2 _key1=0;
781 2 whole_write();//把W29EE512的程序写入PM10P40中 //red long key
782 2 verify_otp(); //???
783 2 CE_FLS=0;
784 2 if( 0x00==(XBYTE[0X8000]&0x20) )
785 2 {
786 3 pulse_read(); //???
787 3 write_protect();
788 3 }
789 2 }
790 1 if(_key0==1)
791 1 {
792 2 _key0=0;
793 2 blank_check();//检查PM10P40是否为空
794 2 }
795 1
796 1 if(_lkey0==1)
797 1 {
798 2 _lkey0=0;
799 2 download_otp();///把PM10P40的程序读到W29EE512中
C51 COMPILER V8.02 OTP 12/19/2007 17:51:25 PAGE 14
800 2 }
801 1 EA=1;
802 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1876 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 12
IDATA SIZE = ---- 2
BIT SIZE = ---- 7
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -