LABVIEW的深入探索之功能強(qiáng)大的位操作能力
LABVIEW作為面向具體應(yīng)用的工程師的編程語(yǔ)言,由于經(jīng)常需要操作硬件設(shè)備寄存器,而寄存器往往都是需要位操作的,因此LABVIEW具有位操作能力是必須的。LABVIEW不僅具有強(qiáng)大的位操作能力,而且操作極其方便,這得益于LABVIEW具有一般編程語(yǔ)言不具備的特殊數(shù)據(jù)類型--布爾量。
本文引用地址:http://m.butianyuan.cn/article/201701/337243.htm相信經(jīng)常使用C51和PLC的朋友們都非常熟悉位操作,51單片機(jī)具有自己的位尋址區(qū),位尋址區(qū)不但可以進(jìn)行位尋址,也可以按字節(jié)、字(雙字節(jié))尋址,PLC也是如此。但是很多設(shè)備和編程語(yǔ)言是不支持位尋址的,只允許字節(jié)或者字的方式,高級(jí)編程語(yǔ)言基本如此。
我在下面的文章中大致提及了LABVIEW中的位操作,但是是針對(duì)具體問(wèn)題的,本文希望系統(tǒng)性地討論一下LABVIEW中的位操作極其特點(diǎn)。
http://www.jsuedc.cn/csxcs366/blog/08-08/153754_5fd57.html
C語(yǔ)言中的位操作符包括位非(按位取反)、位與、位或和異或四個(gè)基本操作符,LABVIEW提供了更多的位操作函數(shù),這體現(xiàn)了LABVIEW語(yǔ)言的面向應(yīng)用的特點(diǎn),其實(shí),具備了與、或、非三個(gè)基本操作符,其它位操作符都可以由與、或、非操作符組合而成。
LABVIEW提供了獨(dú)特的布爾數(shù)據(jù)類型,但是布爾數(shù)據(jù)實(shí)際占用一個(gè)字節(jié),也就是說(shuō),布爾數(shù)據(jù)雖然形式上類似于位,但是與位是完全不同的,LABVIEW利用一個(gè)字節(jié)表示布爾量,如果字節(jié)值為0,則表示布爾量為FALSE,如果值為1,則表示布爾量為TRUE。
LABVIEW專門提供布爾函數(shù)選板,包括了與、或、非等多種布爾操作函數(shù),如下圖所示:
LABVIEW中的布爾函數(shù)基本都是多態(tài)函數(shù),具有兩個(gè)非常重要的特點(diǎn):
1、布爾函數(shù)支持布爾量的邏輯運(yùn)算
2、支持U8、U16、U32等位運(yùn)算
3、函數(shù)的輸入端子必須為布爾值或數(shù)字。 可以是標(biāo)量、數(shù)字或布爾值數(shù)組或簇、數(shù)字或布爾值簇?cái)?shù)組等。
布爾量的基本邏輯運(yùn)算非常簡(jiǎn)單,這里就不具體討論了。對(duì)于多字節(jié)的位運(yùn)算,比如U16、U32等,與U8的位操作非常類似,因此下面的討論主要是針對(duì)U8數(shù)據(jù)的。
首先我們考慮一下為什么要針對(duì)U8而不是I8數(shù)據(jù)類型那,I8數(shù)據(jù)的最高位為符號(hào)位,因此I8主要是用來(lái)表示數(shù)值的大小的。我們采用U8進(jìn)行位操作,U8數(shù)據(jù)每個(gè)位都表示一個(gè)布爾值(開(kāi)關(guān)量),每個(gè)位的值只有0、1兩種選擇。U8數(shù)據(jù)可以表示8個(gè)位,不存在符號(hào)的問(wèn)題,實(shí)際上我們對(duì)U8所代表的值并不關(guān)心,我們更關(guān)心的是每個(gè)位的值是0還是1。
下面我們開(kāi)始討論LABVIEW中常用的位操作。
一、掩碼
由于高級(jí)語(yǔ)言不支持位尋址,所以針對(duì)字節(jié)或字中的某一位或者幾位進(jìn)行操作時(shí),必須借助與掩碼。掩碼是某些位為0,某些位為1的位組合。對(duì)于字節(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
一個(gè)字節(jié)有8位構(gòu)成,分別定義為BIT0--->BIT7,每位的掩碼是該位為1,其它為0的U8數(shù)。
二、如何求取掩碼
我們列舉了U8的8個(gè)掩碼,如果是U64,則會(huì)有64個(gè)掩碼,這種情況下采用列舉的方法就很麻煩了。很明顯,掩碼是有規(guī)律的,從BIT0開(kāi)始為1,依次遞增2倍,因此可以用下列兩種方法求取掩碼。
1、計(jì)算法
2、移位法
我們知道,乘以2運(yùn)算實(shí)際上就是移位運(yùn)算,而且更為快捷,這是C語(yǔ)言中常用的方法。
三、置位(打開(kāi)位)
對(duì)某一位置1,而其它位保持不變,這種操作稱作置位(SET)操作,也稱作打開(kāi)位操作(OPEN).
如果需要某位置位,而其它位不變,與該位掩碼進(jìn)行按位或運(yùn)算即可。下面的例子對(duì)BIT3進(jìn)行置位操作。
評(píng)論