搜索
您的当前位置:首页光纤通信中的线路编码

光纤通信中的线路编码

来源:智榕旅游
光纤通信线路编/译码器的设计

光纤通信中的线路编码

线路编码概述

数字通信系统对路码的一般要求

线路码型有多种,在选择线路码时不仅要考虑光纤的传输特性,还要考虑光电器件的特性。一般来说,由于光电器件都有一定的非线性,因此采用脉冲的“有” “无”来表示“1”和“0”要方便的多。但是简单的二进制信号有三种实际问题要解决,否则也不能达到良好的效果。第一,不能有长连“0”或长连“1”出现。因为长连“0”,“1”会使定时信息消失,从而使再生中继器和终端接收机的定时提取产生困难。第二,简单的二进制码中还有直流成分,而由于“0”,“1”码出现个数的随机变化,使得直流成分的大小随机的发生变化。光接收机中采用的是交流耦合,直流成分的变化会引起信号基线浮动,这会给判决再生带来困难。第三,简单的二进制信号在业务状态下不能接收监测线路误码率。为此,在光纤传输之前,需将简单的二进制信号变换成适合光纤传输系统的光线路码型。

光纤通信系统中所采用的线路码种类很多。常用的有两大类,一类是mBnB码,即分组码;另一类是插入比特码。

mBnB码

mBnB码是一种提高信号传输速率的编码方法。它将m个二进制输入码变换为n个二进制的线路码,使码率提高n/m倍,输入信号以m个码字为一个字,而线路码则以m个码为一个字,mBnB码有两种类型:非均等mBnB码(n>m),其码组内“0”和“1”码的个数不一定相等;均等mBnB(n>=m+2)其码组内的“0”和“1”个数相等。

由于这些码型是按字长进行编译码的,所以不同字长的码型将有不同的特点。也就是说,这种线路码型存在许多种形式,例如,1B2B码,2B3B码,3B4B码和5B6B码等等。

- 1 -

光纤通信线路编/译码器的设计 插入码

插入比特码是把插入的原码流以m比特为一组,在它的末位之后插入一个比特组成的线路码。根据插入码的用途可以分为以下三种[1]。

1) mB1P码 末位之后插入P码,P码称为奇偶校正码,它把m位奇数原码校正为偶数码。当m位码内“1”的个数为奇数时,插入P码“1”,反之插入“0”,以保持m+1位码内“1”的个数为偶数。当然也可以采取保持m+1位码内“1”的个数为奇数的方式。保持m+1位码内“1”的个数为偶数的典型例子如8B1P码:

。。。。。1 1 0 1 1 0 0 1 1(P) | 0 0 0 1 0 0 1 0 0(P) | 1 1 1 1 0 1 1 0 0(P) | 。。。。。

2) mB1C码 末位之后插入C码,C码称为反极性码或称为补码。即当m位码为“1”则补码为“0”,反之则为“1”。例如8B1C码:

。。。。。1 1 0 1 1 0 0 1 0(C) | 0 0 0 1 0 0 1 0 1(C) | 1 1 1 1 0 1 1 0 1(C) | 。。。。。

3) mB1H码 末位之后插入H码,H码称混合码。H码具有多种功能,它实际上是P码,C码和用以作监控,公务,区间通信的插入码混合组成。其典型例子如8B1H码: 。。。。。1 1 0 1 1 0 0 1×(H ) | 0 0 0 1 0 0 1 0×(H) | 1 1 1 1 0 1 1 0×(H) | 。。。。。

究竟采用那种码型,应根据码型的特点,根据设计要求以及对所需设备结构的复杂程度以及对接收机灵敏度的影响情况综合考虑,本次设计选用的是3B4B码。

3B4B码编译码原理

3B4B码是在本次毕业设计中需要重点了解和掌握的一种线路码型,并且根据3B4B的编码特点和编码原理,设计出符合毕业设计中各项指标要求的编译码器。

在3B4B的线路码型中,输入的原始码流3B码,共有8个码字,变换为4B码时,共有16个码字,见表2.1。为保证信息的完整传输,必须从4B码的 16个码字中挑选8个码字来代替3B码。设计者应该根据最佳线路码特性的原则来选择码表。例如:在3B码中有2个“0”,变为4B码时补1个“1”;在3B码中有2个“1”,变为4B码时补一个“0”。而000用0001和1110交替使用;111用0111和1000交替使用。同时,规定一些禁止使用的码字,称为禁字,例如0000和1111。

表 2. 1 3B和4B的码字

- 2 -

光纤通信线路编/译码器的设计 3B 000 001 010 011 100 101 110 111 4B 0000 1000 0001 1001 0010 1010 0011 1011 0100 1100 0101 1101 0110 1110 0111 1111 作为普遍规则,引入“码字数字和”(WDS)来描述码字的均匀性,并以WDS的最佳选择来保证线路码的传输特性。所谓“码字数字和”,是在nB码的码字中,用“-1”代表“0”码,用“+1”代表“1”码,整个码字的代数和即为WDS。如果整个码字“1”码的数目多于“0”码,则WDS为正;如果“0”码的数目多于“1”码,则WDS为负;如果“0”码和“1”码的数目相等,则WDS为0。例如:对于0111,WDS=+2;对于0001,WDS=-2;对于0011,WDS=0。

nB码的选择原则是:尽可能选择|WDS|最小的码字,禁止使用|WDS|最大的码字。在3B4B码中,应选择WDS=0和WDS=+/-2的码字,禁止使用WDS=+/-4的码字。表2.2示出根据这个规则编制的一种3B4B码表,表中正组和负组交替使用。

表 2. 2 一种3B4B码表

信号码(3B) 0 1 2 3 4 5 6 7 000 001 010 011 100 101 110 111 模式1(正组) 码字 1011 1100 0101 0110 1001 1010 0011 1101 WDS +2 0 0 0 0 0 0 +2 线路码(4B) 模式2(负组) 码字 0100 1100 0101 0110 1001 1010 0011 0010 WDS -2 0 0 0 0 0 0 -2 编译码器硬件设计

- 3 -

光纤通信线路编/译码器的设计 本次设计的主要内容是设计3B4B编/译码器,硬件主要由外围集成电路和PIC单片机两部分组成。外围电路包括主振荡器,电源电路,数字分频电路以及串/并和并/串转换电路;而单片机是作为转换运算和电路控制的中心。内部单片机设计则需要掌握其接口电路和程序的编写,这章先介绍它的接口电路。 总体设计

现阶段的编译码电路一般有两种:一种是组合逻辑电路,就是把整个编译码器都集中在一块芯片上,设计成一个大规模专用集成块,国外设备大多采用这种方法;另一种是把设计好的码表全部存贮到一块只读存储器(PROM)内,由单片机执行程序而完成编译码。国内设备一般采用这种方法。

3B4B编码器原理及框图

如图4.1所示,图中的串并变换和并串变换是移位寄存器。首先将设计好的码表存入编码逻辑(PROM)内,待变换的信号码输入串并变换器后,在信号码时钟Cp1的作用下,数字信号在串并变换内移位,变为3比特一组的码,b1,b2,b3,并行输出作为编码逻辑(PROM)的地址码,从而完成将原始码流每3比特分成一组的分组过程。编码逻辑(PROM)是集成元件构成的逻辑网,根据需要及功能,在本次毕业设计中,采用的是PIC系列的单片机。它的功能是跟据码表里的逻辑关系把信号码组变换成线路码组。在地址码的作用下,编码逻辑(PROM)根据存储的码表输出与地址对应的并行4B码,进入并串变换器,在线路码时钟Cp2的作用下,移位而输出已变换的4B码流,完成编码过程。

信号输入 3B码流串并变换 b 1 b 2 单片机编码逻辑 b 1 B 1 B 2 并串变换 信号输出 4B码流 B 3 B 4 CP1 信号码时钟 图 4.1 3B4B码编码器框图

CP2 线路码时钟 4.1.1 3B4B译码器原理及框图

- 4 -

光纤通信线路编/译码器的设计 如图4.2所示,译码过程和编码过程相反,译码器与编码器基本相同。译码时,把送来的已变换4B信号码流,每4比特并联为一组,作为译码逻辑(PROM)地址,然后读出3B码,再经过并串变换还原为原来的信号码流。

信号输出 3B码流并串变换 B 1 B 2 单片机译码逻辑 B 1 b 1 b 2 串并变换 信号输入 4B码流 b 3 b 4 CP1 线路码时钟 图 4.2 3B4B码译码器框图

CP2 信号码时钟

4.2 振荡分频电路

4.2.1 主振荡器

本次毕业设计的主要目的是设计出能够长时间稳定工作的编译码器,而主振荡器的作用则是为串并输入和并串输出提供了最基本的时钟。为了达到长时间稳定工作的目的,这个时钟不但要求稳定而且要求十分精确,否则会造成串并输入与并串输出之间的频率不同步,这样就会出现码流的阻塞从而导致大量的误码。

因此为了减少误码,提高系统长时间工作的稳定性,我们选用频率稳定度极高的石英晶体振荡器作为本次毕业设计中的主振荡器。按照本次毕业设计的要求的需要,以及分频电路的特点和简易性,所选用的石英晶体振荡器的频率为1.920MHz。

具体设计电路图如图4.3所示:

- 5 -

光纤通信线路编/译码器的设计 图 4.3 主振荡器电路图

此晶体振荡电路由非门7404和晶体组成。电路中没有使用电容。电阻R3,R4,R5,R6将两个非门偏置在线性范围内,并由晶体提供正反馈回路。其中,R1=220Ω,R2=560Ω,R3=220Ω,R4=1.8KΩ。

4.2.2 分频电路

一 分频思想

分频电路是此次毕业设计中的外围电路的一部分,也是很主要的部分。由石英晶体振荡器所产生的时钟脉冲经分频器分频后,分别进入串并变换电路和并串变换电路。由于是3B4B编译码器,而且设计指标要求是:输入码速9.6Kb/s,输出码速12.8Kb/s,因此可以确定3B码和4B码两个部分的频率之比为3:4,且具体数值为:3B码部分为9.6KHz,4B码部分为12.8KHz。这两个频率都是由主振荡器的时钟1920KHz分频而来,且分频系数分别为200和150。

考虑到系统的稳定性和精确性,如果用数字电路一次性对原始脉冲进行分频系数为200和150的分频,在如此大的分频系数之下,对元件及电路的精度要求非常高,而且容易受环境变换的影响,并不利于此设计的长期稳定的运行。因此采用二段式分频电路的思想,即先对1920KHz的原始时钟10分频,然后再分别对已得的192KHz时钟进行20分频和15分频,从而也可以得到我们所需要的9.6KHz和12.8KHz的频率。这样就可以减少误差,并在保持结果相同的情况下,相对的降低元件和环境的要求。 二 分频器件选型

根据设计的需要及要求,决定选用74161作为分频器件。其引脚图如图4.4所示:

12345678CLRCLKABCDENPGND16VCC15RCO14QA13QB12QC11QD10ENT9LOAD74161

图 4.4 74161引脚图

74161是4位二进制同步加计数器,其各引脚具体功能见表4.1所示:

- 6 -

光纤通信线路编/译码器的设计 表 4.1 74161各引脚功能

引脚符号 LOAD A B C D ENP ENT CLK RCO QA QB QC QD CLR GND VCC 引脚号 9 3 4 5 6 7 10 2 15 14 13 12 11 1 8 16 名称 预置数控制端(低电平) 并行数据输入端 “并行计数允许”输入端 “串行计数允许”输入端 时钟(高电平跳变有效) 进位输出端 并行输出端 异步清零端 接地端 电源输入端

表4.2是74161的功能表,由表可知74161具有以下功能:

1. 异步清零 当CLR=0时,不管其他输入端的状态如何(包括时钟CLK),计数器输出将被直接置零,称为异步清零。

2. 同步并行预置数 在CLR=1的条件下,当LOAD=0,且有时钟脉冲CP的上升沿作用时,A,B,C,D输入端的数据将分别被QA,QB,QC,QD所接收。由于这个置数操作要与CP上升沿同步,且A,B,C,D的数据同时置入计数器,所以称为同步并行预置。

3. 保持 在CLR=CLK=1的条件下,当ENP·ENT=0,即两个计数使能端中有0时,不管有无CP脉冲作用,计数器都将保持原有状态不变(停止计数)。需要说明的是,当ENP=0,ENT=1,进位输出RCO也保持不变;而当ENT=0时,不管ENP状态如何,进位输出RCO=0。

4. 计数 当CLR=CLK=ENT=ENP=1时,74161处于计数状态。

表 4.2 74161功能表

清零 CLR 预置 LOAD 使能 ENP ENT 时钟 CLK 预置数据输入 A B C D 输出 QA QB QC QD - 7 -

光纤通信线路编/译码器的设计 L H H H H × L H H H × × × × L × × L H H × 上升沿 × × 上升沿 × × × × A B C D × × × × × × × × × × × × L L L L A B C D 保 持 保 持 计 数

三 分频电路设计 1. 10分频器设计

在了解了74161的工作原理后,用74161来设计一个10分频器是很容易的,74161实际上是个一个集成计数器,我们正是利用其计数功能来进行分频。即对输入脉冲计数10次后,再由74161将脉冲输出,此时由74161输出的脉冲频率即为原来的十分之一,从而达到了我们希望对输入脉冲进行10分频的目的。将原晶体振荡电路产生的原始脉冲进行10分频后,就可以得到第一段的时钟脉冲,其频率为我们所需要的192KHz。具体电路图如图4.5所示。 VCCU11615VCCRCO1CLR714ENPQA1011ENTQD2CLK123QCA134QBB125LOADC86GNDDU2A13274F08U10A2174LS0474LS1611920K192K 图 4.5 10分频电路 在分频电路中我们采用的是反馈置数法,ABCD四个预置端均接低电平,从而使得A=B=C=D=0,此时的预置数为 0000。当计数器计满10个脉冲后,计数器的并行输出端的数值为 1001,从而使QA=QD=1,此时与门打开,经过非门后低电平触发预置数控制端LOAD,在预置数控制端触发后,就会将预置数重新置入使计数器,使计数器由0000重 - 8 - 光纤通信线路编/译码器的设计 新开始计数,也就是计数器在经过10个状态后重新装载初始状态,从而达到10分频的目的。图4.6是74161的主循环状态图。

1000

1001 0000 0111 0001 0110 0010 0101 0011 0100

4.6 10分频主循环状态图

2. 15分频器设计

由于74161是拥有四个并行数据输入端和四个数据输出端,是一个四位的二进制计数器,按照上述的分频思想,单块的74161可以进行0~16间的任意分频,因此除了上述的10分频器外,15分频器也可由一块74161来完成。只是将并行输出端进行重新选择,以适合我们所需的15分频。根据输出端的数量不同,二输入与门也相应的换成三输入与门。经过第二段的分频电路,我们将第一段得到的192KHz的频率再次分频,从而得到4B码流转换所需要的脉冲频率,即12.8KHz。其具体电路如图4.7所示。

图 4.7 15分频电路

此15分频器的设计仍然采用的是反馈置数法来使74161完成15分频的工作。ABCD四个置数端仍然接低电平,即置数值为0000,由于要求15分频,因此QAQBQCQD的输出端应为1110才能出现15个状态。一旦输出端达到状态1110,经过三输入与门7411产生高电平经非门7404后,低电平触发预置数控制端LOAD,74161重新装载初状态0000,开始新的一轮计数,而15分频后的脉冲则由与门输出,从而达到了15分频的目的。图4.8为74161的主循环图。

- 9 -

光纤通信线路编/译码器的设计

1110 1101 1100 0000 0101 0110 0111 1000

图 4.8 15分频主循环状态图

3. 20分频器设计

由于74161只是一个4位的二进制计数器,因此其计数的最大值为1111,也即是最多记录16个状态即0000~1111,如果计数值的范围超过了16,就需要多块74161串连计数来满足要求。为了得到3B码流转换时需要的9.6KHz的频率,我们必须将第一段分频后得到的192KHz再次20分频。这就超过了单块74161的计数范围,因此我们选用2块74161串连来构成一个20分频的计数式分频器。其具体电路图如图4.97所示。

图 4.9 20分频电路

鉴于74161的最大计数值为16,因此采用两块74161串连,并且采用的是并行进位的方式,即两块74161用的是同一个CP脉冲,但由低位块的输出端来控制高位块的计数使能端的方式。也就是说两块74161同时接收CP脉冲,但由于高位块的74161的计数使能端ENP和ENT由低位块的输出端所决定,因此高位块只能在地位块的控制下计数。

采用这种方法,可将低位块作为个位计数器,而将高位块作为十位计数器。将个位计数器设定为十进制的计数器,其数值表现为0000~1001,当个位计数器计满10个脉冲的时候,其输出端的数值表现为1001,即QA=QD=1,经与门后高电平使十位计数器计数使能端打开,十位计数器可以计入一个脉冲。同时经非门后低电平触发个位计数器的预置数控制端,将0000重新载入个位计数器,使其重新开始计数。再次计入10个脉冲后,十位计数器才可以再计入一个脉冲,此时十位计数器的输出端的数值表现为0010,

- 10 -

光纤通信线路编/译码器的设计 即QB=1,经非门后同时进入两块74161的清零端,低电平触发使两块74161同时清零,至此完成了一次20个脉冲的计数。此后循环进行。在计数过程中,同时采用了反馈置数法和反馈清零法,来使74161复位。低位块计数满10后,采用的是反馈置位法使其清零;高位块计数满2后(即整个计数满20),采用的反馈清零法同时使两块74161清零。

相应于计数20次后,从十位计数器的QB端输出的脉冲就是经过了20分频的脉冲,从而得到了我们所需要的9.6KHz的频率。

4.3 电源电路

电源电路的作用是将220V的交流电,变为可以供PIC单片机及其外围电路中各元器件所需要的+5V电源。电源电路主要由变压器,整流桥,稳压器和滤波电路组成,各部分的具体作用为:

变压器:将220V的工频交流电转变为6.3V的低电压; 整流桥:将低频交流电通过桥式整流电路转变为直流电; 稳压器:通过采用7805,输出稳定的+5V直流电; 滤波器:简单的带通滤波电路,进一步稳定电压。

电源电路为整个系统提供了电力,使系统可以长时间稳定运行,其具体电路如图4.10所示:

图 4.10 电源电路

4.4 编码器设计

4.4.1 编码器码流输入

一 码流输入过程

- 11 -

光纤通信线路编/译码器的设计 在本设计中,编码器的输入码流是3B码,码速要求是9.6KHz,因此我们必须针对3B码的特点和设计指标的要求设计出相应的编码器输入部分的电路。

所谓输入部分电路,实际上就是一个串并转换电路,码流的输入过程也就是一个串行数据转换为并行数据的过程。而PIC单片机所处理的则是3位的并行数据,因此必须设计出一个能够长时间稳定工作的串并变换电路。

二 串并变换电路器件选型

根据设计的需要,决定选用74194作为串并变换电路的核心器件。其引脚图如图4.11所示:

12345678CLRSRABCDSLGND16VCC15QA14QB13QC12QD11CLK<10S19S074194

图 4.11 74194引脚图

74194是高速通用4位双向移位寄存器。作为一种多功能高速时序建立装置,它可用于串行至串行,左移位,右移位,串行至并行,并行至串行,并行至并行等形式的数据寄存和转换。这里我们用其进行串行至并行的变换。其各引脚具体功能见表4.3所示

表 4.3 74194各引脚功能

引脚符号 SR SL A B C D CLK CLR S0 S1 QA QB QC QD 引脚号 2 7 3 4 5 6 11 1 9 10 15 14 13 12 名 称 右移串行数据输入端 左移串行数据输入端 并行数据输入端 时钟信号输入端(上升沿有效) 异步清除端(低电平有效) 工作方式控制端 并行数据输出端 74194有两个工作方式控制端S0,S1,由它们不同的状态组合可以完成4种控制功能:其中清零是指在异步清零端CLR上施加低电平,不论脉冲状态如何,清零后输出端

- 12 -

光纤通信线路编/译码器的设计 QA,QB,QC,QD将全部被清零;保持是指当异步清零端CLR接高电平后,寄存器处于原来的状态;左移和右移两项是指串行输入,其不同在于串行数据分别从左移输入端SL和右移输入端SR送入寄存器;置数实际上就是指并行数据的输入,即将输入端ABCD所接收的并行数据分别送往输出端QAQBQCQD。具体组合方式见表4.4所示:

表4.4 74194简化功能表

CLR 0 CLK × × 1 上升沿 上升沿 上升沿 S1 × 0 0 1 1 S0 × 0 1 0 1 功能 清零 保持 右移 左移 置数 三 串并变换电路设计 1. 电路设计

在此次的电路设计中,采用一片74194,3个二输入与门和一个反相器就可以构成一个3位的串行码/并行码变换电路。其中二输入与门在具体电路设计种采用的是四2输入与门,器件型号为7408,使用时取其中三对端口即可;而反相器在具体电路设计中则采用的是六反相器,器件型号为7404,使用时取其中的一对端口即可。

需要变换的原始串入数据来自于B3端口,而给74194提供工作时钟的则是在上一

节设计中所产生的9.6KHz的脉冲。电路如图4.12所示

- 13 -

光纤通信线路编/译码器的设计 图 4.12 3B码串并转换电路

2. 工作过程

开始转换前,先通过清零脉冲将74194清零,此时由于QD=0,经反相器后使得S1=0,而S0一直接高电平,即S1S0=11,因此下一个CP脉冲来到时,74194将进行置数操作。脉冲到来时,根据预置数的内容,将011置入QB QC QD中,而将串行输入的第一个数据D0置入QA中。此时QD=1,从而故使得S1S0=01,74194工作于右移工作状态。接下来的2个CP脉冲将串行输入的第2,3个数据D1,D2移入74194,由于采用的右移工作方式,此时的 QA QB QC依次为D2 D1 D0,而置入QB的0则移到QD,使得S1S0=11,同时打开与门将QA QB QC中的数据并行输出。另一方面,下一个CP脉冲到来,又将发生前面所述的并行置数操作,开始新的一轮串/并变换。详细工作过程见表4.5所示。

表4.5 3位串行码/并行码变换电路工作过程

CLR 0 S1S0 ×× 11 01 功能 清零 置数 右移 右移 置数 CP × 1 2 3 1 DR × D0 D1 D2 D0 QA 0 D0 D1 D2 D0 QB 0 0 D0 D1 0 QC 0 1 0 D0 1 QD 0 1 1 0 1 S1 S0 11 01 01 11 01 Q0 0 0 0 D2 0 Q1 0 0 0 D1 0 Q2 0 0 0 D0 0 1 01 11 循环 … … … … … … … … … … … 4.4.2 编码器码流输出

一 码流输出过程

在本设计中,除了设计能使串行码流变换为并行码流的串并变换电路外,还必须设计出码流输出部分的电路,也就是能够将PIC单片机所输出的4位并行数据转换为串行数据的并串变换电路,

由串并变换电路输入PIC单片机的3B码并行数据,经单片机处理后得到相应的4B码,并以并行方式输出,并串变换电路的作用就是将此4位并行码流转变为串行码流,使其能够由B3端口接收,从而完成译码的过程。并串变换电路还必须符合设计要求中的12.8KHz的频率,这样才能保证码流输入与输出之间的同步,降低误码率。

二 并串变换电路器件选型

在此次电路设计中,采用一片74194,一个上升沿触发的D触发器,一个三输入与

- 14 -

光纤通信线路编/译码器的设计 门及一个二输入与门,就可以构成一个符合设计要求的并串转换电路。其中二输入与门在具体电路设计时仍采用的是四2输入与门,器件型号为7408,在使用时只需取其一对端口即可;三输入与门则采用的是三3输入与门,器件型号为7411,使用时也仅需其中一对端口;D触发器则采用有预置,清零端的双上升沿D触发器,器件型号为7474,具体使用时采用其中一组作为D触发器。 三 并串变换电路设计 1. 电路设计 由于高速通用4位双向移位寄存器74194既可以用于串并变换,也可以用于并串变换,因此在此部分的电路设计中仍然选用74194作为4位并串变换电路的核心器件。但由于74194只有4位,在进行4位码的变换时,4个输入引脚全部用来接收并行数据,故不能像3位码的变换一样,将其中一个引脚设置一个循环标志位(如上一节中的QD),为了使74194能够循环长时间工作,还必须用一个D触发器来作为循环标志位。74194的ABCD用于并行数据输入,而这个D触发器的输出端将被连接到74194的右移输入端SR上,通过串入不同码字来控制S1S0的状态,从而达到在置数,右移不同状态间切换的目的,使其能长时间循环工作。电路如图4.13所示 12.8KU16A1CLR113CLKCLK74F744B输出--并串变换2D5QU3B4612574F0874F11U18AU13VCC16VCC9S03A4B5C6D8GND7SL4B_D04B_D14B_D24B_D31CLR2SR15QA14QB13QC10S112QD74HC1946Q4B数据输出 图 4.13 4B码并串转换电路 2. 工作过程 此4B码的并串转换电路的过程较3B码的串并变换电路复杂,其工作过程可分为两个阶段,即清零预置阶段和并串转换阶段。特别需要注意的是工作过程中的各元件的次序,简述如下(记触发器为D,三输入与门的输出端为X,二输入与门的输出端为Y)。 - 15 - 光纤通信线路编/译码器的设计 根据电路结构易知:X=QA·QB·Q’ ,Y=X·CP,即在清零过程结束后有Y=QA·QB·Q’;Y端直接与D端和S1相接,故有D=S1=Y且由于S0一直保持高电平即S1=1,所以74194的工作方式由Y端来控制;右移串行输入端SR则与Q’端相接,故有SR=Q’。

根据D触发器的特性方程Q(n+1)=D知:现态的D端状态决定了次态的Q和Q’端的状态,而根据电路结构有D=Y,故现态的Y端决定了次态的Q’,即Q(n+1)=Y(除了清零脉冲时,Q’被直接置1)。

综上所述,此设计中最重要的两个控制端口Q’和Y实际是互为因果的关系,他们之间相互影响相互作用,使整个系统循环运行。

阶段一:清零预置 在这个阶段中,首先清零脉冲来到,使74194和触发器D同时清零。此时QA=QB=QC=QD=0,由QAQB=0故Y=0,使得S1S0=01,74194工作于右移串入状态;而由于D也同时被清零使得Q=0,Q’=1,故SR=1,在下一CP脉冲来到时SR被置数使QA=1。因此,2个脉冲后SR连续两次右移使QA=QB=1故有Y=1,使得S1S0=11,清零预置过程完成,74194进入置数工作状态,下一个CP脉冲来到时,就可以并行输入D0 D1 D2 D3四位数据。

