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