📄 main.lst
字号:
742 4 bit_subscript=(k%8);
743 4 custID=(custID|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bit_number));
744 4 bit_number--;
745 4 }
746 3 //data
747 3 k=0;
748 3 bit_number=7;
749 3 for(l=(j+20);l<(j+59);l++)
750 3 {
751 4 if (((l-j-20)%5)!=4)
752 4 {
753 5 array_subscript=(l>>3);
754 5 bit_subscript=(l%8);
755 5 DataItem[k]=(DataItem[k]|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bi
-t_number));
756 5
757 5 if (bit_number==0)
758 5 {
759 6 bit_number=7;
760 6 k++;
761 6 }else bit_number--;
762 5 }
763 4 }
764 3 }
765 2 }
766 1
767 1
768 1
769 1 //{向PC返回响应信息
770 1 check_stat=0x14;
771 1 if (flag_column_check==1)
772 1 {
773 2 check_stat=0;
774 2 flag_column_check=0;
775 2 }
776 1 tx_buff[0]=0x02;
777 1 tx_buff[1]=0x0a;
778 1 tx_buff[2]=0x86;
779 1 tx_buff[3]=check_stat;
780 1 tx_buff[4]=1; //RF/64
781 1 tx_buff[5]=custID;
782 1 tx_buff[6]=DataItem[0]; //
783 1 tx_buff[7]=DataItem[1];
784 1 tx_buff[8]=DataItem[2];
785 1 tx_buff[9]=DataItem[3];
786 1 tx_buff[10]=(tx_buff[1]^tx_buff[2]^tx_buff[3]^tx_buff[4]^tx_buff[5]^tx_buff[6]^tx_buff[7]^tx_buff[8]^tx_b
-uff[9]);
787 1 tx_buff[11]=0x03;
788 1 trace(tx_buff,12);
789 1 }
790
791 uchar Prepare_Cmd( uchar cmd )
792 {
793 1 register uchar line_parity;
794 1
C51 COMPILER V7.50 MAIN 06/12/2006 16:06:45 PAGE 14
795 1 *forward_ptr++ = 0; //start bit
796 1 *forward_ptr++ = 0;
797 1
798 1 *forward_ptr++ = cmd;
799 1 line_parity = cmd;
800 1 cmd >>= 1;
801 1 *forward_ptr++ = cmd;
802 1 line_parity ^= cmd;
803 1 cmd >>= 1;
804 1 *forward_ptr++ = cmd;
805 1 line_parity ^= cmd;
806 1 *forward_ptr++ = (line_parity & 1);
807 1 return 6;
808 1 }
809
810
811 uchar Prepare_Addr( uchar addr )
812 {
813 1 register uchar line_parity;
814 1 *forward_ptr++ = addr;
815 1 line_parity = addr;
816 1 addr >>= 1;
817 1 *forward_ptr++ = addr;
818 1 line_parity ^= addr;
819 1 addr >>= 1;
820 1 *forward_ptr++ = addr;
821 1 line_parity ^= addr;
822 1 addr >>= 1;
823 1 *forward_ptr++ = addr;
824 1 line_parity ^= addr;
825 1 *forward_ptr++ = 0;
826 1 *forward_ptr++ = 0;
827 1 *forward_ptr++ = (line_parity & 1);
828 1 return 7; //return number of emited bits
829 1 }
830
831
832
833 uchar Prepare_Data( uint data_low, uint data_hi)
834 {
835 1 register uchar line_parity;
836 1 register uchar column_parity;
837 1 register uchar i, j;
838 1 register uint datas;
839 1
840 1 datas = data_low;
841 1 column_parity = 0;
842 1
843 1 for(i=0; i<4; i++)
844 1 {
845 2 line_parity = 0;
846 2 for(j=0; j<8; j++)
847 2 {
848 3 line_parity ^= datas;
849 3 column_parity ^= (datas&1) << j;
850 3 *forward_ptr++ = datas;
851 3 datas >>= 1;
852 3 }
853 2 *forward_ptr++ = line_parity;
854 2 if(i == 1)
855 2 datas = data_hi;
856 2 }
C51 COMPILER V7.50 MAIN 06/12/2006 16:06:45 PAGE 15
857 1
858 1 for(j=0; j<8; j++)
859 1 {
860 2 *forward_ptr++ = column_parity;
861 2 column_parity >>= 1;
862 2 }
863 1 *forward_ptr = 0;
864 1
865 1 return 45; //return number of emited bits
866 1 }
867
868 // Forward Link setup function
869 // Requires: forwarLink_data filled with valid bits (1 bit per byte)
870 // fwd_bit_count set with number of bits to be sent
871 void SendForward(uchar fwd_bit_count)
872 {
873 1 uchar sync=1;
874 1 fwd_write_ptr = forwardLink_data;
875 1 fwd_bit_sz = fwd_bit_count;
876 1 fwd_bit_phase = 3;
877 1 field_stop = fwd_1st_pulse; //fwd_1st_pulse = 256-20
878 1
879 1 TR0=0;
880 1 TH0=0xff;TL0=1; //minimum startup pulse length,255
881 1 MOD=0;
882 1 TF0=0;
883 1 ET0=0; //disable T0 interrupt
884 1 TMOD=(TMOD|0x05); //计数器,16位计数器
885 1 TR0=1;
886 1
887 1 // waiting for clearing T0IE0 => command sending
888 1 while (!TF0)
889 1 {
890 2 if ((sync == 1) && (!DEMOD_OUT))
891 2 sync = 0;
892 2 if ((sync == 0) && (DEMOD_OUT))
893 2 break;
894 2 }
895 1 MOD=1; //force 1st mod pulse
896 1 fwd_bit_sz--; //prepare next bit modulation
897 1 fwd_write_ptr++;
898 1 TF0=0; //clear any pending flag
899 1 TR0=0;
900 1 TH0=0xFF;TL0= field_stop;
901 1 TR0=1;
902 1 field_stop = fwd_01_stop;
903 1 fwd_bit_phase = 2;
904 1 ET0=1; //enable overflow interrupt
905 1
906 1 // waiting for clearing T0IE0 => command sending
907 1 while ( ET0== 1 ) ;
908 1 }
909
910
911 void Wait(uint period)
912 {
913 1 TR2 = 0;
914 1 TF2=0;
915 1 TL2=(uchar)(~period); TH2=(uchar)((~period)>>8);
916 1 currentMaxTimeHi = 0xFF;
917 1 ET2=1;
918 1 TR2=1;
C51 COMPILER V7.50 MAIN 06/12/2006 16:06:45 PAGE 16
919 1 flag_wait=1;
920 1 while ( flag_wait);
921 1 }
922
923 //读卡程序, Manchester解码
924 void ManchesterRead(void)
925 {
926 1 uchar i,j;
927 1 uchar captured_bits_count;
928 1 ClearCaptureBuffers();
929 1 captured_bit_count = 0;
930 1 capture_cnt = 0;
931 1 captured_byte=0;
932 1 capture_check=0;
933 1 capture_check_count=0;
934 1 buffer_capture_check=0;
935 1 compute_capture_check=0;
936 1 check_stat=0;
937 1
938 1 for(i=0;i<120;i++) //2006-5-13 14:19
939 1 {
940 2 capture_time[i]=0xff;
941 2 }
942 1
943 1 TR2 = 0;
944 1 TF2 = 0;
945 1 TL2 = (uchar)(~maxCaptureTimeLow); //0xd7
946 1 TH2 = (uchar)((~maxCaptureTimeLow)>>8); //0xf0, //set timer with initial time
947 1 currentMaxTimeHi = ~maxCaptureTimeHi; //0xff
948 1
949 1 last_capture = ~maxCaptureTimeLow; //~0x0f28
950 1 capture_read_time_data_ptr = capture_time; // capture ptr
951 1
952 1 flag_wait=1;
953 1 ET2=1; //enable t2 interrupt
954 1
955 1 check_stat=ERR_EM4469_NEITHER_ACK; //if read card ok,check_stat will change
956 1 for(i=0;i<0xf0;i++)
957 1 {
958 2 if(DEMOD_OUT == 0) //等待低电平,超时退出
959 2 break;
960 2 }
961 1 if(i>=0xf0)
962 1 {
963 2 for(i=0;i<120;i++)
964 2 {
965 3 capture_time[i]=0xff;
966 3 }
967 2 return;
968 2 }
969 1
970 1 for(i=0;i<0xf0;i++)
971 1 {
972 2 if(DEMOD_OUT == 1) //等待高电平,超时退出
973 2 break;
974 2 }
975 1 if(i>=0xf0)
976 1 {
977 2 for(i=0;i<120;i++)
978 2 {
979 3 capture_time[i]=0xff;
980 3 }
C51 COMPILER V7.50 MAIN 06/12/2006 16:06:45 PAGE 17
981 2 return;
982 2 }
983 1
984 1 TR2=1; //
985 1 while ( flag_wait ) //接收
986 1 {
987 2 for(i=0;i<0xf0;i++)
988 2 {
989 3 if(DEMOD_OUT == 0)
990 3 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -