1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7462|回復: 16
收起左側

51單片機P2口賦值問題

[復制鏈接]
ID:442990 發表于 2020-4-21 11:09 | 顯示全部樓層 |閱讀模式
請教一個問題:

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

使用道具 舉報

ID:734207 發表于 2020-4-21 11:37 來自觸屏版 | 顯示全部樓層
你確定是這個端口嗎
回復

使用道具 舉報

ID:734207 發表于 2020-4-21 11:37 來自觸屏版 | 顯示全部樓層
我覺得這個端口不對吧
回復

使用道具 舉報

ID:442990 發表于 2020-4-21 15:15 | 顯示全部樓層
主函數中調用motor(x),x=0x01等,該程序是驅動步進電機的,分別給不同相供電
回復

使用道具 舉報

ID:220661 發表于 2020-4-21 20:39 | 顯示全部樓層
這個得結合電路連接了,看似是P2低位四位驅動輸出,先清0,再賦值的,如果是那種玩具電機,就逐位為1.
回復

使用道具 舉報

ID:311846 發表于 2020-4-22 11:58 | 顯示全部樓層
在51中一般你這個是P2端口組,代表這P2^0到P2^7的8個端口,p2&=0xf0,把0xf0轉變為二進制為11110000再與P2的8個IO口做位與運算,是把P2^0到P2^3四個IO口賦值為0,P2^4到P2^7端口不變,p2|=x就是將X的值賦值給P2的8個IO,x為1字節=8個比特,每個比特代表一個IO
回復

使用道具 舉報

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

使用道具 舉報

ID:97249 發表于 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,
回復

使用道具 舉報

ID:97249 發表于 2020-4-22 22:58 | 顯示全部樓層
權威人物 發表于 2020-4-22 11:58
在51中一般你這個是P2端口組,代表這P2^0到P2^7的8個端口,p2&=0xf0,把0xf0轉變為二進制為11110000再與P2 ...

p2|=x就是將X的值賦值給P2的8個IO,----這一句是有誤的。
p2|=x相當:p2=p2|x   p2與x進行或運算再賦值給p2.
回復

使用道具 舉報

ID:442990 發表于 2020-4-23 07:52 | 顯示全部樓層
@權威人物@紅塵有你,二位的解答讓我學習了,非常感謝!
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

ID:672349 發表于 2020-4-23 13:36 | 顯示全部樓層
學習了
回復

使用道具 舉報

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

p2=0x09&0xf0   =  0
p2= o|0x09 = 0x09
x=0x01時也是一樣。樓主要加強位運算的學習啊
回復

使用道具 舉報

ID:442990 發表于 2020-4-24 16:46 | 顯示全部樓層
紅塵有你 發表于 2020-4-24 11:09
p2=0x09&0xf0   =  0
p2= o|0x09 = 0x09
x=0x01時也是一樣。樓主要加強位運算的學習啊

收到!謝謝指導!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表