找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 6930|回復(fù): 16
收起左側(cè)

51單片機(jī)P2口賦值問(wèn)題

[復(fù)制鏈接]
ID:442990 發(fā)表于 2020-4-21 11:09 | 顯示全部樓層 |閱讀模式
請(qǐng)教一個(gè)問(wèn)題:

#define motor(x) {p2&=0xf0;p2|=x},這是怎么給P2口賦值的,謝謝!
回復(fù)

使用道具 舉報(bào)

ID:734207 發(fā)表于 2020-4-21 11:37 來(lái)自觸屏版 | 顯示全部樓層
你確定是這個(gè)端口嗎
回復(fù)

使用道具 舉報(bào)

ID:734207 發(fā)表于 2020-4-21 11:37 來(lái)自觸屏版 | 顯示全部樓層
我覺(jué)得這個(gè)端口不對(duì)吧
回復(fù)

使用道具 舉報(bào)

ID:442990 發(fā)表于 2020-4-21 15:15 | 顯示全部樓層
主函數(shù)中調(diào)用motor(x),x=0x01等,該程序是驅(qū)動(dòng)步進(jìn)電機(jī)的,分別給不同相供電
回復(fù)

使用道具 舉報(bào)

ID:220661 發(fā)表于 2020-4-21 20:39 | 顯示全部樓層
這個(gè)得結(jié)合電路連接了,看似是P2低位四位驅(qū)動(dòng)輸出,先清0,再賦值的,如果是那種玩具電機(jī),就逐位為1.
回復(fù)

使用道具 舉報(bào)

ID:311846 發(fā)表于 2020-4-22 11:58 | 顯示全部樓層
在51中一般你這個(gè)是P2端口組,代表這P2^0到P2^7的8個(gè)端口,p2&=0xf0,把0xf0轉(zhuǎn)變?yōu)槎M(jìn)制為11110000再與P2的8個(gè)IO口做位與運(yùn)算,是把P2^0到P2^3四個(gè)IO口賦值為0,P2^4到P2^7端口不變,p2|=x就是將X的值賦值給P2的8個(gè)IO,x為1字節(jié)=8個(gè)比特,每個(gè)比特代表一個(gè)IO
回復(fù)

使用道具 舉報(bào)

ID:442990 發(fā)表于 2020-4-22 17:21 | 顯示全部樓層
十分感謝各位回復(fù)!謝謝!
回復(fù)

使用道具 舉報(bào)

ID:97249 發(fā)表于 2020-4-22 19:22 | 顯示全部樓層
#define motor(x) {p2&=0xf0;p2|=x},
等于
#define motor(x)  {p2=p2&0xf0;p2=p2|x},
p2&0xf0低4位 置0,
回復(fù)

使用道具 舉報(bào)

ID:97249 發(fā)表于 2020-4-22 22:58 | 顯示全部樓層
權(quán)威人物 發(fā)表于 2020-4-22 11:58
在51中一般你這個(gè)是P2端口組,代表這P2^0到P2^7的8個(gè)端口,p2&=0xf0,把0xf0轉(zhuǎn)變?yōu)槎M(jìn)制為11110000再與P2 ...

p2|=x就是將X的值賦值給P2的8個(gè)IO,----這一句是有誤的。
p2|=x相當(dāng):p2=p2|x   p2與x進(jìn)行或運(yùn)算再賦值給p2.
回復(fù)

使用道具 舉報(bào)

ID:442990 發(fā)表于 2020-4-23 07:52 | 顯示全部樓層
@權(quán)威人物@紅塵有你,二位的解答讓我學(xué)習(xí)了,非常感謝!
回復(fù)

使用道具 舉報(bào)

ID:191511 發(fā)表于 2020-4-23 10:16 | 顯示全部樓層
宏定義里前一句,與0xf0求&,是為了給低4位清零,高4位保持原來(lái)的值不變,這個(gè)是&的邏輯運(yùn)算特性決定的。下一句是P2口在上一句結(jié)果上和輸入?yún)?shù)x求或操作。
其實(shí)這兩句最后的結(jié)果應(yīng)該是在保持高4位不變的情況下,把x的值傳入P2口。從而也可以猜出來(lái),x的值低4位有效(有效指的是有可能值是0,也可能非0),而高4位應(yīng)該是0。如果不是0,會(huì)修改P2高4位值,與第一句操作不符。
回復(fù)

使用道具 舉報(bào)

ID:519352 發(fā)表于 2020-4-23 10:49 | 顯示全部樓層
motor(x) 等效為 {p2=p2&0xf0;p2=p2|x}
回復(fù)

使用道具 舉報(bào)

ID:442990 發(fā)表于 2020-4-23 13:11 | 顯示全部樓層
銀河天地 發(fā)表于 2020-4-23 10:49
motor(x) 等效為 {p2=p2&0xf0;p2=p2|x}

假如x分別等于0x09和ox01,P2值各是多少?
回復(fù)

使用道具 舉報(bào)

ID:538345 發(fā)表于 2020-4-23 13:33 | 顯示全部樓層
P2口高四位 為1,帶參數(shù)的宏定義的話,則P2|=x,即只會(huì)對(duì)低四位進(jìn)行操作看具體賦值多少即可。
回復(fù)

使用道具 舉報(bào)

ID:672349 發(fā)表于 2020-4-23 13:36 | 顯示全部樓層
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:97249 發(fā)表于 2020-4-24 11:09 | 顯示全部樓層
jhz931920 發(fā)表于 2020-4-23 13:11
假如x分別等于0x09和ox01,P2值各是多少?

p2=0x09&0xf0   =  0
p2= o|0x09 = 0x09
x=0x01時(shí)也是一樣。樓主要加強(qiáng)位運(yùn)算的學(xué)習(xí)啊
回復(fù)

使用道具 舉報(bào)

ID:442990 發(fā)表于 2020-4-24 16:46 | 顯示全部樓層
紅塵有你 發(fā)表于 2020-4-24 11:09
p2=0x09&0xf0   =  0
p2= o|0x09 = 0x09
x=0x01時(shí)也是一樣。樓主要加強(qiáng)位運(yùn)算的學(xué)習(xí)啊

收到!謝謝指導(dǎo)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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