|
|
8位及以上的單片機都是以字節(jié)為單位,作為基本操作的。
一個字節(jié)為8位二進(jìn)制數(shù),這樣指令及操作方便。
但許多情況下程序需要根據(jù)某個東東的0、1決定程序的分支,這時只要將這個東東設(shè)計成一個位就可以了。
51系統(tǒng)為此,在指令系統(tǒng)上下足了文章,也是51比其它單片機靈活的特點。
由于是8位機,一個字節(jié)有256種變化,51就在有限的內(nèi)存中給出了256個位,并在指令系統(tǒng)中設(shè)計了相應(yīng)的位操作指令,可對這256個位直接進(jìn)行操作(與、或、非、置1、清0、取存、分支),指令豐富。
這256個位占用32個字節(jié),當(dāng)然也可以對這32個單元按字節(jié)進(jìn)行操作,也即一條指令一次可以操作8個位標(biāo)志,用匯編寫程序的人,常常可以利用這個特點,分配位標(biāo)記,以利多位同時操作或單位操作。
這256個位,系統(tǒng)自己用了128個,如P0-P3口、A、B、PSW、IE、IP……,都在特殊寄存器中,它們的地址有個特點,就是能被8整除!
另外128個是留給用戶自由使用的,放在內(nèi)存的20H-2FH,共16個字節(jié)。
樓主提到【20h的地址當(dāng)中存放著 編號為00h~07h位地址】,在向下21H-2FH,對應(yīng)編號是08H-7FH。
而系統(tǒng)用到的128個編號是:80H-FFH。
例如:P0.0的編號就是80H,而TF1的編號是81H,P1.0的編號是82H......
明白以上,就可以知道如下:
1、你定義的BIT位標(biāo)記,只能放在20H-2FH之間。[編號在00-7F之間]
2、可以對它進(jìn)行:與、或、非、置1、清0、取存、分支操作。[按位操作]
3、一條指令可以同樣操作8個在同一個字節(jié)中的位標(biāo)記。[按字節(jié)操作]
4、[80H以上的編號]被系統(tǒng)占用了,系統(tǒng)不阻止你對這個區(qū)域進(jìn)行定義!當(dāng)心你與系統(tǒng)發(fā)生沖突,系統(tǒng)會提示你的定義發(fā)生了重復(fù)定義。
5、標(biāo)準(zhǔn)51系統(tǒng)沒有用完[80H以上的編號],而改進(jìn)型的51如STC系列,可能有所利用,所以看手冊是重要的。
例如:STC的串口中斷發(fā)送標(biāo)記TI2位,它在9AH.1上,由于9AH不能被8整除,即它不能被BIT所定義。因為清TI2時,只能用:ANL 9AH, #11111101B,而無法用 CLR TI2。為此用串口2還是麻煩一點的。
俺是這樣用的(不能直接進(jìn)行位操作):
S2CON EQU 09AH ;串口2控制寄存器
TI2 EQU ACC.1
......
MOV A, S2CON ;取中斷標(biāo)記
JNB TI2, IIUART2_R ;TI2=ACC.1=0,非發(fā)送則接收
ANL S2CON, #11111101B ;11111101B清TI2
舉此例說明,STC51的程序不一定與其它51程序通用。
|
|