新聞中心

EEPW首頁 > 測試測量 > 設計應用 > LABVIEW的深入探索之功能強大的位操作能力

LABVIEW的深入探索之功能強大的位操作能力

作者: 時間:2017-01-09 來源:網絡 收藏
學習過C語言的朋友們都知道,每當我們談起C語言的優(yōu)勢時,強大的位操作能力是不能不提的,正是因為C語言具有強大的位操作能力,使得C語言廣泛用于開發(fā)操作系統(tǒng)和嵌入式應用中。

LABVIEW作為面向具體應用的工程師的編程語言,由于經常需要操作硬件設備寄存器,而寄存器往往都是需要位操作的,因此LABVIEW具有位操作能力是必須的。LABVIEW不僅具有強大的位操作能力,而且操作極其方便,這得益于LABVIEW具有一般編程語言不具備的特殊數據類型--布爾量。

本文引用地址:http://m.butianyuan.cn/article/201701/337243.htm

相信經常使用C51和PLC的朋友們都非常熟悉位操作,51單片機具有自己的位尋址區(qū),位尋址區(qū)不但可以進行位尋址,也可以按字節(jié)、字(雙字節(jié))尋址,PLC也是如此。但是很多設備和編程語言是不支持位尋址的,只允許字節(jié)或者字的方式,高級編程語言基本如此。

我在下面的文章中大致提及了LABVIEW中的位操作,但是是針對具體問題的,本文希望系統(tǒng)性地討論一下LABVIEW中的位操作極其特點。

http://www.jsuedc.cn/csxcs366/blog/08-08/153754_5fd57.html

C語言中的位操作符包括位非(按位取反)、位與、位或和異或四個基本操作符,LABVIEW提供了更多的位操作函數,這體現了LABVIEW語言的面向應用的特點,其實,具備了與、或、非三個基本操作符,其它位操作符都可以由與、或、非操作符組合而成。

LABVIEW提供了獨特的布爾數據類型,但是布爾數據實際占用一個字節(jié),也就是說,布爾數據雖然形式上類似于位,但是與位是完全不同的,LABVIEW利用一個字節(jié)表示布爾量,如果字節(jié)值為0,則表示布爾量為FALSE,如果值為1,則表示布爾量為TRUE。

LABVIEW專門提供布爾函數選板,包括了與、或、非等多種布爾操作函數,如下圖所示:

LABVIEW中的布爾函數基本都是多態(tài)函數,具有兩個非常重要的特點:

1、布爾函數支持布爾量的邏輯運算

2、支持U8、U16、U32等位運算

3、函數的輸入端子必須為布爾值或數字。 可以是標量、數字或布爾值數組或簇、數字或布爾值簇數組等。

布爾量的基本邏輯運算非常簡單,這里就不具體討論了。對于多字節(jié)的位運算,比如U16、U32等,與U8的位操作非常類似,因此下面的討論主要是針對U8數據的。

首先我們考慮一下為什么要針對U8而不是I8數據類型那,I8數據的最高位為符號位,因此I8主要是用來表示數值的大小的。我們采用U8進行位操作,U8數據每個位都表示一個布爾值(開關量),每個位的值只有0、1兩種選擇。U8數據可以表示8個位,不存在符號的問題,實際上我們對U8所代表的值并不關心,我們更關心的是每個位的值是0還是1。

下面我們開始討論LABVIEW中常用的位操作。

一、掩碼

由于高級語言不支持位尋址,所以針對字節(jié)或字中的某一位或者幾位進行操作時,必須借助與掩碼。掩碼是某些位為0,某些位為1的位組合。對于字節(jié)的位操作,通常采用下列掩碼(MASK)

BIT0----->(MASK) 0X01

BIT1----->(MASK) 0X02

BIT2----->(MASK)0X04

BIT3----->(MASK)0X08

BIT4----->(MASK)0X10

BIT5----->(MASK)0X20

BIT6----->(MASK)0X40

BIT7----->(MASK)0X80

一個字節(jié)有8位構成,分別定義為BIT0--->BIT7,每位的掩碼是該位為1,其它為0的U8數。

二、如何求取掩碼

我們列舉了U8的8個掩碼,如果是U64,則會有64個掩碼,這種情況下采用列舉的方法就很麻煩了。很明顯,掩碼是有規(guī)律的,從BIT0開始為1,依次遞增2倍,因此可以用下列兩種方法求取掩碼。

1、計算法

2、移位法

我們知道,乘以2運算實際上就是移位運算,而且更為快捷,這是C語言中常用的方法。

三、置位(打開位)

對某一位置1,而其它位保持不變,這種操作稱作置位(SET)操作,也稱作打開位操作(OPEN).

如果需要某位置位,而其它位不變,與該位掩碼進行按位或運算即可。下面的例子對BIT3進行置位操作。


上一頁 1 2 下一頁

關鍵詞: LABVIEW位操

評論


技術專區(qū)

關閉