文档库 最新最全的文档下载
当前位置:文档库 › 曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析

曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析

曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析
曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析

曼彻斯特解码原则+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=512μs。实际使用中,一般传输时间为,230μs<0.5t<280μs。280μs<定时器取样时间<512μs。所以本文中取样波形时,定时器时间设定为400μs,保证为取样留有足够的时间。

原程序分析:

1. 定时器时间设定为400μs

#define TH0_H 0xfe// 定时器0 取样定时值设定为400us

#define TL0_L 0x8f//8f

2.定时器0中断优先级最高:

PT0=1;

3.//曼彻斯特码同步头检测,9个1采用逐个前移检测法

//逐个前移检测法,即每检测到一个数据,如果是"1",并向数据库写入1, //如果是"0",就放弃当前检测的数据,并向当前数据流方向移动一位, //这样一来,就保证了不管数据流是在何种状态下,都能正确无误地抓取9个1,

//同步头9个1的提取成功,曼彻斯特码译码器即和当前的数据流保持了同步,

//并把余下的55位数据全部译完。

4.uchar REM_Buffer[14];//曼彻斯特码解码后得到最终数据的缓存0~13

/*曼彻斯特码解码后的数据放在REM_Buffer[0~13];

REM_Buffer[0]=0xff 数据格式:1111 1111 同步头,8个1

REM_Buffer[1]=0x8x 数据格式:1xxx xxxx 同步头,1个1,x表示

无意义

REM_Buffer[2]= 数据格式:D00D01D02D03 P0xxx 八个版本位或厂商信息的前四位,x表示无意义;P0为行效验位

REM_Buffer[3]= 数据格式:D10D11D12D13 P1xxx 八个版本位或厂商信息的后四位,x表示无意义;P1为行效验位

REM_Buffer[4]= 数据格式:D20D21D22D23 P2xxx 三十二个数据,x表示无意义;P2为行效验位

REM_Buffer[5]= 数据格式:D30D31D32D33 P3xxx 三十二个数据,x表示无意义;P3为行效验位

REM_Buffer[6]= 数据格式:D40D41D42D43 P4xxx 三十二个数据,x表示无意义;P4为行效验位

REM_Buffer[7]= 数据格式:D50D51D52D53 P5xxx 三十二个数据,x表示无意义;P5为行效验位

REM_Buffer[8]= 数据格式:D60D61D62D63 P6xxx 三十二个数据,x表示无意义;P6为行效验位

REM_Buffer[9]= 数据格式:D70D71D72D73 P7xxx 三十二个数据,x表示无意义;P7为行效验位

REM_Buffer[10]= 数据格式:D80D81D82D83 P8xxx 三十二个数据,x表示无意义;P8为行效验位

REM_Buffer[11]= 数据格式:D90D91D92D93 P9xxx 三十二个数据,x表示无意义;P9为行效验位

REM_Buffer[12]= 数据格式: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=P2^1;// 曼彻斯特编码输入端

sbit CLK=P3^3;//产生125KHZ 时钟信号端

sbit LED=P2^5;// 红灯

sbit SPP=P1^0;// 喇叭

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

//350~420us

//375~450us

uchar U_D_Buffer[5];//User_Data//用户数据缓存,

ulong long_D;//方法1,卡号在long_D 中,不足10位,则在高位前面加0

uchar char_D;//方法2,前两位卡号在char_D 中,

uint int_D;//方法2,卡号后4位卡号在int_D 中,

uchar volue;//volue 为曼彻斯特码译码时的临时运算缓存

uchar REM_Buffer[14];//曼彻斯特码解码后得到最终数据的缓存0~13 /*曼彻斯特码解码后的数据放在REM_Buffer[0~13];

REM_Buffer[0]=0xff 数据格式:1111 1111 同步头,8个1

REM_Buffer[1]=0x8x 数据格式:1xxx xxxx 同步头,1个1,x表示无意义

REM_Buffer[2]= 数据格式:D00D01D02D03 P0xxx 八个版本位或厂商信息的前四位,x表示无意义;P0为行效验位

REM_Buffer[3]= 数据格式:D10D11D12D13 P1xxx 八个版本位或厂商信息的后四位,x表示无意义;P1为行效验位

REM_Buffer[4]= 数据格式:D20D21D22D23 P2xxx 三十二个数据,x表示无意义;P2为行效验位

REM_Buffer[5]= 数据格式:D30D31D32D33 P3xxx 三十二个数据,x表示无意义;P3为行效验位

REM_Buffer[6]= 数据格式:D40D41D42D43 P4xxx 三十二个数据,x表示无意义;P4为行效验位

REM_Buffer[7]= 数据格式:D50D51D52D53 P5xxx 三十二个数据,x表示无意义;P5为行效验位

REM_Buffer[8]= 数据格式:D60D61D62D63 P6xxx 三十二个数据,x表示无意义;P6为行效验位

REM_Buffer[9]= 数据格式:D70D71D72D73 P7xxx 三十二个数据,x表示无意义;P7为行效验位

REM_Buffer[10]= 数据格式:D80D81D82D83 P8xxx 三十二个数据,x表示无意义;P8为行效验位

REM_Buffer[11]= 数据格式:D90D91D92D93 P9xxx 三十二个数据,x表示无意义;P9为行效验位

REM_Buffer[12]= 数据格式: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 波特率: 9600

TL1=0xfd;

PCON&=0x80;

SCON=0x40;

//AUXR=0x40;//波特率倍增//11.0592MHz 115200

TH0=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次为1ms { uchar x;

for(;z>0;z--)

{

for(x=0;x<160;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_Buffer[0]=SBUF;//RS2323接收缓冲区

}

//////////////////

else //if(TI==1)//发送

TI=0;

EA=1;

}

void RS232()//通信转输数据,发给PC

{

uchar i;

ulong mm;

//ES=0;

if((REM_Buffer[0]==0xff)&&(REM_Buffer[1]==0x80))//同步头9个1的判断,同步头正确,进入数据发送,否则退出

{

for(i=0;i<6;i++)

{

SBUF=Data[i];//" "

while(TI==0);

TI=0;

}

for(i=0;i<13;i++)

{

SBUF=DispTab[(REM_Buffer[i]/16)];

//SBUF=REM_Buffer[i];//给PC 发送REM_Buffer[0~13]个数据

while(TI==0);//TI=1,表示数据发送完毕,

TI=0;//TI清零,并把余下的数据继续发送,直到13个数据全部发送完。

SBUF=DispTab[(REM_Buffer[i]%16)];

while(TI==0);

TI=0;

SBUF=DispTab_2[1];//'H'

while(TI==0);

TI=0;

SBUF=DispTab_2[0];//' '

while(TI==0);

TI=0;

}

for(i=0;i<94;i++)

{

SBUF=DispTab_2[0];//" "

while(TI==0);

TI=0;

}

//U_D_Buffer[5];//User_Data//用户数据缓存, for(i=0;i<11;i++)

{

SBUF=UserData[i];//" "

while(TI==0);

TI=0;

}

for(i=0;i<5;i++)

{

SBUF=DispTab[(U_D_Buffer[i]/16)];

while(TI==0);

TI=0;

SBUF=DispTab[(U_D_Buffer[i]%16)];

while(TI==0);

TI=0;

SBUF=DispTab_2[1];//'H'

while(TI==0);

TI=0;

SBUF=DispTab_2[0];//' '

while(TI==0);

TI=0;

}

for(i=0;i<120;i++)

{

SBUF=DispTab_2[0];//" "

while(TI==0);

TI=0;

}

for(i=0;i<31;i++)

{

SBUF=Card_1[i];//" "

while(TI==0);

TI=0;

}

//10位十进制卡号Card_1

SBUF=DispTab[long_D/1000000000];//10 while(TI==0);

TI=0;

mm=long_D%1000000000;

SBUF=DispTab[mm/100000000];//9 while(TI==0);

TI=0;

mm=long_D%100000000;

SBUF=DispTab[mm/10000000];//8 while(TI==0);

TI=0;

mm=long_D%10000000;

SBUF=DispTab[mm/1000000];//7 while(TI==0);

TI=0;

mm=long_D%1000000;

SBUF=DispTab[mm/100000];//6 while(TI==0);

TI=0;

mm=mm%100000;

SBUF=DispTab[mm/10000];//5 while(TI==0);

TI=0;

mm=long_D%10000;

SBUF=DispTab[mm/1000];//4 while(TI==0);

TI=0;

mm=long_D%1000;

SBUF=DispTab[mm/100];//3 while(TI==0);

TI=0;

mm=long_D%100;

SBUF=DispTab[mm/10];//2 while(TI==0);

TI=0;

SBUF=DispTab[mm%10];//1 while(TI==0);

//////////////////////////////////Card_2

for(i=0;i<106;i++)

{

SBUF=DispTab_2[0];//" "

while(TI==0);

TI=0;

}

for(i=0;i<31;i++)

{

SBUF=Card_2[i];//" "

while(TI==0);

TI=0;

}

SBUF=DispTab[char_D/100];//

while(TI==0);

TI=0;

char_D=char_D%100;

SBUF=DispTab[char_D/10];//

while(TI==0);

曼彻斯特解码程序

曼彻斯特解码 1、变量定义 (2) 2、Manchest初始化 (2) 3、Manchest解码信号翻转 (3) 4、过滤错误的卡号 (4) 5、获取正确的卡号 (5) 6、Manchest获取卡号数据 (6) 7、通过中断采样获取刷卡数据 (9)

1、变量定义 #define TH1_370US_H 0XFE //晶振11.0592MHZ,12T模式 #define TL1_370US_L 0XAB #define SIGNAL_FLIP_TIME 10 //每隔100ms翻转一次读卡信号 #define REPEAT_TIME 5 //500ms后重复读卡 #define CLEAR_CARD_TIME 20 //2S后清除卡号数据 #define MANCHEST_TIME 5 sbit PULSE = P3^2; sbit RFEN = P3^5; //曼彻斯特解码脉冲信号 sbit MANCHEST0= P3^2; //wiegand0 sbit MANCHEST1= P3^3; //wiegand1 uchar code CheckingTab[32]={ //接收到10组卡号的偶校验 0X00,0X01,0X01,0X00,0X01,0X00,0X00,0X01, //这里数值是低五位的偶校验值 0X01,0X00,0X00,0X01,0X00,0X01,0X01,0X00, 0X01,0X00,0X00,0X01,0X00,0X01,0X01,0X00, 0X00,0X01,0X01,0X00,0X01,0X00,0X00,0X01}; uchar WGCardBuf[5]; //卡号 uchar CopyCardBuf[5]; //备份卡号 uchar ManchestBuf[11]; //暂存接收到的11组数据 uchar idata g_ucManchestTime = MANCHEST_TIME; // uchar idata g_ucDWithCardTime= 0; //隔500ms处理该卡号 uchar idata g_ucPreambleFlag = 0; uchar idata g_ucERAgainTimer = 0; //每隔100ms翻转一次RFEN uchar idata g_ucStoreGroupCnt= 0; //接收到几组数据,这里为11组才可能正确 uchar idata g_ucEGroupBitCnt = 0; //每组数据有5个为,5=4位卡号+1位偶校验 uchar idata g_ucPreambleCount= 0; //9位为1的引导码 uchar idata g_ucRemvoeCardTime=0; //隔多久清除以前的卡号数据,这里为3s 2、Manchest初始化 /******************************************************************** 函数原型:ManchestInit 功能:曼彻斯特解码变量初始化 输入:无 输出:无 说明:无

曼彻斯特码原理与应用

曼彻斯特码 1 曼彻斯特原理介及其编码规则 (1) 2 曼彻斯特码的各方面应用 (3) 3 曼彻斯特码与差分曼彻斯特码 (5) 1 曼彻斯特原理介及其编码规则 Manchester编码是一种常用的基带信号编码。它具有内在的时钟信息,因而能使网络上的每一个系统保持同步。在Manchester编码中,时间被划分为等间隔的小段,其中每小段代表一位数据。每一小段时间本身又分为两半,前半个时间段所传信号是该时间段传送比特值的反码,后半个时间段传送的是比特值本身。可见在一个时间段内,其中间点总有一次信号电平的变化,因此携带有信号传送的同步信息而不需另外传送同步信号。 Manchester编码采用电平由高到低变化的下降沿代表0,电平由低到高变化的上升沿代表1;发送和接收的同步工作方式保证了信息传递的方便和可靠。 为了减少控制器与位置反馈单元之间的连线数目,信息的传递可采用两根线的串行方式。发送端和接收端的同步靠信息脉冲串之前的同步脉冲串来实现。 在电信领域,曼彻斯特码,(也称作相位码或者PE)是一种数据通讯线性码,它的每一个数据比特都是由至少一次电压转换的形式所表示的曼彻斯特编码被因此被认为是一种自定时码。自定时意味着数据流的精确同步是可行的。每一个 图1 二进制码和曼彻斯特码对比图 比特都准确的在一预先定义时间时期的时间中被传送。但是,今天有许许多多的复杂的编码方法(例如8B/10B编码),在达到同等目的情况下只需要更少带宽负荷并且只有更少的同步信号相位模糊。

二进制码与曼彻斯特码波形的对比关系如图1所示。 在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相应编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。 用于数字基带传输的码型种类较多,Manchester码是其中常用的一种。Manchester码是一种用跳变沿(而非电平)来表示要传输的二进制信息(0或1),一般规定在位元中间用下跳变表示“1”,用上跳变表示“0”. 曼彻斯特编码被被认为是一种自定时码自定时意味着数据流的精确同步是可行的。每一个比特都准确的在一预先定义时间时期的时间中被传送。 在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从高到低跳变表示"1",从低到高跳变表示"0"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。 曼彻斯特编码提供了一种简单的方法在长时间段内没有电平跳变的情况下,仍然能够对任意的二进制序列进行编码,并且防止在这种情况下同步时钟信号的丢失以及防止低通模拟电路中低频直流飘移所引起的比特错误。如果保证传送的编码交流信号的直流分量为零并且能够防止中继信号的基线漂移,那么很容易实现信号的恢复和防止能量的浪费。曼彻斯特码具有丰富的位定时信息。 在物理层的同步时钟编码技术用来将时钟和数据编码统一在一个同步比特数据流中。在这项技术中,在电缆上被传送的真实二元数据不是以一连串的逻辑序列1或者0来表示的(这项技术也是一种不归零码NRZ)。这些要传送的数据比特被转换成一个略微不同格式,比起直接用二进制码(i.e. NRZ)来有许多的优势。 在曼彻斯特编码方案中,比特周期中间的0到1跳变表示逻辑0,比特周期中间的1到0的跳变表示逻辑1。注意信号跳变不一定在‘bitboundaries’比特边界(一个比特和另外一个比特)之间的分界线,但是总是发生在每个比特的中间位置.曼彻斯特编码的规则列出如下表1所示。

曼彻斯特码编解码的FPGA设计与实现

武汉理工大学 本科生毕业设计(论文)开题报告

目录 摘要 .......................................................................................................................................................... I ABSTRACT ............................................................................................................................................. II 1 绪论 (1) 1.1 背景及目的意义 (1) 1.2 国内外研究现状 (1) 1.2.1 在电信业的应用 (1) 1.2.2 在工业控制中的应用 (2) 1.2.3 在车辆总线中的应用 (2) 1.2.4 在石油勘测探井中的应用 (2) 1.3 项目研究内容及组织结构 (2) 2. 开发工具及仿真软件 (4) 2.1 FPGA原理 (4) 2.2 QuartusⅡ (5) 2.2.1 QuartusⅡ系统的特点 (5) 2.2.2 Quartus II下的FPGA设计 (6) 2.2.3 QuartusⅡ的仿真 (8) 2.3 Modelsim (8) 3 曼彻斯特码 (10) 3.1 数字通信中位同步与线路编码 (10) 3.2 曼彻斯特码及几种相关的二元码码型介绍 (11) 3.2.1 曼彻斯特码 (11) 3.2.2 单极性非归零波形 (12) 3.2.3 密勒码――曼彻斯特码的一种变形码 (12) 3.3 曼彻斯特码及几种常见二元码的包含定时信息的讨论 (12) 3.4曼彻斯特码的优点 (18) 3.5曼彻斯特码的应用范围 (19) 3.5.1在LAN中的应用 (19) 3.5.2在测井系统中的应用 (19) 3.6 曼彻斯特编码规则 (20) 4 系统方案设计 (23) 4.1 编码电路的设计 (23) 4.1.1 并串转换器的设计 (24) 4.1.2 NRZ码转换为曼彻斯特码 (25) 4.2 解码电路的设计 (26) 4.2.1 总体设计 (26) 4.2.2 各模块设计 (27) 5系统功能的实现 (30) 5.1 Verilog HDL语言简介 (30)

基于AVR单片机的曼彻斯特编解码及其应用_王建国

—258 — 基于A VR 单片机的曼彻斯特编解码及其应用 王建国,孙敬华,曹丙霞 (中国海洋大学工程学院,青岛 266071) 摘 要:提出了一种在较高通信速率(10kbps)下用A VR 单片机软件实现曼彻斯特码编解码的方法。介绍了小功率无线传输系统的工作原理和通信协议。详细阐述了用软件识别同步时钟、起始符、同步头和数据的技术方法。 关键词:曼彻斯特编解码;无线通信;A VR 单片机 Manchester Code/decode Based on A VR and Its Application WANG Jianguo, SUN Jinghua, CAO Bingxia (Engineering College, Ocean University of China, Qingdao 266071) 【Abstract 】The paper introduces a hi-efficient coding/decoding method to apply A VR MCU to code/decode Manchester at 10kbps successfully,principle and communication protocol in wireless communicating systems of low power. It provides in detail a technique about how to identify initial flag, synchronization code and data. 【Key words 】Manchester code/decode; Wireless communication; A VR 计 算 机 工 程Computer Engineering 第32卷 第20期 Vol.32 № 20 2006年10月 October 2006 ·工程应用技术与实现· 文章编号:1000—3428(2006)20—0258—03 文献标识码:A 中图分类号:TP368.2 随着无线通信芯片技术的发展,越来越多的便携式或电池供电的无线传输设备进入人们日常生活中。例如,遥控车门开关(RKE)系统、汽车轮胎压力监视系统(TPMS)、无线内窥镜系统、蓝牙技术等。这种小功率无线传输系统的关键技术是在低电流消耗和信道干扰较强的情况下实现数据稳定可靠的传输。 曼彻斯特码由于其特殊的性能,被广泛应用于小功率无线传输系统中。曼彻斯特编码是串行数据传输的一种重要的编码方式。曼彻斯特编码最大的优点是:数据和同步时钟统一编码,曼码中含有丰富的时钟信号,直流分量基本为零,接收器能够较容易恢复同步时钟,并同步解调出数据,具有很好的抗干扰性能,这使它更适合于信道传输。 传统的曼彻斯特码的编解码一般采用专用芯片电路实现,数据的串/并转换和信号的合成都通过硬件电路实现,导致电路复杂,系统成本提高。考虑到目前微处理器功能不断提高,在不影响系统微处理器完成其它处理任务的情况下,完全可以采用微处理器来实现曼彻斯特码的编码和解码。本设计提出了一种简单有效的曼彻斯特码解调方法,并选用高速AVR 单片机及软件编程实现了曼彻斯特码的编解码。 1 小功率无线传输系统工作原理 小功率无线传输系统一般由射频发射机和接收监视器两部分组成。射频发射机采集和发射信息;接收监视器接收信息,并根据接收到的信息执行相应的操作。 1.1 射频发射机模块 射频发射机一般采用电池供电,以遥控车门开关 (RKE)系统为例,电池需要连续工作3~5年,低功耗设计是电路设计的关键。在此射频发射机主控MCU 选用Atmel 公司的高性能、低功耗微控制器ATmega48V 。该芯片工作电压最低可达1.8V ,具有5种省电休眠模式,适合低功耗应用场合。根据处理器工作状态的不同进入相应的休眠模式。在掉电模式下耗电小于1μA ,极大地降低了功耗。 射频发射机的系统框图如图1所示。MCU 首先对数据进行曼彻斯特码编码,然后把数据送到射频发射芯片发射。 1.2 射频接收监视器模块 接收监视器的主控MCU 采用Atmel 公司的高性能、高速RISC 微控制器ATmega169。该芯片内嵌了4*25段的LCD 驱动器,通过它可以在LCD 上显示一些用户关心的状态信息,如轮胎气压信息等。ATmega169单片机的T/C1具有一个捕捉单元,可用来捕捉外部事件,并为其赋予时间标记以说明此事件发生的时刻。外部事件发生的触发信号可由引脚ICP1(输入捕捉引脚)输入,也可通过模拟比较器单元实现。 本设计采用T/C1的输入捕捉单元接收数据, 即曼彻斯特码数据从引脚ICP1输入。这种数据接收处理方法要求MCU 对外部输入事件具有足够的处理能力,微控制器ATmega169工作在16MHz 时性能高达16MIPS 。实验证明,当数据波特率为10kHz 时,系统能够正确接收数据。 接收监视器的系统框图如图2所示。射频信号经接收芯片解调,输出的曼码数据经过引脚ICP1输入到MCU ,MCU 利用单片机的T/C1的引脚捕捉功能虽然能够实现曼码数据电平时间精确测量,但存在一个明显的不足,就是对干作者简介:王建国(1954-),男,教授,主研方向:智能仪器仪表 与计算机控制技术;孙敬华、曹丙霞,硕士生 收稿日期:2005-11-08 E-mail :sunjinghua-2001@https://www.wendangku.net/doc/3710173352.html,

曼彻斯特解码原则+125K EM4100系列RFID卡解码源程序分析

曼彻斯特解码原则+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);常用于局域网传输。在曼

一种简便的ID卡曼彻斯特解码方法

一种简便的ID卡曼彻斯特解码方法 我这里介绍的是常用的125KHz的ID卡。ID卡内固化了64位数据,由5个区组成:9个引导位、10个行偶校验位“PO~P9′’、4个列偶校验位“PC0~PC3”、40个数据位“D00~D93”和1个停止位S0。9个引导位是出厂时就已掩膜在芯片内的,其值为“111111111”,当它输出数据时,首先输出9个引导位,然后是10组由4个数据位和1个行偶校验位组成的数据串,其次是4个列偶校验位,最后是停止位“0”。“D00~D13”是一个8位的晶体版本号或ID识别码。“D20~D93”是8组32位的芯片信息,即卡号。注意校验位都是偶校验,网上有些资料写的是奇校验,很明显是错的,如果是奇校验的话,在一个字节是FF 的情况下,很容易就出现9个1,这样引导位就不是唯一的了,也就无法判断64位数据的起始位了。 数据结构如下图:

我读的一个ID卡数据是111111111 10001 00101 00000 00011 00000 01010 00000 11011 00110 01100 01100,对应的ID卡号是01050d36。 ID卡数据采用曼彻斯特编码,1对应着电平下跳,0对应着电平上跳。每一位数据的时间宽度都是一样的(1T)。由于电路参数的差别,时间宽度要实际测量。解码芯片采用U2270B,单片机采用89S52。U2270B的输出脚把解码得到的曼彻斯特码输出到89S52的INT脚。在89S52的外部中断程序中完成解码。 在没有ID卡在读卡器射频范围内时,U2270B的输出脚会有杂波输出,ID卡进入读卡器射频范围内后,会循环发送64位数据,直到ID卡离开读卡器的有效工作区域。 根据ID卡的数据结构,64位数据的最后一位停止位是0。最开始的9位引导位是1,可以把0111111111做为引导码。也就是说在ID卡进入读卡器工作范围后,丢掉ID卡发送的第一个64位码,检测最后1位0,然后检测ID卡发送的第2个64位码的9个引导码111111111,引导码检测成功后,解码剩余的55位码。得到ID卡的数据。然后丢掉ID卡发送的第3个64位码,检测第3个64位码的最后1位0,再检测ID卡发送的第4个64位码。这样连续3次检测到同一个码,就认为解码到了正确的ID卡号。 之所以要丢掉ID卡发送的第一个64位数据,是因为U2270B在没有ID卡刷卡时,也会输出波形到89S52的INT脚,这样将无法判断ID卡数据的头码。从第2个码开始解码能确保检测的头码正确。丢掉第3个码的原因是在检测第2个码时,最后一位停止位也被解码,那么就不能采用 0111111111来检测第3个码了,只能检测第3个码的最后1位0,再解码第4个码。 下面详细介绍解码原理,程序中要用到的变量定义如下: Bit_over:为0,表示1位数据处理完,为1,表示当前处于数据位的跳变处。Head_start:检测到头码0时,把head_start置1,然后连续检测到8次下降沿时间间隔大于0.75T,小于1.25T,并且 head_start为1,置位头码标志head_flag。Head_start的作用就是保证是连续检测到0111111111。 Head_flag:头码标志,检测到0111111111后置1。 Prev_bit:保存当前数据位的值,下一位数据的值要根据当前位的值来判断。Pulse_width:16 位数据,保存INT脚两次下降沿之间的时间间隔。 Bit_cnt:检测完头码后,每次检测5位数据,也就是一行。 Row:行数,不包括头码,总共11行,用来判断64位数据是否接收完。 Buff[11]:缓冲区,用来保存接收的11行数据。每个数据只有低5位有效。 Id_data[11]:保存缓冲区的11个数据,进行校验,得到ID卡号。

曼彻斯特编解码器

工具软件实训报告 项目名称:曼彻斯特编解码器指导老师: 系科: 专业: 姓名: 学号:

目录: 一:实训要求 (3) 二:实训原理 (3) 三:实训思路 (4) 四:实训步骤 (4) 五:原理图、仿真结果图以及结论分析 (5) 1.曼彻斯特编解码器(实现16bit数据的编解码) (5) 1.1曼彻斯特编解码器电路原理图: (5) 1.2模块详解 (6) 1.3仿真图以及分析 (10) 六:个人总结 (11)

一:实训要求 (1)通过学习原理图输入设计的方法掌握使用工具软件Quartus Ⅱ设计小型数字电路; (2)查阅文献,了解曼彻斯特编解码器的基本原理,并提出在Quartus Ⅱ软件环境下用VHDL进行仿真的方案。 (3)完成设计对编码器的要求:能够对输入的16bit数据进行曼彻斯特编码,输入有时钟、使能、16bit并行数据、写信号等;输出有编码结束和曼彻斯特编码信号(都为1位信号)等。 (4)完成设计对解码器要求:能够把输入的串行曼彻斯特码解码成原先的并行数据,输入有时钟、曼彻斯特码输入(1bit)、使能信号等,输出有提取的同步时钟信号、解码完成(1bit),并行数据(16bit)等。 二:实训原理 曼彻斯特编码,也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流的时钟和数据。它的每一个数据比特都是由至少一次电压转换的形式所表示的。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作为时钟信号,又作为数据信号。按照曼彻斯特码在IEEE 802.4(令牌总线)以及IEEE 802.3 (以太网)中的规定,本次实训将从高电平到低电平的

1553B总线中曼彻斯特编解码器的设计

1553B总线中曼彻斯特编解码器的设计 时间:2011-04-11 来源:现代电子技术作者:武鹏,毕君懿 关键字:1553B总线曼彻斯特编解码器 0 引言曼彻斯特码是一种总线数据传输双极性码。在数字信号基带传输中,通过这种信道编码技术可使传送数据同时携带时钟信息,故也称其为自同步曼彻斯特码。在信道传输中曼彻斯特码有很好的抗干扰能力。接收端可以将分离出的时钟用于解码,从而简化了解码过程。 针对曼彻斯特码特点,可采用位同步方法提取时钟,常采用滤波法和数字锁相环法。滤波法采用的窄带滤波器不适合数字电路使用。数字锁相环法通过比较接收码元和本地码元为定时时钟的相位来添加扣除时钟脉冲,以达到调整相位的目的,但电路实现过于复杂。本文提出的时钟分离电路比数字锁相环简单,而且提取出来的时钟可以准确地采样到曼彻斯特码信号。 1 曼彻斯特码 曼彻斯特码是一种广泛用于以太网、短距离无线通信、航空电子综合系统中总线数据传输的双极性码。它的每个码元中点都存在一个电平跳变,1信号为一个从1到0的负跳变;0信号为一个从0到1的正跳变。由于曼彻斯特码在频谱中存在很强的定式分量,解码时可将分离出的时钟用来解码。另一方面,1553B传输电缆呈容性负载特性,所以在信号传输中,直流和低频分量将受到很大的衰减。曼彻斯特码频谱中不存在直流分量,而且低频分量也大大减小,很适合在1553B电缆中传输。 MIL-STD-1553B协议中采用的曼彻斯特码数据格式如图1所示。 同步头:占三位码元长度。命令字或状态字同步头的前1.5倍码元长度为高电平;后1.5倍码元长度为低电平,数据字同步头刚好相反。同步头用于区分字的类型以及标识字传输开始。 数据:16位数据位。图中bit3为数据最高位,依次递减,bit18为数据最低位。 奇偶校验位:这里采用奇校验。将16位数据按位同或的结果作为奇校验位。 2 曼彻斯特编码器的设计 由于曼彻斯特码的每个码元在其中心存在电平跳变,所以编码器的发送时钟频率至少应选择信息传输速率的2倍频。 通常编码器的实现方式有2种,基于移位寄存器,或者数据选择器。移位寄存器型编码器需要在编码开始后将同步头位、数据位、奇偶校验位通过字符格式编排器编排成一个并行数据,然后在发送时钟的控制下串行移位输出;数据选择器型编码器需要在编码开始后启动一个计数器,在计数器的控制下分别送出同步头、数据位、奇偶效验位。本文的编码器采用后者,其结构框图如图2所示。

曼彻斯特编解码器

工具软件实训报告 项目名称: 曼彻斯特编解码器 指导老师: 系科: 专业: 姓名: 学号: 目录: 一:实训要求 (2) 二:实训原理 (2) 三:实训思路 (3) 四:实训步骤 (3) 五:原理图、仿真结果图以及结论分析 (4) 1、曼彻斯特编解码器(实现16bit数据得编解码) (4) 1、1曼彻斯特编解码器电路原理图: (4) 1、2模块详解 (4) 1、3仿真图以及分析...................... 错误!未定义书签。六:个人总结、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、11

(1)通过学习原理图输入设计得方法掌握使用工具软件Quartus Ⅱ设计小型数字电路; (2)查阅文献,了解曼彻斯特编解码器得基本原理, 并提出在Quartus Ⅱ软件环境下用VHDL进行仿真得方案。 (3)完成设计对编码器得要求:能够对输入得16bit数据进行曼彻斯特编码,输入有时钟、使能、16bit并行数据、写信号等;输出有编码结束与曼彻斯特编码信号(都为1位信号)等。 (4)完成设计对解码器要求:能够把输入得串行曼彻斯特码解码成原先得并行数据,输入有时钟、曼彻斯特码输入(1bit)、使能信号等,输出有提取得同步时钟信号、解码完成(1bit),并行数据(16bit)等。 二:实训原理 曼彻斯特编码,也叫做相位编码(PE),就是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流得时钟与数据。它得每一个数据比特都就是由至少一次电压转换得形式所表示得。在曼彻斯特编码中,每一位得中间有一跳变,位中间得跳变既作为时钟信号,又作为数据信号。按照曼彻斯特码在IEEE 802、4(令牌总线)以及IEEE 802、3 (以太网)中得规定,本次实训将从高电平到低电平得跳变表示“0”,从低电平到高电平得跳变表示“1”。

曼彻斯特解码原则+KEM系列RFID卡解码源程序分析

曼彻斯特解码原则+K-EM系列RFID卡解码源程序分析

————————————————————————————————作者:————————————————————————————————日期:

曼彻斯特解码原则+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);常用于局域网传输。

Verilog VHDL 曼彻斯特编码器

1.5.什么叫“综合”?一般“综合”包含哪些过程? 答:在电子设计领域中“综合”的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。 综合包含的过程:对VHDL或Verilog HDL进行处理分析,并将其转换成电路结构或模块,这时不考虑实际器件实现,即完全与硬件无关,这个过程是一个通用电路原理图形成的过程:第2步,对实际实现目标器件的结构进行优化,并使之满足各种约束条件,优化关键路径,等等。 2.10 使用Quartus II的 Mega Wizard Plug-In Manager宏功能模块中的PLL设计一个能实现图题2.10波形的电路元件(包括一个VHDL文件和一个*.bsf原理图图标)。其中:inclk0为电路的主频输入端,频率为50MHz;areset为异步置位端,c2和主频inclk0同频率。c1为主频inclk0的倍频输出信号。C0为c2的反相信号。Locked为相位控制信号,也是输出使能控制信号。( 2014am) 3.20 试用VHDL 语言设计一个曼彻斯特编码器。已知有时钟信号clk_d、时钟的倍频信号clk及时钟的反相信号clk_dn。串行数据输入为data_s,编码输出为mcode_out,输出使能信号为clk_lock_in,高电平有效(2012am)(2013am)(2014am) 提示:曼彻斯特码(Manchester Code)又称为数字双相码或分相码(Split-phase Code)。它的编码规则是:用分别持续半个码元周期的正(高)、负(低)电平组合表示信码“1”;用分别持续半个码元周期的负(低)、正(高)电平组合表示信码“0”。 图题3.20 用倍频时钟设计Manchester Code

曼彻斯特编解码电路设计

中南大学 本科生毕业论文(设计) 题目曼彻斯特编解码电路设计 学生姓名李天栋 指导教师肖大光娄田心 学院信息科学与工程学院 专业班级通信工程03级2班 完成时间2007年5月

目录 目录 .......................................... 错误!未定义书签。摘要 .......................................... 错误!未定义书签。ABSTRACT ...................................... 错误!未定义书签。第一章绪论 ................................... 错误!未定义书签。 项目背景.................................... 错误!未定义书签。 项目研究内容和任务.......................... 错误!未定义书签。 论文各部分主要内容.......................... 错误!未定义书签。第二章曼彻斯特码的原理及其编码规则............ 错误!未定义书签。 曼彻斯特码简介及其编码规则.................. 错误!未定义书签。 曼彻斯特码原理.............................. 错误!未定义书签。 曼彻斯特码的应用范围........................ 错误!未定义书签。 曼彻斯特码在LAN中的应用.................. 错误!未定义书签。 曼彻斯特码在测井系统中的应用.............. 错误!未定义书签。第三章曼彻斯特编解码方案...................... 错误!未定义书签。

曼彻斯特编码的verilog实现

module bianma(din,rst,clk16x,clk96,start,tx,sr,state,clk_en,man); input rst,clk16x,start; input[7:0] din; output tx,clk96,sr,state,clk_en,man; reg clk_en; reg[7:0] sr; reg clk96; reg tx,man; reg[3:0] state; reg[2:0] cnt; always @(posedge clk16x) begin cnt<=cnt+1; if(cnt==7) clk96<=~clk96; end always @(negedge clk16x or negedge start or posedge rst) begin if(rst) begin clk_en<=1'd0;end else if(!start) begin clk_en<=1'b1;end else if(state==4'd12) begin clk_en<=1'b0;end end always @(negedge clk96 or posedge rst) begin if(rst) begin tx<=1'b1;sr<=8'b0;end else if(state==4'd1) begin sr<=din;end else if(state==4'd2) begin tx<=1'b0;end else if((state>=4'd3)&&(state<=4'd10)) begin tx<=sr[0]; sr[6:0]<=sr[7:1];sr[7]<=1'b1;end else if(state==4'd11) begin tx<=1'b1;end else tx<=1'b1; end always begin if((state>=4'd3)&&(state<=4'd10)) begin man<=tx^clk96;end else man<=1'b0; end always @(posedge clk96 or posedge rst or negedge clk_en) begin if(rst) state<=4'b0000; else if(!clk_en) state<=4'b0000; else state<=state+1; end endmodule

曼彻斯特编码

曼彻斯特编码 曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。 曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作时钟信号,又作数据信号;从低到高跳变表示"0",从高到低跳变表示"1"。还有一种是差分曼彻斯特编码,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。 对于以上电平跳变观点有歧义:关于曼彻斯特编码电平跳变,在雷振甲编写的<<网络工程师教程>>中对曼彻斯特编码的解释为:从低电平到高电平的转换表示1,从高电平到低电平的转换表示0,模拟卷中的答案也是如此,张友生写的考点分析中也是这样讲的,而《计算机网络(第4版)》中(P232页)则解释为高电平到低电平的转换为1,低电平到高电平的转换为0。清华大学的《计算机通信与网络教程》《计算机网络(第4版)》采用如下方式:曼彻斯特编码从高到低的跳变是 1 从低到高的跳变是0。 两种曼彻斯特编码是将时钟和数据包含在数据流中,在传输代码信息的同时,也将时钟同步信号一起传输到对方,每位编码中有一跳变,不存在直流分量,因此具有自同步能力和良好的抗干扰性能。但每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2。 就是说主要用在数据同步传输的一种编码方式。 【在曼彻斯特编码中,用电压跳变的相位不同来区分1和0,即用正的电压跳变表示0,用负的电压跳变表示1。因此,这种编码也称为相应编码。由于跳变都发生在每一个码元的中间,接收端可以方便地利用它作为位同步时钟,因此,这种编码也称为自同步编码。】 Manchester encoding uses the transition in the middle of the timing window to determine the binary value for that bit period. In Figure , the top waveform moves to a lower position so it is interpreted as a binary zero. The second waveform moves to a higher position and is interpreted as a binary one . 【关于数据表示的约定】 事实上存在两种相反的数据表示约定。

曼切斯特编解码51程序

#include "Manchester.h" /******************************************************************************* 程序说明 基于单片机的曼彻斯特编码程序,功能是将一个8位的数据(一个字节)进行曼彻斯特编码 曼彻斯特编码的原则是:电平从高到低跳变表示'1',电平从低到高跳变表示'0' *******************************************************************************/ /******************************************************************************* 曼彻斯特编码函数 参数DataIn:将要进行编码的单字节数据 返回值manchesterOut:编码后返回的与参数对应的曼彻斯特编码值 *******************************************************************************/ unsigned int CharToManchester(unsigned char Encode_Data) { uint ManchesterOut = 0; uchar i = 0; for(i=0;i<8;i++) { if(( Encode_Data&0x80)==0x80) //说明该位为1 { ManchesterOut = ManchesterOut + 1; //写1 ManchesterOut = ManchesterOut << 1;//左移一位,相当于在最低位写0 if(i<7) { ManchesterOut <<= 1;//移位准备编码下一位 Encode_Data <<= 1; //待编码数据左移1位,为下一位数据编码做准备} } else if(( Encode_Data&0x80)==0)//说明该位为0 { ManchesterOut <<= 1;//不写1移位相当于写0 ManchesterOut += 1;//写1 if(i<7) { ManchesterOut <<= 1;//移位准备编码下一位 Encode_Data <<= 1; //待编码数据左移1位,为下一位数据编码做准备} } } return ManchesterOut;//返回编码后的16位值 }

曼彻斯特编码与解码实验

计算机通信网 实验一 曼彻斯特编码与解码实验 一、实验目的 1.掌握曼彻斯特编解码原理; 2.了解如何利用曼彻斯特的时钟特征实现收/发时钟同步及其实现方法。 二、预习要求 1.复习曼彻斯特编解码原理; 2.复习软件Maxpluss Ⅱ的使用方法。 三、实验原理 1.编码原理 在曼彻斯特编码方式中,每一位的中间有一个跳变,位中间的跳变为时钟,也作为数据。从高电平到低电平的跳变表示数据“1”(称为“1”跳变)。从低电平到高电平的跳变表示数据“0”(称为“0”跳变)。因此发送时钟必须在发送数据位的中间进行采样,即发送时钟TxC 的频率应为数据TxD 频率的两倍。 2.解码原理 解码可通过解码器来实现,解码器从曼彻斯特码中分离出接收数据RxD 与接收时钟RxC 。具体方法是:解码器从曼码中分别提出“1”跳变和“0”跳变信号,但需区分位中跳变与位间跳变,前者是表示数据的跳变,后者是当数据中有连续“1”信号或连续“0”信号时产生的不反应数据特征的无效跳变。解码器提取位中跳变后,可将其转换为二进制 121

2

(1)D触发器在编码中的作用。 (2)D触发器的时钟信号为何用2TxC?

2.解码电路 (1)图中如何提取Mc中的“1”跳变和“0”跳变信号的,试解释4个非门和YH1的作用。 (2)八位移位寄存器的作用是取得延迟信号,用于封住YF门以便除去无效的位间跳 Q)的输出,是否可选择用其它输出?为变。延迟时间应如何选取?为何选用第七位( 7 什么? (3)移位寄存器的时钟为什么要用8TxC(TxC的8倍频信号),如选用16TxC或4TxC 将会如何? 八、实验报告要求 1.绘制编解码电路图(给定或自行设计均可); 2.描绘8TxC、TxC、Mc、A、B、B’、C、D、Q G1、Q G2、RxD、RxC各点信号波形图; 3.回答思考题。

相关文档
相关文档 最新文档