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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)C語言的賦值問題,sbit要用中間變量而整個(gè)io口又可以省掉?

[復(fù)制鏈接]
ID:793261 發(fā)表于 2020-6-29 22:08 | 顯示全部樓層 |閱讀模式
請教各位大佬,C語言賦值一般是從右邊到左邊,等號的右邊是一個(gè)值,左邊是變量,如 sbit a = P0^0 ;a = 1;第一句意思是把IO口P0的第一個(gè)口賦值給a,第二句是把  1再次賦值給a ,那按照C語言的理解 ,a 最終會是1(前面第一次賦值應(yīng)該從內(nèi)存中清掉了才對),那怎么會控制P0^0了呢?還有如 b = 0xff;P0 = b ;如果我直接寫P0=0xff 這個(gè)好像也是可以的把,那問題就來了,用sbit給IO口賦值的的時(shí)候不能省掉中間變量,那為什么給整個(gè)IO口賦值的時(shí)候又省去中間變量呢?勞煩解惑!謝謝
回復(fù)

使用道具 舉報(bào)

ID:784974 發(fā)表于 2020-6-30 08:28 | 顯示全部樓層
sbit不是你理解的賦值吧,通俗的說是把a(bǔ)和P0^0等價(jià)起來,就是給P0^0另外起了個(gè)名字,a=1;語句才能算得上是賦值,也就是給P0^0賦值。
sbit和IO口后面這個(gè)問題,你可以看看reg51.h文件里面有沒有包含了P0和P0^0。
希望有所幫助,如有錯誤也請指正,謝謝
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2020-6-30 08:33 | 顯示全部樓層
我也想知道哈,位定義可以獨(dú)立操作IO口其中一個(gè),利于單獨(dú)操作,比如對外設(shè)的通信操作,數(shù)據(jù)線和時(shí)鐘線,整體操作則是操作8個(gè),當(dāng)需要單獨(dú)操作時(shí)就用位定義,能整體操作時(shí)則不需要一一定位,我也只知道這樣了。
回復(fù)

使用道具 舉報(bào)

ID:65956 發(fā)表于 2020-6-30 08:40 | 顯示全部樓層
一看這樣的問題就知道是個(gè)初學(xué)者,我也學(xué)C才兩年,我的理解是當(dāng)你在程序前用這個(gè)sbit a = P0^0 ;定義時(shí),這時(shí)只是定義P0寄存器的bit.0為一個(gè)IO口標(biāo)志位,當(dāng)你進(jìn)行a = 1;操作時(shí),即把P0.0寄存器的bit.0置1,也是只是把那個(gè)IO口置高電平,以此類推,后面的操作建議結(jié)合硬件去試驗(yàn),這樣能加快學(xué)習(xí)應(yīng)用;
回復(fù)

使用道具 舉報(bào)

5#
無效樓層,該帖已經(jīng)被刪除
ID:644427 發(fā)表于 2020-6-30 08:43 | 顯示全部樓層
sbit是C51擴(kuò)展的變量類型,是定義特殊功能寄存器的位變量。典型應(yīng)用是:sbit P0_1=P0^1;//即定義P0_1為P0口的第2位,以便進(jìn)行位操作。
在C語言里,如果直接寫P1.1,C編譯器并不能識別,而且P1.1也不是一個(gè)合法的C語言變量名,所以得給它另起一個(gè)名字,這里起的名為P1_1,可是P1_1是不是就是P1.1呢?你這么認(rèn)為,C編譯器可不這么認(rèn)為,所以必須給它們建立聯(lián)系,這里使用了Keil C的關(guān)鍵字sbit來定義,sbit的用法有三種:
第一種方法:sbit 位變量名=地址值
第二種方法:sbit 位變量名=SFR名稱^變量位地址值
第三種方法:sbit 位變量名=SFR地址值^變量位地址值
用sbit P1_1=P1^1;就是定義用符號P1_1來表示P1.1引腳,如果你愿意也可以起P11一類的名字,只要下面程序中也隨之更改就行了

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:466730 發(fā)表于 2020-6-30 09:08 | 顯示全部樓層
sbit有點(diǎn)像宏定義一樣,只是針對位而已,綁定了一個(gè)端口
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-6-30 09:28 | 顯示全部樓層
C語言中沒有sbit關(guān)鍵字,這是keil c51編譯器里面的關(guān)鍵字。 sbit a = P0^0 ;是對端口位寄存器用戶另命名的方式。這里的a不是變量,是P0.0寄存器的別名。
回復(fù)

使用道具 舉報(bào)

ID:452950 發(fā)表于 2020-6-30 10:28 | 顯示全部樓層
sbit a = P0^0 ;不是賦值的意思,是定義a與P0^0等價(jià)。
回復(fù)

使用道具 舉報(bào)

ID:793261 發(fā)表于 2020-6-30 10:32 | 顯示全部樓層
嘿黑潶嗨 發(fā)表于 2020-6-30 08:28
sbit不是你理解的賦值吧,通俗的說是把a(bǔ)和P0^0等價(jià)起來,就是給P0^0另外起了個(gè)名字,a=1;語句才能算得上是 ...

謝謝!
回復(fù)

使用道具 舉報(bào)

11#
無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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