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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7356|回復: 10
打印 上一主題 下一主題
收起左側(cè)

關于單片機P0,P1,P2,P3之間關系的疑問

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:703395 發(fā)表于 2020-3-9 09:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
昨天我拿到了51單片機開發(fā)板興沖沖的去點亮了LED和流水燈
興奮之余我打開了 reg52.h 這個頭文件
我發(fā)現(xiàn)

P0的定義 = 0x80 (1000 0000)

P2的定義 = 0xA0 (1010 0000)

令我困惑的地方是,我對P2每個位進行操作的時候。為什么沒有影響到 P0,P1,P3呢

例如

  1. for(i = 1; i <= max; i++)
  2.         {
  3.                 P2 = (0xff >> i);
  4.                 delay(d);
  5.         }
復制代碼

如果P2是一個16位及以上的變量,我還能理解。例如:
1010 0000 xxxx xxxx
利用后面的 xxxx xxxx 來控制8個LED燈。前面的 1010 0000 來說明是P2
可現(xiàn)在問題就是
我將P2 設置成 0x80的時候。它竟然還是在控制著某一個LED燈。


最佳答案

查看完整內(nèi)容

你提供的 P0的定義 = 0x80 (1000 0000) 0x80是端口P0地址 P2的定義 = 0xA0 (1010 0000) 0xA0是端口P2地址 好象進超市購物你手提包存放的80號柜,而 P2 = (0xff >> i);是操作的你的手提包,與柜子編號80沒有關系,只是說明你要到手提包里拿錢,必須對應找到80號柜
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:235200 發(fā)表于 2020-3-9 09:37 | 只看該作者
你提供的
P0的定義 = 0x80 (1000 0000)   0x80是端口P0地址

P2的定義 = 0xA0 (1010 0000)  0xA0是端口P2地址

好象進超市購物你手提包存放的80號柜,而
P2 = (0xff >> i);是操作的你的手提包,與柜子編號80沒有關系,只是說明你要到手提包里拿錢,必須對應找到80號柜
回復

使用道具 舉報

板凳
ID:691449 發(fā)表于 2020-3-9 12:45 | 只看該作者
本帖最后由 xianming 于 2020-3-9 12:53 編輯

你好。
P0和P2的定義是定義的地址,不是像10000000這樣具體的數(shù)。
在單片機里,P0,P1,P2,P3是四個特殊的寄存器。0x80就是P0這個寄存器的地址。
也就是說,你往P0里面寫數(shù),相當于往0x80這個存儲單元里面寫數(shù),往P2寫就相當于往0xA0這個存儲單元寫。

而0x80里面的數(shù)是怎么到P0口輸出的,就是單片機的內(nèi)部電路了。其實就是你只要往0x80里面寫一個數(shù),單片機的內(nèi)部電路就會把這個數(shù)送到P0口輸出。
P0口定義的地址是不能變的,P0口就得定義成0x80,因為單片機只把0x80的數(shù)輸出到P0。

reg52文件應該寫的是 sfr P0=0x80;
你在程序里往P0寫,編譯之后就會往0x80這個地址寫。

c語言一個是sfr,一個是#define,sfr定義的是地址,#define定義的是具體的數(shù)據(jù)。
希望能幫到你。

評分

參與人數(shù) 1黑幣 +25 收起 理由
錢木頭 + 25 贊一個!

查看全部評分

回復

使用道具 舉報

地板
ID:703395 發(fā)表于 2020-3-9 13:51 | 只看該作者
csmyldl 發(fā)表于 2020-3-9 11:49
你提供的
P0的定義 = 0x80 (1000 0000)   0x80是端口P0地址

正因為 0x80 是P0的地址(或者叫做端口,請原諒我的不專業(yè))
我才會有一系列的疑惑。
因為我將P2 = 0x80的時候。它也是在控制LED燈
下面是我拿到的單片機第一節(jié)教程點亮LED燈,這些就比較容易理解。
sbit led1 = P2 ^ 0;  // 我測試過直接使用 sbit led1 = 0xA0 ^ 0 - 7,效果相同
sbit led2 = P2 ^ 1;
sbit led3 = P2 ^ 2;
當 led1 = 0; 的時候第一個燈被點亮
通過搜索 "sbit是什么"  : sbit 位變量名=地址值
我理解為下面的內(nèi)存模型
mem addr  | value
1010 0000 | 1
1010 0001 | 1
1010 0010 | 1
1010 0011 | 1
1010 0100 | 1
1010 0101 | 1
1010 0110 | 1
1010 0111 | 1
上面內(nèi)存模型中的某個地址的值被設置為0的時候(低電平)。LED等則被點亮
可以很清楚的看到 :
P2 = 0xA0
0xA0 ^ 0 = 0xA0 | 1010 0000
0xA0 ^ 1 = 0xA1 | 1010 0001
0xA0 ^ 2 = 0xA2 | 1010 0010
0xA0 ^ 3 = 0xA3 | 1010 0011

