📄 main.lst
字号:
536 1 *fusebit = Tiny_SendByte(0); //send low byte
537 1
538 1 fusebit ++;
539 1
540 1 Tiny_SendByte(0x58);
541 1 Tiny_SendByte(0x08);
542 1 Tiny_SendByte(0);
543 1 *fusebit = Tiny_SendByte(0); //send low byte
544 1 }
545
546
547 ////////////////////////////////////////////////////////////////
548 void Tiny_WriteLockBit(uchar lockdata)
549 {
550 1 Tiny_SendByte(0xac);
551 1 Tiny_SendByte(0xe0);
C51 COMPILER V7.50 MAIN 06/11/2008 14:41:36 PAGE 10
552 1 Tiny_SendByte(0);
553 1 Tiny_SendByte(/*0xc0 & */lockdata); //send low byte
554 1 // clock_vDelay(200); //delay
555 1 }
556
557
558 ////////////////////////////////////////////////////////////////
559 void Tiny_WriteFuseBit(uchar* fusedata)
560 {
561 1 Tiny_SendByte(0xac);
562 1 Tiny_SendByte(0xa0);
563 1 Tiny_SendByte(0);
564 1 Tiny_SendByte(*fusedata++); //send low byte
565 1
566 1 clock_vDelay(300); //delay
567 1
568 1 Tiny_SendByte(0xac);
569 1 Tiny_SendByte(0xa8);
570 1 Tiny_SendByte(0);
571 1 Tiny_SendByte(*fusedata); //send low byte
572 1 }
573
574
575 ////////////////////////////////////////////////////////////////
576 void Tiny_PowerUp()
577 {
578 1 RST_SET();
579 1 PW5V_OFF();
580 1 clock_vDelay(50);
581 1 SCK_CLR();
582 1 RST_CLR();
583 1 clock_vDelay(50);
584 1 PW5V_ON();
585 1 clock_vDelay(200); //20ms
586 1 }
587
588
589
590
591
592
593 //////////////////////////////////////////////////////////////////////////
594 void main (void)
595 {
596 1 uchar i,j;
597 1 uint progdata;
598 1 uchar Pack[2];
599 1
600 1 uchar k,RetValue;
601 1 uint m;
602 1
603 1 uint ReadAddr,ReadCounter;
604 1 uint times = 0;
605 1 uchar idata buffer[90];
606 1 uint ProgStatus = PROGSTATUS_NONE;
607 1 uint progcount = 0;
608 1 uchar ChipType;
609 1 uint PicOscCal;
610 1 uint PicConfig[8];
611 1 uint PicBandgap;
612 1 uint PicOffset;
613 1 uchar BufOffset;
C51 COMPILER V7.50 MAIN 06/11/2008 14:41:36 PAGE 11
614 1 uint PackType, PackLen;
615 1
616 1
617 1 uint Tiny_Offset;
618 1 uchar TinyLockBit;
619 1 uchar TinyFuse[2];
620 1
621 1 serial_init();
622 1
623 1 while(1)
624 1 {
625 2 for(i=0; i<128;i++) //get the package until end
626 2 {
627 3 while(!RI); //no data receive
628 3 buffer[i] = SBUF;
629 3 RI = 0;
630 3
631 3 if( (buffer[i] == '*') &&
632 3 (buffer[i - 1] == 'D') &&
633 3 (buffer[i - 2] == 'N') &&
634 3 (buffer[i - 3] == 'E') )
635 3 {
636 4 break;
637 4 }
638 3 }
639 2
640 2 for(i=0; i<128; i++) //decode the package
641 2 {
642 3 if( (buffer[i] == 'S') &&
643 3 (buffer[i + 1] == 'E') &&
644 3 (buffer[i + 2] == 'M') &&
645 3 (buffer[i + 3] == 'I') &&
646 3 (buffer[i + 4] == 'C') &&
647 3 (buffer[i + 5] == 'O') )
648 3 {
649 4 j = BufOffset = i;
650 4 break;
651 4 }
652 3 }
653 2
654 2 Pack[0] = buffer[BufOffset + 6];
655 2 Pack[1] = buffer[BufOffset + 7];
656 2 PackType = Mult(Pack[0], Pack[1]);
657 2
658 2 switch(PackType)
659 2 {
660 3 case OPERATE_OK:
661 3 ProgStatus = PROGSTATUS_NONE;
662 3 if(ChipType == CHIP_PIC16F676)
663 3 {
664 4 ProgModeCancle();
665 4 progcount = 0;
666 4 }
667 3 break;
668 3
669 3 case NEED_MCURET:
670 3 ProgStatus = PROGSTATUS_NONE;
671 3 if(ChipType == CHIP_PIC16F676)
672 3 {
673 4 ProgModeCancle();
674 4 progcount = 0;
675 4 }
C51 COMPILER V7.50 MAIN 06/11/2008 14:41:36 PAGE 12
676 3 SendPackage(RETURN_MCURET, 0, NULL);
677 3 break;
678 3
679 3 case TEST_CHIP:
680 3 ChipType = CHIP_NONE;
681 3 ProgStatus = PROGSTATUS_NONE;
682 3 /////////////tiny test handler///////////////////////
683 3 if (ChipType == CHIP_NONE)
684 3 {
685 4 Tiny_PowerUp();
686 4 for(i=0; i<3; i++)
687 4 {
688 5 Tiny_SendByte(0xAC);
689 5 Tiny_SendByte(0x53);
690 5 RetValue = Tiny_SendByte(0); //if RetValue=0x53
691 5 Tiny_SendByte(0);
692 5 if(RetValue == 0x53)
693 5 {
694 6 ChipType = CHIP_ATTINY;
695 6 SendPackage(RETURN_CHIP_ATTINY, 12, "Atmel Tiny13");
696 6 break;
697 6 }
698 5 }
699 4 }
700 3 ///////////////pic test handler////////////////////
701 3 if (ChipType == CHIP_NONE)
702 3 {
703 4 for(k=0; k<3; k++)
704 4 {
705 5 ProgModeSet();
706 5 for(m=0; m<0x3ff; m++) //move pointer to 0x3fff
707 5 {
708 6 ProgIncAddr();
709 6 }
710 5 PicOscCal = ProgReadCode(); //read the osccal value
711 5 ProgCommandSet(PICCMD_LDCONFIG); //send command,move pointer to 0x2000
712 5 clock_vDelay(1); //delay
713 5 for(i=0; i<16; i++)
714 5 {
715 6 PGDCLR(); //dat = 0
716 6 PGCSET(); //clk = 1
717 6 nop();
718 6 nop();
719 6 PGCCLR(); //clk = 0
720 6 }
721 5 for(i=0; i<8; i++) ///read 8 words config
722 5 {
723 6 PicConfig[i] = ProgReadCode();
724 6 ProgIncAddr();
725 6 }
726 5 PicBandgap = PicConfig[7] & 0x3000;
727 5 ProgModeCancle();
728 5 if(PicConfig[6] == 0x10e0)
729 5 {
730 6 ChipType = CHIP_PIC16F676;
731 6 SendPackage(RETURN_CHIP_PIC, 9, "PIC16F676");
732 6 break;
733 6 }
734 5 }
735 4 }
736 3 ///////////////no chip tested//////////////////////////
737 3 if(ChipType == CHIP_NONE)
C51 COMPILER V7.50 MAIN 06/11/2008 14:41:36 PAGE 13
738 3 {
739 4 //SendPackage(RETURN_CHIP_NONE, 16, "No Chip Detected");
740 4 ChipType = CHIP_PIC16F676;
741 4 SendPackage(RETURN_CHIP_PIC, 9, "PIC16F676");
742 4 }
743 3 break;
744 3
745 3 case WRITE_CONFIG:
746 3 /////////////after finish the program memory write////////////
747 3 if(ProgStatus != PackType)
748 3 {
749 4 ProgStatus = PackType;
750 4 ProgModeCancle();
751 4 progcount = 0;
752 4 ProgModeSet();
753 4 }
754 3
755 3 PackLen = Mult(buffer[BufOffset + 8], buffer[BufOffset + 9]);
756 3
757 3 progdata = buffer[BufOffset + 10 + 15]; //msb
758 3 progdata <<= 8;
759 3 progdata += buffer[BufOffset + 10 + 14]; //lsb
760 3
761 3 ProgWriteConfig(progdata);
762 3 for(i=0; i<7; i++)
763 3 {
764 4 ProgCommandSet(PICCMD_INCADDR);
765 4 }
766 3 ProgCommandSet(PICCMD_PROGRAM);
767 3 clock_vDelay(50); //delay
768 3 //////////return status////////////////////
769 3 SendPackage(RETURN_WRITE_CONFIG, 0, NULL);
770 3 break;
771 3 //////////////////////////////////////////////////////////
772 3 //tiny handler
773 3 //
774 3 //////////////////////////////////////////////////////////
775 3 case TINY_READ_LOCK:
776 3 case TINY_VERIFY_LOCK:
777 3 TinyLockBit = Tiny_ReadLockBit();
778 3 SendPackage(PackType-1, 1, &TinyLockBit);
779 3 break;
780 3
781 3 case TINY_READ_FUSE:
782 3 case TINY_VERIFY_FUSE:
783 3 Tiny_ReadFuseBit(TinyFuse);
784 3 SendPackage(PackType-1, 2, TinyFuse);
785 3 break;
786 3
787 3 case TINY_PROG_LOCK:
788 3 TinyLockBit = buffer[j + 10];
789 3 Tiny_WriteLockBit(TinyLockBit);
790 3 SendPackage(PackType-1, 0, NULL);
791 3 break;
792 3
793 3 case TINY_PROG_FUSE:
794 3 TinyFuse[0] = buffer[j + 10];
795 3 TinyFuse[1] = buffer[j + 11];
796 3 Tiny_WriteFuseBit(TinyFuse);
797 3 SendPackage(PackType-1, 0, NULL);
798 3 break;
799 3
C51 COMPILER V7.50 MAIN 06/11/2008 14:41:36 PAGE 14
800 3 ///////////////////////////////////////////////////////////////
801 3 case READ_CONFIG:
802 3 if(ProgStatus != PackType)
803 3 {
804 4 ProgStatus = PackType;
805 4 ProgModeCancle();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -