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