阶段二:并串转换 在清零预置过程结束以后S1S0=11使得74194进入置数工作状态。当这个阶段的第一个CP脉冲来到时,D3 D2 D1 D0同步置入QA QB QC QD,由于将QD作为输出端,故此时输出第一个串行码D3;由于上态的Y=1=D,故使现态的Q’=0,尽管D0 D1可能全为1,仍使现态的Y=0,由此决定了S1S0=01从而使74194工作于右移状态,并且SR=Q’=0;连续3个CP脉冲以后,QD依次串行输出D2 D1 D0,达到了并串变换的目的,由于连续的右移,此时QAQBQC=110,使Y=1,故有S1S0=11,这样就使74194再一次进入置数工作状态,在下一个CP脉冲来到时将再次进行4位同步置数,D0 D1 D2 D3被置入QA QB QC QD,开始新一轮的并串变换。详细工作过程见表4.6所示。

表 4.6 4位并行码/串行码变换电路工作过程

- 16 -

光纤通信线路编/译码器的设计 CLR 0 1 S1S0 功 能 ×× 01 01 11 01 清零 右移 右移 置数 右移 右移 右移 置数 … CP × 1 2 1 2 3 4 1 … QA 0 1 1 D0 0 1 1 D0 … QB 0 0 1 D1 D0 0 1 D1 … QC 0 0 0 D2 D1 D0 0 D2 … QD 0 0 0 D3 D2 D1 D0 D3 … Y 0 0 1 0 0 0 1 0 … D 0 0 1 0 0 0 1 0 … Q’ 1 1 1 0 1 1 1 0 … SR 1 1 1 0 1 1 1 0 … S1S0 01 01 11 01 01 01 11 01 … 1 01 01 11 循环 4.5 译码器设计

4.5.1 译码器码流输入

一 码流输入过程

本次毕业设计除了要求设计3B4B编码器外,还要求设计一个译码器,所谓译码器就是要将已经编码的4B码重新解码为3B码。这是一个编码的逆过程,输入的码流是4B码,码速是12.8Kb/s,相应的时钟脉冲为12.8KHz;输出的则是3B码,码速是9.6Kb/s,相应的时钟脉冲为9.6KHz。

4B码的输入过程与3B码的输入相仿,仍是一个串并变换的过程,只不过是要将串行码流变换成4位的并行输出码流。因此其输入电路仍是采用一个串并变换电路来完成。

二 串并变换电路器件选型

在此次电路设计中,采用一片74194,一个上升沿触发的D触发器,四个二输入与门及一个反相器,就可以构成一个符合设计要求的串并转换电路。其中二输入与门在具体电路设计时仍采用的是四2输入与门,器件型号为7408,在使用时正好将其4对端口全部用上;反相器则仍是采用六反相器,器件型号7404,具体使用时取其中一个端口即可;D触发器则还是采用有预置,清零端的双上升沿D触发器,器件型号为7474,具体使用时采用其中一组作为D触发器。

三 串并变换电路设计 1. 电路设计

- 17 -

光纤通信线路编/译码器的设计 尽管是完成4位的串并转换,一片74194仍然足够完成此转换过程。由于需要并行输出4位的数据,如果74194的并行输出端全部用来输出数据,就会缺少S1S0的状态转换控制端,使之不能在置数和右移两种状态之间切换,也就无法达到长时间循环运行的要求。因此,我们还必须选用一块D触发器,使其能够作为并行输出端之一,而将QD

留作工作状态控制位,从而达到循环控制的目的。电路如图4.14所示:

图 4.14 4B码串并转换电路

2. 工作过程

此电路设计再次用到了D触发器,因此各端口之间的因果关系变得十分重要,简述如下:

根据电路结构:QD经反相器输出后直接与S1相接,即S1=QD|反|,而S0一直接高电平,故74194的工作方式由QD控制;同时QD经反相器后还直接与4个与门相接,并行数据的同步输出也有QD控制。SR与D触发器的输出端Q直接相连,即SR=Q,故74194右移串入的数据来自Q。

根据D触发器的特点:Q端置入的是D端在上一个CP脉冲过去后所储存的数据,如:清零脉冲过去后,D端即接收到串入数据D=D0,但此时触发器并没有触发,故Q端输出仍然为0;当下一个CP脉冲来到时,Q端载入D端所储存的数据D0,而D端则读入新的数据D1。

电路具体工作时,首先清零脉冲来到,使74194与D触发器同时清零,此时74194

- 18 -

光纤通信线路编/译码器的设计 的输出端QA=QB=QC=QC=0,触发器的输出端Q=0;四个与门均关闭,但QD经反相器后输入S1,使S1S0=11故74194进入置数工作状态,下一个CP脉冲到来时即可将0111置入QAQBQCQD,同时SR=Q=0。

清零之后的第一个CP脉冲来到时,即将输入端0111置数,使得QA=0,QB=QC=QD=1,而QD经反相器后使S1S0=01故74194进入右移工作状态并且使4个与门继续关闭;同时,触发器D的输出端Q=D0,使得SR=D0。连续3个CP脉冲之后,触发器的输出Q=D3,使得SR=D3,SR在这个过程中连续的右移,使QA=D2,QB=D1,QC=D0,这样Q0Q1Q2Q3中的数据全部置位完毕。而QD=0,经反相器后打开4个与门将4位并行数据同步输出,达到串并转换的目的;同时QD也使工作方式选择端S1S0=11,这样74194再次进入置数工作状态,在下一个CP脉冲到来时将重新载入0111,开始新一轮的串并转换。详细工作过程见表4.7所示:

表4.7 4位串行码/并行码变换电路工作过程

CLR 0 S1S0 ×× 11 01 01 1 01 11 循环 右移 置数 … 4 1 … D3 D0 … D3 D0 … D2 0 … D1 1 … D0 1 … 0 1 … 11 01 … D3 D0 … 功能 清零 置数 右移 右移 CP × 1 2 3 DR × D0 D1 D2 Q 0 D0 D1 D2 QA 0 0 D0 D1 QB 0 1 0 D0 QC 0 1 1 0 QD 0 1 1 1 S1S0 11 01 01 01 SR 0 D0 D1 D2

4.5.2 译码器码流输出

一 码流输出过程

译码器码流的输出过程与编码器的输出过程相仿,二者最终输出的都是串行码流,只不过编码器输出的码速为12.8Kb/s,而译码器输出的码速则为9.6Kb/s。要完成译码器串行码流的输出,就必须设计合适的并串转换电路将PIC单片机输出的3位并行码流转换为串行码流。因此码流的输出过程就是并行码/串行码转换的过程。

- 19 -

