LABVIEW的深入探索之功能強大的位操作能力
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進行置位操作。
評論