0xA0 ^ 4 = 0xA4 | 1010 0100
0xA0 ^ 5 = 0xA5 | 1010 0101
0xA0 ^ 6 = 0xA6 | 1010 0110
0xA0 ^ 7 = 0xA7 | 1010 0111

上面的8個地址分別代表著8個LED燈的地址. 但是高位都是 1010 也就是 0xA0 = P2

現(xiàn)在為題來了 :
如果我將P2的值修改成 0x80 也就是說 P2 不在等于 1010 0000,而是 1000 000。
地址已經(jīng)發(fā)生了變化為什么還可以控制LED燈呢?
回復

使用道具 舉報

5#
ID:691449 發(fā)表于 2020-3-9 14:06 | 只看該作者
錢木頭 發(fā)表于 2020-3-9 13:51
正因為 0x80 是P0的地址(或者叫做端口,請原諒我的不專業(yè))
我才會有一系列的疑惑。
因為我將P2 = 0x80的 ...

你把P2的地址改成了0x80,0x80是P0的地址,你再往P2寫數(shù)就寫到P0了。
回復

使用道具 舉報

6#
ID:213173 發(fā)表于 2020-3-9 14:11 | 只看該作者
回復

使用道具 舉報

7#
ID:419968 發(fā)表于 2020-3-9 14:12 | 只看該作者
sbit 是51才有的位尋址 對應的地址為 20H~2FH
回復

使用道具 舉報

8#
ID:703395 發(fā)表于 2020-3-9 14:15 | 只看該作者
感謝上面兩位大佬的解惑,我明白了
終于想通了,我蠢死了

其實 sfr P2    = 0xA0;
這句我修改成 P2 = 0x80的過程應該是下面這種
*(char*)0xA0 = 0x80;
回復

使用道具 舉報

9#
ID:691449 發(fā)表于 2020-3-10 15:34 | 只看該作者
錢木頭 發(fā)表于 2020-3-9 14:15
感謝上面兩位大佬的解惑,我明白了
終于想通了,我蠢死了

你把sfr改成P2 = 0x80,單片機P2仍然輸出嗎?

其實代碼里本來沒有P0到P3,P0到P0都是sfr定義的。
修改成 P2 = 0x80不應該是*(char*)0xA0 = 0x80;,因為你把P2從A0改成80,你再給 P2賦值,就相當于給新的80賦值,沒有a0的事了。
原來給P2賦值,數(shù)據(jù)到A0,是因為有sfr P2=0xA0,現(xiàn)在改了,數(shù)據(jù)就到改之后的地方了。
回復

使用道具 舉報

10#
ID:703395 發(fā)表于 2020-3-10 17:42 | 只看該作者
xianming 發(fā)表于 2020-3-10 15:34
你把sfr改成P2 = 0x80,單片機P2仍然輸出嗎?

其實代碼里本來沒有P0到P3,P0到P0都是sfr定義的。

抱歉沒說清楚,我并沒有在 reg52.h 文件中修改
sfr P2    = 0xA0; 的 定義為 sfr P2    = 0x80;

只是程序運行之后在main()函數(shù)當中動態(tài)設置為
P2 = 0x80;
是的,還是可以控制LED燈
所以我打個不形象的比喻
*(char*)0xA0 = 0x80;
回復

使用道具 舉報

11#
ID:513213 發(fā)表于 2021-5-11 11:40 | 只看該作者
錢木頭 發(fā)表于 2020-3-9 14:15
感謝上面兩位大佬的解惑,我明白了
終于想通了,我蠢死了

sfr P2    = 0xA0;定義地址,或者理解為給地址起了個名字
P2 = *****,時給給這個變量(名字)對應得地址賦值----把值放進這個地址里。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 蜜臀网站| 国产精品一区二区av | 欧美激情欧美激情在线五月 | 日韩1区 | 日韩av成人| 精品伦精品一区二区三区视频 | 免费xxxx大片国产在线 | 精品久久香蕉国产线看观看亚洲 | 国产一区视频在线 | 欧美久久久久久久久中文字幕 | 国产精品国产精品国产专区不片 | 国产一二三区在线 | 欧美性网 | 亚洲国产精品日本 | 成人福利网| 中文字幕在线一区 | 久久久久一区二区三区四区 | 亚洲国产精品成人综合久久久 | 噜噜噜噜狠狠狠7777视频 | 国产成人精品免费视频大全最热 | 亚洲黄色一级毛片 | 久久精品国产99国产精品亚洲 | 国产亚洲一区二区三区在线观看 | 午夜国产羞羞视频免费网站 | 亚洲精品日本 | 91精品国产91久久久久久最新 | 日本一区二区不卡 | 成年人在线观看视频 | 国产高清免费视频 | 亚洲一区二区三区高清 | 精品国产乱码一区二区三 | 久久里面有精品 | 一区二区成人 | 色综合一区二区三区 | 99国内精品 | 亚洲欧美一区二区三区国产精品 | 99re国产视频 | 青春草91 | 国产欧美在线播放 | 免费黄色在线观看 | 色免费看|