光纤通信线路编/译码器的设计 二 并串变换电路器件选型 在此次并串电路的设计中,由于只要完成3B码的转换,因此结构比较简单,只需采用一片74194,一个二输入与门即可构成一个符合设计要求的并串转换电路。其中二输入与门在具体电路设计时仍采用的是四2输入与门,器件型号为7408,在使用时只需取其一对端口即可。 三 并串变换电路设计 1. 电路设计 利用74194对3位并行码进行转换,只需用到四个并行输入端口A B C D中的三个,这里我们选用B C D三个端口来输入并行数据,而将A端口接低电平。将S0持续接高电平,利用SR的右移串行输入和A端口的低电平置数来控制74194的S1,从而达到控制74194工作方式的目的。这样就可以在置数和右移两种工作方式间切换,使系统长时间循环工作,对码流进行持续转换。电路如图4.15所示 U9VCC1CLR2SR16VCC9S06D5C4B3A8GND3B_D03B_D13B_D274HC1943B输出--并串变换119.6KCLKU9C159QA8141074F08QB10S17SL13QC12QD3B数据输出 图 4.15 3B码并串转换电路 2. 工作过程 此3B码的并串转换电路相较于4B码的并串变换简单,所用到的元件比较少,而且各端口间的因果关系也比较少,仅有S1=Y=QA•QB(记二输入与门7408的输出端为Y)。其工作过程仍可视作两个阶段,预置清零阶段和并串变换阶段。 阶段一: 预置清零 清零脉冲使74194的输出端口QA=QB=QC=QD=0,根据电路结构Y=QA•QB=0,使得S1S0=01,74194进入右移串行输入工作状态,且SR持续接高电平即SR=1,在下一个CP脉冲来到时将SR载入QA。连续2个CP脉冲之后,SR连续右移两 - 20 -

光纤通信线路编/译码器的设计 次,使QA=QB=1,从而打开与门使得S1S0=11,74194进入置数工作状态,预置清零过程结束。

阶段二: 并串变换 经过预置清零阶段后S1S0=11,74194工作于置数工作状态。第一个CP脉冲来到后,D0 D1 D2被载入,使QB=D0 QC=D1 QD=D2,而A端口持续接低电平,故QA=0,此时QD作为串行数据输出端口将输出第一位串行码D2。由于Y=QA•QB=0使S1S0=01,故74194进入右移工作状态。2个CP脉冲之后,SR连续的右移使D1 D0依次从QD输出,同时使QA=QB=1,从而打开与门使S1S0=01,74194再次进入置数工作方式。在下一个CP脉冲来到时,74194将重新载入新的一组3B码,开始新的一轮并串变换。详细工作过程见表 4.8所示。

表 4.8 3位并行码/串行码变换电路工作过程

CLK 0 1 S1S0 ×× 01 01 11 01 01 11 循环 功能 清零 右移 右移 置数 右移 右移 置数 … CP × 1 2 1 2 3 1 … QA 0 1 1 0 1 1 0 … QB 0 0 1 D0 0 1 D0 … QC 0 0 0 D1 D0 0 D1 … QD 0 0 0 D2 D1 D0 D2 … Y 0 0 1 0 0 1 0 … S1S0 01 01 11 01 01 11 01 … SR 1 1 1 1 1 1 1 … 1

- 21 -

光纤通信线路编/译码器的设计

编译码器软件设计

根据设计要求,我们需要单片机对经过串并变换的3B码流进行4B编码。或将4B码流进行3B编码,可在单片机内部建立一个3B码于4B码的对照码表,经过查表就可以得到相应的编码,完成转换。本章将对此进行具体介绍。

编码程序设计

程序设计思想

在设计中,针对3B4B码编码器,我们需要利用PIC单片机对经过串并变换的3位并行码流进行4B编码。最简单的方法是在PIC单片机内部建立一个3B码转换为4B码的对照码表,输入的3B码经过查表后就可以得到相应的4B码,再将其输出即可完成由3B码到4B码的转换。而单片机内部所用的码表则可以通过利用形如表2.2加以完成,根据此码表可以为任意一个3B码找到其对应的4B码,没有重复,而且正负码组交替使用,进一步减少了长连“0”和长连“1”的出现,达到了提高码速,减少误码的目的。

在PIC单片机读入3B码流后,进行查表的过程中之前,我们必须对此3B码作出判断看它是否为 000 001 111 110中的一个,如果是此四个3B码中的某一个,则需要2组4B码交替使用,因为尽量使用|WDS|=2的码字可以通过以WDS的最佳选择来保证线路码的传输特性,可以进一步提高线路码传输的效率,降低误码。

鉴于此四个3B码的选择性,在编程的时候必须设计出相应的条件判断程序,以便判断是否是这四个码中的一个。同时还必须设置相应的标志位,用来标明哪一个码组已经使用过,这样就不会连续重复使用同一个码组,达到正负码组交替使用的目的。 由于在3B码的串行/并行转换电路以及4B码的并行/串行转换电路中,这两个外围

- 22 -

光纤通信线路编/译码器的设计 电路都有其自己的时钟脉冲,而是其来自同一个脉冲源的分频电路,这就保证了3B并行码流输入时和4B并行码流读出时的时效性。在外围电路能够正常工作的情况下,我们在程序设计的过程中,就必须保证PIC单片机能够准确按时的读取3B码流以及输出4B码流,这样才不会造成码流的阻塞以及误码。而单片机内部的时钟频率远远高于外围电路的脉冲频率,单片机有充分的时间来执行码表处理程序,一但读入3B码就可以立刻输出4B码,一般不会对4B并串转换电路造成影响。因此关键问题是如何准时读取3B码流。

针对以上问题,解决问题的关键在于如何“提醒”单片机按时去读取3B码流。对此,我们提出了两种解决方法:一种是采用计时的方法,时间到了就让单片机去读取;另一种是中断的方法,何时有新的3B码流送到,就让单片机去读取。以下是两种具体的程序设计方案。

程序设计方案一

此方案是利用外部时钟脉冲频率CP与PIC内部时钟频率的差别,进行延时计数,每隔一段特定的时间就使PIC单片机去读取一次3B码流,从而达到按时提取3B码的目的。

此方案中,必须注意到延时计数必须把单片机执行此程序需要耗费的时间计算在内。而单片机执行此程序耗费的时间可由程序中所包含的指令数与指令周期的乘积计算出来。PIC不同于MCS系列单片机,其大部分指令都是单周期指令,仅有少数多周期指令,如跳转指令。因此可以大致计算出执行此程序所需的指令周期数,而PIC单片机的指令周期则是根据单片机所选用的晶体振荡器的频率而定的,晶体振荡器经四分频后即可得到单片机内部频率,取其倒数即可得出其指令周期。具体数据如下:

CP: 3B串并变换电路时钟频率为 9.6KHz ,T=1/f=104μs PIC:若采用4 MHz的晶振,则四分频后为1MHz,T=1/f= 1μs

若采用8 MHz的晶振,则四分频后为2MHz,T=1/f=0.5μs 若采用20MHz的晶振,则四分频后为5MHz,T=1/f=0.2μs

PIC单片机与外围的串并变换电路和并串转换电路相连时,只需用到PORTB端口,

- 23 -

光纤通信线路编/译码器的设计 其中PORTB.1~PORTB.3用于串并变换后的并行3B码流的输入,而PORTB.4~PORTB.7则用于并串变换中的并行4B码流的输出。

此方案的程序流程图如下:

初始化 取RB1~3中的数据 Y 为0否? N Y 测试位=0? N 测试位清0 Y 为7否? N 根据RB1~3的值查表1 测试位清0 N 测试位=0? Y 测试位置1 根据RB1~3的值查表2 测试位置1 送入RB4~7 等待 N 时间到否? Y

图 5.1 编码器程序方案一流程图

程序设计方案二

此方案是利用PIC单片机中的外部中断功能来设计程序。利用中断的思想可以方便

- 24 -

光纤通信线路编/译码器的设计 的控制单片机去读取3B码流,一旦有中断信号来到,就说明有新的3B码流转换完毕,单片机就去读取这些码字;而当没有中断信号的时候,单片机则处于等待状态。采用这种中断思想设计的程序可以保证单片机准时读取3B码流。而PIC单片机的PORTB.0引脚则是单片机内置的3个外部中断源之一,因此我们可以方便的通过PORTB.0引脚向单片机提交中断请求信号。

采用中断方式来控制单片机读取3B码流,关键是要找到适当的中断信号。在外部的串并转换电路中,为了使3B码流同步并行输入,这就需要一个控制信号使其同步输入,按照4.3.1节的设计,74194的输出端中的QD的作用就是负责当3位码全部置位好以后,经反相后打开三个与门使3位码字同步输出。因此采用QD经反相器后的输出信号作为中断源,完全可以满足我们的要求。

按照这种编程设计思想,PIC单片机与外围串并转换电路相连接时,只需将PORTB.0引脚与串并转换电路中的六反相器7404的输出端相接,就可以利用PIC单片机的中断请求来准时读取3B并行码流;而PORTB.1~3仍然用来读取3位并行码字,PORTB.4~7则仍然用来输出并行4位码字。

此设计方案在编程的过程中与方案一大致相同,其中码字的判断,标志位的变换,码表的查找部分都是完全一样的。只是用中断处理程序代替了延时子程序,流程图也只是在最后部分略有不同,如下图所示:

- 25 -

光纤通信线路编/译码器的设计 初始化 取RB1~3中的数据 单片机中断查表 送入RB4~7 输出 等待 是 中断来否? 否

图 5.2 编码器程序方案二流程图

两种方案的比较

这两种设计方案各有特点,方案一所涉及到的硬件比方案二要少,即不需要用到PORTB.0引脚,电路设计起来比较方便;相应的子程序也只用到了最基本的循环计数程序,设计起来难度较小。

方案二在硬件上比方案一多用一个引脚,硬件设计较方案一复杂;同时,既然用到了PORTB.0引脚,就必须编写其相应的中断处理程序,编写难度大于循环程序。但是方案二却有方案一不可超过的优点,就是在精确性和长时间运行的稳定性比方案一好的多。这是因为方案一中,利用CP的周期与PIC内部的指令周期的关系来进行计数延时不可能做到十分精确,这是因为:

第一,外围电路CP脉冲的周期T=104μs本来就是一个近似值

第二,在程序的编写过程中存在很多分支,如对000,001,110和111四个需要交替使用正负码表的码字就要进行判断,而判断的结果将可能造成程序的跳转,一旦发生跳转,一个循环内的程序执行完毕所需的指令就会增加,相应也必然会造成执行程序时间的延长。系统长时间运行后有可能出现连续读取同一个3位码字或者错过读取一个3

- 26 -

光纤通信线路编/译码器的设计 位码字的情况。

相较之下,采用方案二的设计方法则要精确和稳定得多,因为单片机只有在有中断请求信号的情况下才去读取3位并行码字,而不是延时固定的时间再去读取。没有中断请求的时候PIC单片机处于待机状态,而且PIC单片机的中断源是与外部串并转换电路紧密相连的,一旦有新的3位码字并行输出,单片机的PORTB.0口一定会有中断产生,绝对不可能错过,从而保证了系统的精确性和稳定性。

译码器程序设计

程序设计思想

3B4B译码器的并行输入为4B码,而经码表变换后输出的则是3B码。在变换的过程中不存在类似编码器中的正负码表交替使用的问题。

在编码器设计中000,001,110和111四个3位码字对应与两组组码表,并且需要交替使用;而010,011,100,101四个码字则仅有唯一的一组码表与之对应,也不需要不同码组交替使用。也就是说,部分码字在进行码变换时并不是一对一的唯一映射,故编码程序在设计时存在一个单对多的选择问题,相应的程序设计也较为复杂。

在译码器的设计中则不存在这样的问题,每一个4位码字都只有唯一的一个3位码字与之相对应,尽管可能出现重复,如1011和0100都对应的是000,但每一个4位码字与3位码字之间是一个一对一的关系。

安照这种原则所进行的程序设计,将大大减少分支程序的数量,因为不需要判断码字以选择不同码组,也不用测试和置位标志位。在这种情况下使程序变得十分简练。在译码器的设计中我们不能直接将节1. 2. 1中的码表逆用而得到4B码至3B转换的码表,这是因为原码表是根据线路码的最佳编码规则而制定的,在3B码向4B码的转换过程中它尽量选择的是|WDS|最小的4B码字,如使|WDS|=0和2的1010和1110,而使|WDS|=4的4B码字并没有选用,如0000和1111。但我们在进行译码的过程中并不能排除0000和1111这样的4位码字的存在,一旦出现这样的码字,我们必须对其进行编码。针对这种情况,我们重新编写了4B码至3B码转换的码表如表5.1所示

表 5.1 4B3B转换码表

4B - 27 -

3B 光纤通信线路编/译码器的设计 0000 1000 0001 1001 0010 1010 0011 1011 0100 1100 0101 1101 0111 1111 000 001 010 011 100 101 111

程序设计方案

鉴于在5.2节所论述的结果,我们选用中断方式来“提醒”PIC单片机准时提取由4B码串并转换电路所产生的4位并行码流;输出时则向3B码并串变换电路提供3位并行码流。

PIC单片机与外围串并转换电路以及并串转换电路相连时,仍是只用到了PORTB端口。利用节4.5.1中所设计的译码器串并转换电路,将74194的QD端经反相器后的输出端与RA4/TOCKI相连,使之为单片机提供中断请求信号;而RC0~3用来输入4位并行数据,RC4~6则用来输出3位并行数据。 程序流程图如下:

- 28 -

光纤通信线路编/译码器的设计 初始化 取RC0~4中的数据 单片机中断查表 得到相应的 3B码 送入RC4~6输出 等待 是 中断来否? 否

图 5.3 译码器程序流程图

参 考 文 献

- 29 -

光纤通信线路编/译码器的设计 [1]张宝富等.现代光纤通信与网络教程[M],人民邮电出版社, 2002 [2]谭扬林. 光纤通信系统[M],湖南大学出版社, 2000 [3]顾畹仪等.光纤通信系统[M],北京邮电大学出版社, 1999 [4]刘增基等. 光纤通信[M],西安电子科技大学出版社, 2001 [5]Gerd Keiser著.光纤通信(第三版) [M], 电子工业出版社, 2002 [6]袁国良等.光纤通信简明教程[M], 清华大学出版社, 2006 [7]丁元杰. 单片微机原理及应用[M],机械工业出版社, 1996 [8]吴德明. 光纤通信原理与技术[M],科学出版社, 2004

