欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5200|回復(fù): 7
收起左側(cè)

51單片機匯編語言偽指令BIT的功能是什么?

[復(fù)制鏈接]
ID:1021566 發(fā)表于 2022-4-25 15:32 | 顯示全部樓層 |閱讀模式
BIT的作用是:在51單片機中有特殊的地址對應(yīng)的字節(jié)可以進(jìn)行位尋址,當(dāng)需要使用標(biāo)志位或者位查詢的時候可以將對應(yīng)的位進(jìn)行重命名
例如:在20h的地址當(dāng)中存放著 編號為00h~07h位地址,那么如果定義 abc BIT 00h 則代表在20h的地址上有8個位其中0位定義名稱為abc
在后續(xù)使用abc時候可以直接 SETB abc 或者CLR ab
回復(fù)

使用道具 舉報

ID:121859 發(fā)表于 2022-4-25 17:45 | 顯示全部樓層
BIT 聲明一個“位”變量,范圍是:00H~FF,其中00H~7FH是位寄存器20H~2FH的位,80H~FFH,是從80H開始的能被8整除的寄存器
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2022-4-26 16:26 | 顯示全部樓層
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程序通用。

回復(fù)

使用道具 舉報

ID:983641 發(fā)表于 2022-4-27 11:30 | 顯示全部樓層
終于把BIT搞懂了。
回復(fù)

使用道具 舉報

ID:61140 發(fā)表于 2022-5-8 15:38 | 顯示全部樓層
簡單的說就是引腳賦值,比如你想讓P1.0驅(qū)動LED,直接寫LED  BIT   P1.0(LED就是P1.0),當(dāng)然,這里的LED也可以換成KEY等等.
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2022-5-8 18:05 | 顯示全部樓層
包括樓主在內(nèi)的所有人都沒有注意到BIT這個關(guān)鍵字的核心思想,這個關(guān)鍵字是給L51.exe(高版本的Keil里面的BL51.exe)看的!!!

如果是純匯編,樓主的代碼可以這么寫:
  1. abc EQU 00h
  2.      setb abc
  3.      clr  abc
復(fù)制代碼

反正所有的地址都是作者管理的,出了地址沖突也是作者的錯誤,怪不到編譯器上。這種代碼也不需要L51來鏈接,出來的.obj文件可以直接轉(zhuǎn)hex用于燒寫。

但是如果匯編和c語言混合編程,BIT這樣的關(guān)鍵字就非常重要了,因為c51.exe編譯出來的obj文件是浮動(relocatable)地址的,所有的變量和代碼地址都是不確定的,只有通過L51鏈接之后,才確定。像我上面那個代碼里面的EQU,相當(dāng)于c語言的#define,編譯器只是簡單替換,obj文件里面并不知道00h這個位地址被占用了,L51自然也不知道,會分配relocatable bit給00h,這樣就沖突了!代碼也不可能正常執(zhí)行。

所以正規(guī)嚴(yán)肅的代碼應(yīng)該這么寫:
  1. ab  data 20h
  2. abc bit ab.0
復(fù)制代碼

這樣L51就明白了20h這個ram地址被ab占用,而abc則是00h這個位地址,L51給其他變量分配地址的時候,會讓開這兩個位置,不會發(fā)生沖突。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表