在8051系列單片機(jī)中,內(nèi)部ram的前32個(gè)字節(jié)被分為4組,每組8個(gè)寄存器。每組的8個(gè)寄存器名字都為R0-R7。通過設(shè)置PSW寄存器的兩個(gè)位,可以選擇使用4組寄存器中的哪一組。
寄存器組在處理中斷或者使用實(shí)時(shí)操作系統(tǒng)時(shí)非常有用,可以在進(jìn)入中斷或者切換任務(wù)時(shí)使用不同寄存器組,而不用把8個(gè)寄存器的內(nèi)容保存到堆棧。在退出中斷或返回原任務(wù)時(shí),只需切換回原來的寄存器組即可。
指定一個(gè)函數(shù)使用的寄存器組:
void rb_function (void) using 3 { . . . }
using后跟數(shù)字0-3,不允許使用符號(hào)表達(dá)式指定代替該數(shù)字常量。只有定義函數(shù)時(shí)才可使用using關(guān)鍵詞,在做函數(shù)原型聲明時(shí)不允許使用using關(guān)鍵詞。
using聲明的函數(shù)具有以下特征:
1)函數(shù)入口處,當(dāng)前使用的寄存器組被保存到堆棧;
2)指定的寄存器組被設(shè)置;
3)函數(shù)退出前,原來的寄存器組被恢復(fù);
下面展示了using的用法,請(qǐng)注意生成的匯編程序中函數(shù)入口、出口處的代碼:
C程序: 1 2 extern bit alarm; 3 int alarm_count; 4 extern void alfunc (bit b0); 5 6 void falarm (void) using 3 { 7 1 alarm_count++; 8 1 alfunc (alarm = 1); 9 1 } 生成的匯編程序: 0000 C0D0 PUSH PSW /* 函數(shù)入口處,將原來的寄存器組保存到堆棧 */ 0002 75D018 MOV PSW,#018H /* 切換到新的寄存器組 */
0005 0500 R INC alarm_count+01H 0007 E500 R MOV A,alarm_count+01H 0009 7002 JNZ ?C0002 000B 0500 R INC alarm_count 000D ?C0002: 000D D3 SETB C 000E 9200 E MOV alarm,C 0010 9200 E MOV ?alfunc?BIT,C 0012 120000 E LCALL alfunc
0015 D0D0 POP PSW /* 函數(shù)退出前,切換到原來的寄存器組 */ 0017 22 RET
返回值保存在寄存器中的函數(shù)不能使用using。
即使使用相同的寄存器組,使用using的函數(shù)也不能返回bit類型的值。
using通常在中斷服務(wù)函數(shù)定義時(shí)使用,我們可以為不同的中斷服務(wù)函數(shù)指定不同的寄存器組,這樣可以減少堆棧操作,提高程序運(yùn)行效率。
上一篇:Keil C51 之LST文件
下一篇:Keil C51對(duì)C語言的關(guān)鍵詞擴(kuò)展之十七: sbit
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 480Wh/kg!湖南久森半固態(tài)金屬鋰負(fù)極電池即將量產(chǎn)
- 中國首條硫化物固體電解質(zhì)量產(chǎn)線正式落地
- QUT開發(fā)出新的LENS系統(tǒng) 可以讓機(jī)器人進(jìn)行類似大腦的導(dǎo)航
- 毫米波雷達(dá)裝機(jī)量分析:毫米波雷達(dá)裝車量持續(xù)攀升,大陸和博世占據(jù)60%以上市場(chǎng)份額
- TDK推出適用于車載濾波器的同軸電纜供電電感器
- 大摩給“人形機(jī)器人100”清單注入新思路
- 行家預(yù)判:2025年車載Mini LED反超OLED
- 2025數(shù)智未來峰會(huì):深度解讀AI賦能工業(yè)的趨勢(shì)與實(shí)踐
- 工業(yè)自動(dòng)化中的Raspberry Pi:簡化經(jīng)濟(jì)實(shí)惠的邊緣計(jì)算
- 意法半導(dǎo)體宣布擴(kuò)大在新加坡的“Lab-in-Fab”廠內(nèi)實(shí)驗(yàn)室合作項(xiàng)目
- 半導(dǎo)體品牌知名度問卷調(diào)查
- 上演你的“ADI實(shí)驗(yàn)室電路”DIY!
- 下載有禮|是德科技電子書 《通過了解測(cè)試精度的基礎(chǔ)知識(shí), 提高良率并降低風(fēng)險(xiǎn)》,不做“差不多先生”
- 下載《Altera SoC深度體驗(yàn)》,打分評(píng)論贏好禮
- 【已結(jié)束】 Qorvo、村田、NI直播【UWB最新技術(shù)、方案、市場(chǎng)、應(yīng)用解析】(13:30開始入場(chǎng))
- TI 最新CapTIvate™ 觸控微控制器技術(shù)直播開始報(bào)名嘍!報(bào)名參與有禮呦!
- 老T叔的藏書閣——一位老工程師多年的資料積累
- 有獎(jiǎng)直播【Keysight World Tech Day 2023分論壇——汽車自動(dòng)駕駛與新能源】
- #最能打國產(chǎn)芯#能打入汽車電子這片地的國產(chǎn)芯,有多少啦?
- 新年新挑戰(zhàn):ST藍(lán)牙開發(fā)板免費(fèi)申請(qǐng)?jiān)u測(cè)+挑戰(zhàn)賽(littleshrimp帶隊(duì))
- AVR單片機(jī)(ATMEGA16)萬年歷(溫度鬧鐘年月日時(shí)分秒星期)
- PIC單片機(jī)的抗干擾能力強(qiáng)還是AVR單片機(jī)的強(qiáng)?
- AVR單片機(jī)(ATMEGA16)控制蜂鳴器
- AVR單片機(jī)(ATMEGA16)定時(shí)器程序
- ATmega16A使用過程PC端口解決
- 哈工智能再獲政府4000萬補(bǔ)助,四季度能否由負(fù)轉(zhuǎn)正?
- 微軟Surface Pro 8解密:酷睿i3的“丐版”終于配上8GB內(nèi)存
- 小米11 Pro重要參數(shù)曝光:屏幕和標(biāo)準(zhǔn)版一致
- iPhone 12 定價(jià)揭秘,尚有 M1 MacBook
- 訴訟四個(gè)月后,蘋果和“梨子”達(dá)成和解