久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4679|回復: 7
收起左側

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

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

使用道具 舉報

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

使用道具 舉報

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

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

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

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

所以正規嚴肅的代碼應該這么寫:
  1. ab  data 20h
  2. abc bit ab.0
復制代碼

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品视频网站 | 国产精品久久a | 一级大黄 | 伊人青青久久 | 国产乱码精品一区二三赶尸艳谈 | 国产日韩视频在线 | 中文成人无字幕乱码精品 | 天天干天天玩天天操 | 欧美精品乱码久久久久久按摩 | 亚洲一区二区三区在线 | 好姑娘高清在线观看电影 | 国产美女在线免费观看 | 日日摸日日碰夜夜爽2015电影 | 久久区二区| 精品一二区 | 久久久久久成人 | 日韩精品在线看 | 久久国产精品-国产精品 | 91视频.com | 婷婷99| 成人午夜免费视频 | 亚洲人成在线观看 | 天天操操操操操 | 超碰在线播 | 欧美精品在线播放 | 国产成人福利在线观看 | 蜜臀久久 | 久久草在线视频 | 欧美国产日韩一区 | 亚洲精品第一 | 97视频在线观看网站 | 日韩精品成人 | 成人高潮片免费视频欧美 | 亚洲最大看片网站 | 国产一区二区三区不卡av | 亚洲成人播放器 | 亚洲aⅴ| 日本一级淫片免费啪啪3 | 在线视频一区二区 | 99re6在线视频精品免费 | 不卡欧美 |