[9] Govind P.Agrawal. 光纤通信系统(第3版)[M],清华大学出版社, 2004 [10]解金山,陈宝珍. 光纤数字通信技术[M],电子工业出版社,1997 [11]王延恒. 光纤通信技术基础[M],天津大学出版社,1990

[12]何信龙,李雪银. PIC16C7X 入门与应用范例[M],清华大学出版社,2002 [13]张旦宁,程彬等. 进口集成电路数据手册[M],广东科技出版社,1993 [14]荀殿栋,程宗汇. 实用数字电路设计手册[M],电子工业出版社, 1994 [15] BEHZAD RAZAVI. 光通信集成电路设计[M],清华大学出版社,2005

- 30 -

光纤通信线路编/译码器的设计 附录A:光纤通信线路编/译码器的总电路图

VCCR4R6U11AR312R53U11B474LS04Y11920K74LS04U11615VCCRCO1CLR714ENPQA1011ENTQD2CLK123QCA134QBB125LOADC86GNDDVCCVCC13274F08U10A2174LS04U61615VCCRCO7ENP1014ENTQA211CLKQD3A124QCB135QBC126LOADD81GNDCLRU2A192KU41615VCCRCO1CLR714ENPQA1013ENTQB212CLKQC3A114QDB125LOADC86GNDDU7U5A1274LS11U10B4374LS04VCC12.8K74LS161N11FU1N2C1VCC74LS161IN0.75AV1NU15A2174LS0474LS161L1R174LS1613OUTGND7805U2A13274F08C2C316VCC1210LOADENT147QAENP123QCA134QBB115QDC615DRCO81GNDCLRCLK22U15B3474LS049.6KU143B输入--串并变换U121CLR15QA14RA24U13VCC16VCC9S03A4B5C6D8GND7SLU91CLR2SR16VCC9S06D5C4B3A8GND74F7416VCCVCC5C6D9S09.6K11CLK2SR3B数据输入3A8GND4B74HC19474HC194清零脉冲1U3A33B_D1274F0812U3D111374F081U8A3274F08222RB125RB426RB527RB628RB718QB3B_D23B_D323RB24B_D04B_D14B_D24B_D313QC10S17U15CSL1256QD74LS0424RB3RC71CLR2SR15QA14QB13QC10S112QD6U3B4612574F0874F11U18AQRA012.8KU16A1CLR113CLKCLK4B输出--并串变换2D5Q4B数据输出21RB0/INTRA35VCCRA117RC616RC515RC4RA57VCCY2OSC210C4C512.8KU3VCC3U17747411CLK1CLR2SR15QA143CLK1CLR2D5Q4U8B64B_D111574F08RC0U8C984B_D2121074F08RC112U8D14B_D31131374F08RC21U9A3274F083B_D03B_D13B_D274HC1944B数据输入PIC16C723B输出--并串变换119.6KCLKU9C159QA8141074F08QB10S17SL13QC12QD16VCC9S04B5C6D3A8GND7SL3B数据输出74HC19420VDD9OSC1U1845687PFIR2PFO1NCMRRST3RSTGNDMAX708Vcc2VCCQB13QC10S1QD1294B_D4U15D874LS048VSS1419RC3VSS1MCLR/VPP6RA4/TOCKIC6SB1 4B输入--串并变换

- 31 -

光纤通信线路编/译码器的设计 附录B:编码器程序清单

;User Register Defintion ;

ZERO EQU 0020 ; 000测试寄存器 SEVEN EQU 0021 ; 111测试寄存器 EXCHG EQU 0022 W_STK EQU 0023 STATUS_STK EQU 0024 PCLATH_STK EQU 0025

;Program Reset Vector ;

ORG 0000 GOTO START

;Interrupt Reset Vector ; ORG 0004 MOVWF W_STK MOVF STATUS , W MOVWF STATUS_STK CLRF STATUS MOVWF PCLATH , W MOVF PCLATH_STK CLRF PCLATH

;Interrupt Flag Test BTFSC INTCON , INTF GOTO INT_IST ; 低四位交换寄存器 ; W保存寄存器 ; STATUS保存寄存器 ; PCL保存寄存器 中断保护程序

;保护W的内容

;保护STATUS的内容

;保护PCL的内容 ;测试中断标志位 ;测试INT中断 - 32 -

光纤通信线路编/译码器的设计

END_INT: ;中断恢复

BCF STATUS , RP0 MOVF PCLATH_STK , W MOVW PCLATH

MOVF STATUS_STK , W MOVW STATUS MOVF W_STK , W

RETFIE

;Main Program Start Here ; START:

;PIC Initation ;

CALL PIC_INIT BSF INTCON , INTE BSF INTCON , GIE BSF OPTION , INTEDG MAIN_LOOP: NOP

GOTO MAIN_LOOP

;INT Interrupt Service Routine ; INT_ISR:

BCF INTCON , INTF MOVF RB , 0 ANDLW B”00001110” BTFSC STATUS , 2 GOTO TEST_SEVEN

主程序 ;调用单片机初始化程序 ;使能INT中断 ;使能中断

;设置INT中断为上升沿触发 ;等待中断

中断处理程序 ;清INT中断标志位 ;读PORTB的内容 ;只取PORTB1~3 ;为000否? - 33 -

光纤通信线路编/译码器的设计 GOTO TEST_ZERO

PIC_INIT:

CLRF INTCON ;屏蔽中断 BSF STATUS , RP0 ;选Bank0

MOVLW B”00001111” ;设置PORTB1~3为输入,4~7为输出 MOVWF TRISB RETURN

TEST_ZERO: BTFSC ZERO , 1 GOTO CHANGE0 BSF ZERO GOTO TABLE2

TEST_SEVEN:

SUBLW “00000111” BTFSC STATUS , 2 GOTO TABLE1 BTFSC SEVEN , 1 GOTO CHANGE7 BSF SEVEN GOTO TABLE2

CHANGE0:

BCF ZERO GOTO TABLE1

;测试000标志寄存器

;测试111标志寄存器

- 34 -

光纤通信线路编/译码器的设计 CHANGE7

BCF SEVEN GOTO TABLE1

ORG 0600 ;码表一

TABLE1:

ADDWF PCL , W

DT “EC56A3D” MOVWF EXCHG SWAPF EXCHG , 0

MOVWF RB GOTO END_INT

ORG 0700 TABLE2:

ADDWF PCL , W

DT “4C56A32” MOVWF EXCHG SWAPF EXCHG , 0

MOVWF RB GOTO END_INT

;查表1110 1100 0101 0110 1010 0011 1101 ;输出到PORTB4~7 ;码表二

;查表0100 1100 0101 0110 1010 0011 0010 ;输出到PORTB4~7 - 35 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Top