📄 cpu_com.lst
字号:
708 else
709 {
710 return FALSE;
711 }
712 }
713 return FALSE;
714
715 }
716 */
717 //复位
718 /*unsigned char Rst(void)
719 {
720 unsigned char reset_flag = 1,*ndata;
721 Reset(reset_flag);
722 if(Reset_answer(ndata)==FALSE)//冷复位失败
723 {
724 reset_flag = 0;
725 Reset(reset_flag);
726 if(Reset_answer(ndata)==FALSE)//热复位失败
727 return FALSE;
728 return TRUE;//热复位成功
729 }
730 return TRUE;//冷复位成功
731 }*/
C51 COMPILER V7.50 CPU_COM 05/16/2006 17:45:20 PAGE 13
732 //延时2500uS
733 void delay(void)
734 {
735 1 unsigned int i = 0;
736 1 for(i=0;i<413;i++);
737 1 //for(i=0;i<255;i++);
738 1 }
739 //正确时返回长度向串口发送长度个数据,错误时返回时向串口发送0xFF
740 unsigned char read_ATR(void)
741 {
742 1 unsigned char idata Present_TA2=FALSE,TA2=0xff,Number_ATR=0;
743 1 unsigned char idata ln_history,number_Ti,Yi=0,y;
744 1 unsigned char idata FI=1,DI=1,Type_T0=0,Type_Ti=0;
745 1 unsigned char idata ndata1[1];
746 1 unsigned char idata i,z=0,x = 0;
747 1 if(GetChar(ndata1) == TRUE)
748 1 {
749 2 ndata[0]=ndata1[0];
750 2 for(i=1;i<32;i++)
751 2 {
752 3 //BT_REC = 1;
753 3 if(GetChar(ndata1)==TRUE)
754 3 ndata[i]=ndata1[0];
755 3 else //接收完数据
756 3 goto comatr;
757 3 }
758 2 }
759 1 else //没有接收到ART,或者接收失败
760 1 return FALSE;
761 1 comatr:
762 1 if(ndata[z] == 0x3B)
763 1 CPUCD_Format = 0; //正规则
764 1 else if(ndata[z] == 0x03)
765 1 CPUCD_Format = 1; //反规则
766 1 else
767 1 return FALSE; //错误
768 1 z++; //Z = 1
769 1 if(z>(i-1)) //如果没有接收到第二个字节或第二个字节数据错误则失败
770 1 return FALSE; //
771 1 ln_history = ndata[z] & 0x0F; //取出历史字节个数
772 1 number_Ti = ndata[z] &0xF0; //取出反映TA1~TD1
773 1 z++; //Z = 2
774 1 if (number_Ti & 0X10) //读TA1,时钟速率转换因子
775 1 {
776 2 if (z>(i-1)) //如果没有接收到第三个字节或第三个字节数据错误则失败
777 2 return FALSE;
778 2 FI = ndata[z]>>4; //ndata[2]
779 2 DI = ndata[z] & 0X0F;
780 2 z++; //z=3
781 2 }
782 1 if (number_Ti & 0X20)
783 1 {
784 2 if (z>(i-1)) //读TB1,编程电压、电流参数
785 2 return FALSE;
786 2 z++; //z=4
787 2 }
788 1 if (number_Ti & 0X40)
789 1 {
790 2 if (z>(i-1)) //读TC1,8位以外的额外等候时间
791 2 return FALSE;
792 2 if (ndata[z] == 255) //ndata[4]
793 2 Extra_guardtime_N = 0;
C51 COMPILER V7.50 CPU_COM 05/16/2006 17:45:20 PAGE 14
794 2 else
795 2 {
796 3 Extra_guardtime_N = ndata[z];
797 3 // Extra_guardtime_N_bak = Extra_guardtime_N;
798 3 }
799 2 z++; //z=5
800 2 }
801 1 else
802 1 {
803 2 Extra_guardtime_N = 0;
804 2 }
805 1 if (number_Ti & 0X80)
806 1 {
807 2 if (z>(i-1)) //读TD1,无TD1默认Yi=0,Type_T0=0
808 2 return FALSE;
809 2 Type_T0 = ndata[z] & 0X0F; //ndata[5]
810 2 Yi = ndata[z] & 0xf0;
811 2 z++; //z=6
812 2 }
813 1 if (Yi & 0X10) //TA2,TB2,TC2,TD2的记录
814 1 {
815 2 if (z>(i-1)) //读TA2,指定模式字节
816 2 return FALSE;
817 2 Present_TA2=TRUE;
818 2 TA2=ndata[z]; //ndata[6]
819 2 z++; //z=7
820 2 }
821 1 if (Yi & 0X20)
822 1 {
823 2 if (z>(i-1)) //读TB2
824 2 return FALSE;
825 2 z++; //z=8
826 2 }
827 1 if (Yi & 0X40)
828 1 {
829 2 if (z>(i-1)) //读TC2
830 2 return FALSE;
831 2 tc2 = (ndata[z]/10)-1;
832 2 z++; //z=9
833 2 }
834 1 if (Yi & 0X80)
835 1 {
836 2 if (z>(i-1)) //读TD2
837 2 return FALSE;
838 2 Yi = ndata[z] & 0xf0;
839 2 Type_Ti = ndata[z] & 0X0F;
840 2 z++; //z=10
841 2 }
842 1 else
843 1 {
844 2 Yi=0;
845 2 }
846 1 while (Yi) //TAi,TBi,TCi,TDi的记录
847 1 {
848 2 if (Yi & 0X10)
849 2 {
850 3 if (z>(i-1)) //读TAi,指定模式字节
851 3 return FALSE;
852 3 z++; //z=11
853 3 }
854 2 if (Yi & 0X20)
855 2 {
C51 COMPILER V7.50 CPU_COM 05/16/2006 17:45:20 PAGE 15
856 3 if (z>(i-1)) //读TBi
857 3 return FALSE;
858 3 z++; //z=12
859 3 }
860 2 if (Yi & 0X40)
861 2 {
862 3 if (z>(i-1)) //读TCi
863 3 return FALSE;
864 3 z++; //z=13
865 3 }
866 2 if (Yi & 0X80)
867 2 {
868 3 if (z>(i-1)) //读TDi
869 3 return FALSE;
870 3 Yi = ndata[z] & 0xf0; //ndata[13]
871 3 Type_Ti = ndata[z] & 0X0F;
872 3 z++; //z=14
873 3 }
874 2 else
875 2 {
876 3 Yi=0;
877 3 }
878 2 }
879 1 while (ln_history) //接收历史字节
880 1 {
881 2 if(z>(i-1))
882 2 return FALSE;
883 2 z++;
884 2 ln_history--;
885 2 }
886 1 if (Type_T0 !=0 || Type_Ti !=0) //接收TCK: 在默认的 T = 0模式下,没有TCK;在 T = 0和 T = 15同时存在时,有
-TCK
887 1 {
888 2 if(z>(i-1))
889 2 {
890 3 tck = 0;
891 3 return FALSE;
892 3 }
893 2 z++;
894 2
895 2
896 2 //检查TCK是否正确
897 2 y=0x00;
898 2 for (x=1;x<=z;x++)
899 2 {
900 3 y ^= ndata[x];
901 3 }
902 2 if (y != 0)
903 2 {
904 3 tck = 0;
905 3 return FALSE;
906 3 }
907 2 else
908 2 tck = 1;
909 2 }
910 1 // else
911 1 // {
912 1 // return 255;
913 1 // }
914 1 return i;
915 1 // if (Present_TA2==TRUE)//TA2存在,指定模式。
916 1 // {
C51 COMPILER V7.50 CPU_COM 05/16/2006 17:45:20 PAGE 16
917 1 // OCR2 = (Arr_Fi[FI]/372)*52/Arr_Di[DI]-1;
918 1 // PreTCNT2=(OCR2+1)*2/3-1;
919 1 // }
920 1 /* else
921 1 {
922 1 if (Request_PPS() == FALSE)
923 1 return FALSE;
924 1 else
925 1 {
926 1 if (Response_PPS() == FALSE)
927 1 return FALSE;
928 1 }
929 1 }
930 1 */
931 1 // Extra_guardtime = Extra_guardtime_N;
932 1 //计算波特率机延时因子
933 1 // *ATR = Number_ATR;
934 1 }
935 void com_Open(void)
936 {
937 1 TH1=0XFA; //0XFD波特率为9.6K,fosc=11.059M; 0xFA fosc=22.1184
938 1 TL1=0XFA;
939 1 // TH1=0XF4; //0XFD波特率为9.6K,fosc=11.059M; 0xFA fosc=22.1184
940 1 // TL1=0XF4;
941 1 // TH1=0XFF; //0XFD波特率为9.6K,fosc=11.059M; 0xFA fosc=22.1184
942 1 // TL1=0XFF;
943 1
944 1 SCON=0X50; //串行口运行方
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -