移位寄存器与反馈节点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第1章移位寄存器与反馈节点
在本书的所有内容中,将不再关注LABVIEW版本的问题,也不会详细讨论LABVIEW中各
个函数的具体用法。我们重点关注的是采用自底向上的编程方法,一步一步地学习如何利用
LABVIEW构建比较大的应用程序。
任何程序都离不开数据,LABVIEW程序中的数据一般都是存储于与数据类型相适应的控件
之中,唯一的例外是移位寄存器和反馈节点。其中反馈节点出现在8.X版本后,而移位寄存
器从LABVIEW诞生之日起就一直存在,因此本书从移位寄存开始谈起。
移位寄存器(Shift Register)通常简称为SR,为叙述方便,我们也会采用SR来表示移位寄
存器。
1.1.什么是移位寄存器
如果我们学习过其它编程语言,就会发现在常规的编程语言中,很少会提及移位寄存器。
这是因为移位寄存器的定义来自于硬件,现实世界中我们的确可以找到各类基于移位寄存器
的芯片。
既然如此,我们有必要从硬件的角度简单介绍一下移位寄存器,了解移位寄存器的特点,
这有助于我们理解LABVIEW中的移位寄存器,因为二者的作用是基本一致。
图中包括了四个移位寄存器。从硬件移位寄存器的角度来看,每个一位寄存器中包含一个
二进制位。我们不必拘泥于移位寄存器存储的数据类型,我们假设移位寄存器中可以存储任
意类型的数据。
移位寄存器具有几个非常重要特点:
l 移位寄存器是由相同的寄存单元所组成。
l 所有寄存单元共用一个时钟。
l 所有寄存器单元串行级联。
图1- 1 移位寄存器示意图
移位寄存器由相同的寄存单元组成,这意味着每个寄存单元中存储的数据类型必须相同。
通常的移位寄存单元包含三个输入端和两个输出端,每个接线端的作用简述如下:
1.Data_in---数据输入接线端,由于寄存单元采用了串行级联的方式,只有一个寄存单元的
数据输入接线端对外敞开。
2.Clk-------时钟(Clock)输入接线端。在时钟的每个上升沿(或者下降沿),寄存单元由左
至右依次移位。其中Q3单元将存入新的数据,Q0单元将丢弃上次存储的数据。
假如Q3Q2Q1Q0原来存储的数据分别是:、2、4、6、8,Data_In新输入数据为0,则移位后Q3Q2Q1Q0当前的数据为:0、2、4、6。
3.Clr----清除(Clear)接线端,用来清除或者复位寄存器单元,一般同时连接到各个寄存器
单元,以便通过一个信号同时对移位单元进行复位。
通过移位寄存器,寄存单元可以保持数据输入端的前一次或者前几次的值。比如Q2中保存了Q3中前一次的值,Q1中保存了Q2中的前一次的值。也可以说Q1中保存了Q3中的前两次值。
1.2.创建移位寄存器
LABVIEW中的数据是不能独立存在的,必须以某个控件作为容器,移位寄存器是个例外,它不依附于任何控件。
虽然移位寄存器不依附于特定的控件,但是移位寄存器必须依附于循环结构,也就是说不存在独立的移位寄存器。与硬件的寄存器一样,LABVIEW中使用移位寄存器也是为了保持前一次或者前几次的值。
下面我们创建一个移位寄存器,并比较其与硬件移位寄存器的异同,在循环结构的左侧或者右侧,使用快捷菜单,即可创建移位寄存器。
图1- 2 创建移位寄存器
每当我们创建一个新的SR时,在循环结构的左右两侧会出现两个接线端。接线端内部出现一个黑色实心的三角形。右侧的向上的三角形表明此处可以输入数据,左侧的向下的三角形表明此处可以输出数据。
对照图1-1,右侧的输入接线端相当于Data_in,左侧的输出接线端相当于Q3。目前移位寄存器中没有任何数据,移位寄存器中可以存储任意数据类型,但是一旦数据类型确定,中间
是不能再次更改已经存储的数据类型的,因此使用移位寄存器之前,首先需要确定SR中存储的数据类型。
我们可以用一下两种方式指定移位寄存器中存储的数据类型。
1.通过右侧的输入接线端连接的数据自动确定移位寄存器中的数据类型。
2.通过左侧的输出接线端连接的数据,确定移位寄存器中存储的数据类型,同时进行移位寄
存器的初始化。
图1- 3 确定移位寄存器的类型
当同时连接左右侧的移位寄存器接线端时,移位寄存器包含的数据类型以左侧连接的数据为准。当左右测连接的数据类型不一致时,右侧连接的数据或者自动进行数据类型转换或者断开连接。
图1- 4 左右两侧连接不同类型
通过移位寄存器左侧接线端的快捷菜单,选择添加元素或者使用鼠标直接向下拖动接线端,可以建立多个寄存器单元,LABVIEW中称作层叠移位寄存器。
图1- 5 建立多个寄存器单元
同一循环结构中可以创建多个移位寄存器,保存不同类型的数据。
图1- 6 创建多个不同类型的SR
1.3.移位寄存器的工作过程
在图1-1中,在CLK的上升沿的作用下,所有的移位寄存器单元同时进行串行移位过程。在LABVIEW中,是否存在这样的时钟?下面我们详细剖析一下SR的工作过程。
图1- 7 SR的工作过程
由于FOR循环的N端子未连接,且输入数组采用自动索引,所以FOR循环的循环次数又输入数组的长度决定,总计循环7次。对于每个寄存器单元,通过FOR循环自动索引,输出数组。从输出的数组中,我们可以非常清晰地看到SR的工作过程。
首次循环时开始时,根据LABVIEW数据流的控制方式,从左侧寄存器单元读取SR寄存器的当前值。由于所有SR单元初始化为0,所以首次读取的SR单元值均为0。当循环结束时,输入数组的首个元素2进入SR的数据输入端,同时进行移位操作。以后每次循环依次类推。表格1
通过以上的详细分析,我们可以得到SR的第一个重要功能。
移位寄存器可以在多次循环之间保持值。