曼彻斯特解码原则125KEM4100系列RFID卡解码源程序分析.doc_第1页
曼彻斯特解码原则125KEM4100系列RFID卡解码源程序分析.doc_第2页
曼彻斯特解码原则125KEM4100系列RFID卡解码源程序分析.doc_第3页
曼彻斯特解码原则125KEM4100系列RFID卡解码源程序分析.doc_第4页
曼彻斯特解码原则125KEM4100系列RFID卡解码源程序分析.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析曼彻斯特解码原则1. 曼彻斯特编码曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从高到低跳变表示1,从低到高跳变表示0。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示0或1,有跳变为0,无跳变为1。 对于以上电平跳变观点有歧义:关于曼彻斯特编码电平跳变,在雷振甲编写的网络工程师教程中对曼彻斯特编码的解释为:从低电平到高电平的转换表示1,从高电平到低电平的转换表示0,模拟卷中的答案也是如此,张友生写的考点分析中也是这样讲的,而计算机网络(第4版)中(P232页)则解释为高电平到低电平的转换为1,低电平到高电平的转换为0。清华大学的计算机通信与网络教程计算机网络(第4版)采用如下方式:曼彻斯特编码从高到低的跳变是 0 从低到高的跳变是 1 。两种曼彻斯特编码是将时钟和数据包含在数据流中,在传输代码信息的同时,也将时钟同步信号一起传输到对方,每位编码中有一跳变,不存在直流分量,因此具有自同步能力和良好的抗干扰性能。但每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2。 就是说主要用在数据同步传输的一种编码方式。【在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相应编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。】2. 曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE);常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号。但在不同的书籍中,曼彻斯特编码中,电平跳动表示的值不同,这里产生很多歧义:1、在网络工程师考试以及与其相关的资料中:位中间电平从高到低跳变表示0;位中间电平从低到高跳变表示1。2、在一些计算机网络书籍中:位中间 电平从高到低跳变表示1;位中间电平从低到高跳变表示0。在清华大学出版的计算机通信与网络教程计算机网络(第4版)也是这么说的,就以此为标准,我们就叫这为标准曼彻斯编码。至于第一种,我们在这里就叫它曼彻斯特编码。但是要记住,在不同的情况下懂得变通哦,否则会被老师扣分数的哦 。这两者恰好相反,千万别弄混淆了。现在我们要讲的 就是差分曼彻斯特编码:在信号位开始时不改变信号极性,表示辑1 在信号位开始时改变信号极性,表示逻辑0 ;【注意】:如果在最初信号的时候,即第一个信号时:如果中间位电平从低到高,则表示0;如果中间位电平从高到低,则表示1;后面的(从第二个开始)就看每个信号位开始时有没有跳变来决定:下面我们来举个例子,来比较标准曼彻斯特编码、曼彻斯特编码、差分曼彻斯特编码:EM4100系列用的是:曼彻斯特编码!125K;EM4100系列RFID卡解码源程序分析1. 我们知道了曼彻斯特编码原则,那么反过来的过程就是解码了。EM4100系列用的是:曼彻斯特编码!2. 传统只读射频卡读卡器的设计一般采用U2270B或EM4095读写基站芯片加MCU模式,其成本高、功耗大。本文介绍一种采用一片74HC4060+LM258/358加少量普通元件构成的读卡器电路和处理的程序设计方案,电路简单、功耗小、成本低。 74HC4060+LM258/358 电路为市面上已非常成熟 RFID-125KHZ-I卡且广泛采用的低功耗、低成本方案。该方案在门禁、保安、考勤、展览会、公园、旅店、餐厅等公共场所的门票、优惠卡以及生产过程、邮政包裹、航空铁路运输、产品包装、交通等部门的物流、电子标签、防伪标 志、一次性票证等众多领域上占据半壁江山。3. 推挽式放大电路输出後接LC串联谐振电路,当回路固有谐振频率与输入讯号频率相等时,电路发生串联谐振。本文只要求对125kHz频率的讯号放大,所以根据串联谐振公式计算电路中元件参数,可得L=737uH,C=2200pF。4. 包络检波电路 感应线圈产生谐振电压约有20V,所以载波讯号的电压也约为20V。对输入电压高於500mV检波,称为大讯号检波,利用二极体单向导电特性及检波负载RC充放电过程实现。RC参数的确定需要满足两个条件:1.不产生隋性失真,一般工程上按计算,f为载波频率。2.不产生负峰切割失真,即,m为调幅系数,R1是交流阻值,R0是直流阻值。联立上述两个条件,确定检波电路中R12、C36分别为470k、4700pF。5. 波形整形电路 在单晶片处理之前,整形电路将检波後的讯号变成单片机可以识别的高低电平。LM358 (LM258) 内部整合两个运放,经过两次整形後可以得到很好的方波讯号。电路中R16、R17、R18、R19起到分压作用,确定输出翻转门限为2.5V;R15、R21将同向输入的电压叠加在反向输入端;C54、C55为耦合电容,能够隔离直流分量,传递交流讯号。当U+大於U-+2.5V时,输出高电平;当U+小於U-+2.5V时,输出低电平。6. 读卡程序是根据EM4100、EM4001系列射频卡的特点量身定做的一段程序,射频卡以曼彻斯特编码,传输一个资料的时间t=64/125kHz=512s。实际使用中,一般传输时间为,230s0.5t280s。280s定时器取样时间512s。所以本文中取样波形时,定时器时间设定为400s,保证为取样留有足够的时间。原程序分析:1. 定时器时间设定为400s#defineTH0_H 0xfe/ 定时器0 取样定时值设定为400us#defineTL0_L 0x8f/8f2. 定时器0中断优先级最高: PT0=1;3. /曼彻斯特码同步头检测,9个1采用逐个前移检测法/逐个前移检测法,即每检测到一个数据,如果是1,并向数据库写入1,/如果是0,就放弃当前检测的数据,并向当前数据流方向移动一位,/这样一来,就保证了不管数据流是在何种状态下,都能正确无误地抓取9个1,/同步头9个1的提取成功,曼彻斯特码译码器即和当前的数据流保持了同步,/并把余下的55位数据全部译完。4. uchar REM_Buffer14;/曼彻斯特码解码后得到最终数据的缓存013/*曼彻斯特码解码后的数据放在 REM_Buffer013;REM_Buffer0=0xff 数据格式:1111 1111 同步头,8个1REM_Buffer1=0x8x 数据格式:1xxx xxxx 同步头,1个1,x表示无意义REM_Buffer2= 数据格式:D00D01D02D03 P0xxx 八个版本位或厂商信息的前四位,x表示无意义;P0为行效验位REM_Buffer3= 数据格式:D10D11D12D13 P1xxx 八个版本位或厂商信息的后四位,x表示无意义;P1为行效验位REM_Buffer4= 数据格式:D20D21D22D23 P2xxx 三十二个数据,x表示无意义;P2为行效验位REM_Buffer5= 数据格式:D30D31D32D33 P3xxx 三十二个数据,x表示无意义;P3为行效验位REM_Buffer6= 数据格式:D40D41D42D43 P4xxx 三十二个数据,x表示无意义;P4为行效验位REM_Buffer7= 数据格式:D50D51D52D53 P5xxx 三十二个数据,x表示无意义;P5为行效验位REM_Buffer8= 数据格式:D60D61D62D63 P6xxx 三十二个数据,x表示无意义;P6为行效验位REM_Buffer9= 数据格式:D70D71D72D73 P7xxx 三十二个数据,x表示无意义;P7为行效验位REM_Buffer10= 数据格式:D80D81D82D83 P8xxx 三十二个数据,x表示无意义;P8为行效验位REM_Buffer11= 数据格式:D90D91D92D93 P9xxx 三十二个数据,x表示无意义;P9为行效验位REM_Buffer12= 数据格式:PC0PC1PC2PC3 0xxx 四个列效验位,x表示无意义;0为停止位原程序:/2008.10.15/125K;EM4100系列RFID卡解码/#include /使用AT89S51/52等系列单片机头文件#include /stc系列单片机专用头文件#include #define uint unsigned int/定义 #define uchar unsigned char/定义 #define ulong unsigned long/定义 sbit REM=P21;/ 曼彻斯特编码输入端sbit CLK=P33;/产生125KHZ 时钟信号端sbit LED=P25;/ 红灯sbit SPP=P10;/ 喇叭bit REM_BIT;/ 曼彻斯特码高、低边沿跳变标志位,bit Efficacy_BIT; /待效验标志位,bit P_PC_BIT; /行,列效验标志位bit YES_NO_BIT; /效验正确,或效验错误标志位,/YES_NO_BIT=1 表示效验正确;/YES_NO_BIT=0 表示效验错误。#defineTH0_H 0xfe/ 定时器0 取样定时值设定为400us#defineTL0_L 0x8f/8f/350420us/375450usuchar U_D_Buffer5;/User_Data/用户数据缓存,ulong long_D;/方法1,卡号在 long_D 中,不足10位,则在高位前面加 0uchar char_D;/方法2,前两位卡号在 char_D 中,uint int_D;/方法2,卡号后4位卡号在 int_D 中,uchar volue;/volue 为曼彻斯特码译码时的临时运算缓存uchar REM_Buffer14;/曼彻斯特码解码后得到最终数据的缓存013/*曼彻斯特码解码后的数据放在 REM_Buffer013;REM_Buffer0=0xff 数据格式:1111 1111 同步头,8个1REM_Buffer1=0x8x 数据格式:1xxx xxxx 同步头,1个1,x表示无意义REM_Buffer2= 数据格式:D00D01D02D03 P0xxx 八个版本位或厂商信息的前四位,x表示无意义;P0为行效验位REM_Buffer3= 数据格式:D10D11D12D13 P1xxx 八个版本位或厂商信息的后四位,x表示无意义;P1为行效验位REM_Buffer4= 数据格式:D20D21D22D23 P2xxx 三十二个数据,x表示无意义;P2为行效验位REM_Buffer5= 数据格式:D30D31D32D33 P3xxx 三十二个数据,x表示无意义;P3为行效验位REM_Buffer6= 数据格式:D40D41D42D43 P4xxx 三十二个数据,x表示无意义;P4为行效验位REM_Buffer7= 数据格式:D50D51D52D53 P5xxx 三十二个数据,x表示无意义;P5为行效验位REM_Buffer8= 数据格式:D60D61D62D63 P6xxx 三十二个数据,x表示无意义;P6为行效验位REM_Buffer9= 数据格式:D70D71D72D73 P7xxx 三十二个数据,x表示无意义;P7为行效验位REM_Buffer10= 数据格式:D80D81D82D83 P8xxx 三十二个数据,x表示无意义;P8为行效验位REM_Buffer11= 数据格式:D90D91D92D93 P9xxx 三十二个数据,x表示无意义;P9为行效验位REM_Buffer12= 数据格式:PC0PC1PC2PC3 0xxx 四个列效验位,x表示无意义;0为停止位*/uchar code DispTab=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;uchar code Data=Data: ;/数据uchar code UserData=User Data: ;/用户数据uchar code Card_1=Methods 1 Decimal Card Number: ;/方法1:掐头留尾法提取10位十进制卡号:uchar code Card_2=Methods 2 Decimal Card Number: ;/方法2:前两位后4位的微根格式,段间以小数点或豆号隔开uchar code DispTab_2= ,H,;void init()/TMOD=0x21;TH1=0xfd;/11.0592MHz 波特率: 9600TL1=0xfd;PCON&=0x80;SCON=0x40;/AUXR=0x40;/波特率倍增 /11.0592MHz 115200TH0=0x00;/TL0=0x00;/EA=1;ET0=1;TR0=0;TR1=1;ES=0;REN=1;PT0=1;/PT0H=1;/定时器0中断优先级最高:第三/PT0H是 stc单片机特有的寄存器REM=1;CLK=1;SPP=1;LED=1;REM_BIT=1;void delay1(uint z)/ delay(10); 10次为1msuchar x;for(;z0;z-)for(x=0;x160;x+)/*void delay()/ _nop_();_nop_();_nop_();*/void Time_interrupt(void) interrupt 1 /定时器0中断TR0=0;/关闭定时器0,为曼彻斯特码提取数据定时器void RS232_in(void) interrupt 4/串口中断EA=0;if(RI=1)/接收 RI=0; /SBUF_RI_Buffer0=SBUF;/RS2323接收缓冲区/else /if(TI=1)/发送TI=0;EA=1;void RS232()/通信转输数据,发给 PCuchar i;ulong mm;/ES=0;if(REM_Buffer0=0xff)&(REM_Buffer1=0x80)/同步头9个1的判断,同步头正确,进入数据发送,否则退出for(i=0;i6;i+)SBUF=Datai;/ while(TI=0);TI=0;for(i=0;i13;i+)SBUF=DispTab(REM_Bufferi/16);/SBUF=REM_Bufferi;/给 PC 发送REM_Buffer013个数据while(TI=0);/TI=1,表示数据发送完毕,TI=0;/TI清零,并把余下的数据继续发送,直到13个数据全部发送完。SBUF=DispTab(REM_Bufferi%16);while(TI=0);TI=0;SBUF=DispTab_21;/Hwhile(TI=0);TI=0;SBUF=DispTab_20;/ while(TI=0);TI=0;for(i=0;i94;i+)SBUF=DispTab_20;/ while(TI=0);TI=0;/U_D_Buffer5;/User_Data/用户数据缓存,for(i=0;i11;i+)SBUF=UserDatai;/ while(TI=0);TI=0;for(i=0;i5;i+)SBUF=DispTab(U_D_Bufferi/16);while(TI=0);TI=0;SBUF=DispTab(U_D_Bufferi%16);while(TI=0);TI=0;SBUF=DispTab_21;/Hwhile(TI=0);TI=0;SBUF=DispTab_20;/ while(TI=0);TI=0;for(i=0;i120;i+)SBUF=DispTab_20;/ while(TI=0);TI=0;for(i=0;i31;i+)SBUF=Card_1i;/ while(TI=0);TI=0;/10位十进制卡号 Card_1SBUF=DispTablong_D/1000000000;/10while(TI=0);TI=0;mm=long_D%1000000000;SBUF=DispTabmm/100000000;/9while(TI=0);TI=0;mm=long_D%100000000;SBUF=DispTabmm/10000000;/8while(TI=0);TI=0;mm=long_D%10000000;SBUF=DispTabmm/1000000;/7while(TI=0);TI=0; mm=long_D%1000000;SBUF=DispTabmm/100000;/6while(TI=0);TI=0; mm=mm%100000;SBUF=DispTabmm/10000;/5while(TI=0);TI=0;mm=long_D%10000;SBUF=DispTabmm/1000;/4while(TI=0);TI=0;mm=long_D%1000;SBUF=DispTabmm/100;/3while(TI=0);TI=0;mm=long_D%100;SBUF=DispTabmm/10;/2while(TI=0);TI=0;SBUF=DispTabmm%10;/1while(TI=0);TI=0;/Card_2for(i=0;i106;i+)SBUF=DispTab_20;/ while(TI=0);TI=0;for(i=0;i31;i+)SBUF=Card_2i;/ while(TI=0);TI=0;SBUF=DispTabchar_D/100;/while(TI=0);TI=0;char_D=char_D%100;SBUF=DispTabchar_D/10;/while(TI=0);TI=0;SBUF=DispTabchar_D%10;/while(TI=0);TI=0;SBUF=DispTab_22;/while(TI=0);TI=0;SBUF=DispTabint_D/10000;/while(TI=0);TI=0;int_D=int_D%10000;SBUF=DispTabint_D/1000;/while(TI=0);TI=0;int_D=int_D%1000;SBUF=DispTabint_D/100;/while(TI=0);TI=0;int_D=int_D%100;SBUF=DispTabint_D/10;/while(TI=0);TI=0;SBUF=DispTabint_D%10;/while(TI=0);TI=0;for(i=0;i109;i+)SBUF=DispTab_20;/ while(TI=0);TI=0;/ES=0;void REM_init()/射频接口初始化CLK=0;/为74HC4060 提供+5V电源,74HC4060得电后输出125KHZ信号void REM_Processing()/曼彻斯特码数据提取uchar i,ii;loop:TR0=0;volue=0;for(i=0;i9;i+)/曼彻斯特码同步头检测,9个1采用逐个前移检测法/逐个前移检测法,即每检测到一个数据,如果是1,并向数据库写入1,/如果是0,就放弃当前检测的数据,并向当前数据流方向移动一位,/这样一来,就保证了不管数据流是在何种状态下,都能正确无误地抓取9个1,/同步头9个1的提取成功,曼彻斯特码译码器即和当前的数据流保持了同步,/并把余下的55位数据全部译完。while(REM=1)if(TR0=0)goto loop;/break;TR0=0;TH0=TH0_H;/开启400us定时器,TL0=TL0_L;TR0=1;while(TR0=1);TH0=TH0_H;/开启400us定时器,同步头逐个前移检测TL0=TL0_L;TR0=1;if(REM=0)goto loop;if(i8)volue=1;volue|=0x01;if(i=7)REM_Buffer0=volue;REM_Buffer1=0x80;TR0=0;REM_BIT=0;volue=0x00;TH0=TH0_H;/400usTL0=TL0_L; /下降TR0=1;for(i=2;i13;i+)/曼彻斯特码解码 for(ii=0;ii5;ii+)/曼彻斯特码解码while(TR0=1);if(REM=1)if(REM_BIT=0)while(REM=1);/曼彻斯特码跳变为高电平_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=1);/_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=1);/volue=1;/用左移指令把1移入voluevolue|=0x08;/跳变的瞬间提取数据,TH0=TH0_H;/开启400us定时器,为下次提取数据提供参考TL0=TL0_L;TR0=1;REM_BIT=0;/曼彻斯特码标志位置0else /if(REM_BIT=1)while(REM=1);/曼彻斯特码跳变为高电平_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=1);_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=1);volue=1;/用左移指令把1移入voluevolue|=0x08;/跳变的瞬间提取数据,TH0=TH0_H;/开启400us定时器,为下次提取数据提供参考TL0=TL0_L;TR0=1;REM_BIT=0;/曼彻斯特码标志位置0else /if(REM=0)if(REM_BIT=0)while(REM=0);/曼彻斯特码跳变为下降沿_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=0);_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=0);volue=1;/用左移指令把0移入volueTH0=TH0_H;/开启400us定时器,为下次提取数据提供参考TL0=TL0_L;TR0=1;REM_BIT=1;/曼彻斯特码标志位置1else /if(REM_BIT=1)while(REM=0);/曼彻斯特码跳变为下降沿_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=0);_nop_();_nop_();_nop_();_nop_();/抗抖动while(REM=0);volue=1;/用左移指令把0移入volueTH0=TH0_H;/开启400us定时器,为下次提取数据提供参考TL0=TL0_L;TR0=1;REM_BIT=1;/曼彻斯特码标志位置1REM_Bufferi=volue;volue=0x00;void Efficacy()/数据效验uchar i,ii,cache,cache_1,counter;/counter=0;for(i=2;i12;i+)/行效验counter=0;cache=REM_Bufferi;cache_1=REM_Bufferi;for(ii=0;ii4;ii+)cache&=0x80;if(cache=0x80)counter+;cache_1=1;cache=cache_1;if(counter=0)|(counter=2)|(counter=4)Efficacy_BIT=0;else if(counter=1)|(counter=3)Efficacy_BI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论