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

標(biāo)題: 51單片機(jī)中,這個(gè)SFR定義的是啥意思? [打印本頁(yè)]

作者: 憶1709    時(shí)間: 2021-5-17 12:23
標(biāo)題: 51單片機(jī)中,這個(gè)SFR定義的是啥意思?
本帖最后由 憶1709 于 2021-5-17 12:35 編輯

在STC單片機(jī)的頭文中看到如下定義:
sfr P0          =   0x80;
① sfr是特殊功能寄存器的意思,以上P0不是端口號(hào)嗎,為何變成了特殊功能寄存器了呢? IO口跟特殊功能寄存器的關(guān)系是什么?

② 以上語(yǔ)句,寫在頭文件里,它有什么用處嗎?不這樣定義會(huì)出什么問(wèn)題?

③ 能否把sfr換成#define?










作者: munuc_w    時(shí)間: 2021-5-17 13:40
1. SFR是關(guān)鍵字,用來(lái)定義特殊功能寄存器。在51系列單片機(jī)中,IO口的地址是映射到寄存器上的,即IO口的地址就是對(duì)應(yīng)特殊功能寄存器的地址。P0是PORT0的名字,0x80是P0口對(duì)應(yīng)的內(nèi)部特殊功能寄存器的地址。
2. 將這個(gè)語(yǔ)句放到頭文件中,是便于使用,在應(yīng)用程序中只要包含這個(gè)頭文件,就不用再定義特殊功能寄存器了,直接使用其名字即可。
3. 如果用 #define 定義,語(yǔ)句是這樣的:#define P0 (BYTE *)0X80; 這樣定義后,在匯編語(yǔ)言中就不能使用 P0 這個(gè)名字了。
作者: npn    時(shí)間: 2021-5-17 14:15
P0口對(duì)應(yīng)的0x80數(shù)字,就和地鐵幾號(hào)線一樣,不同號(hào)線去了不同的地方,不同地址都去控制了不同的特殊功能寄存器。
作者: game灬boy    時(shí)間: 2021-5-17 15:21
sfr 定義了 P0 端口對(duì)應(yīng)的物理地址為0x80 ,相當(dāng)于給0x80地址的內(nèi)存區(qū)域(寄存器)取別名P0
#define  是  把P0 定義為常量0x80;
P0 =  0x00  是給P0對(duì)應(yīng)的寄存器賦值,就是把 0x00寫到對(duì)應(yīng)的物理地址的0x80處;
作者: 憶1709    時(shí)間: 2021-5-17 16:30
game灬boy 發(fā)表于 2021-5-17 15:21
sfr 定義了 P0 端口對(duì)應(yīng)的物理地址為0x80 ,相當(dāng)于給0x80地址的內(nèi)存區(qū)域(寄存器)取別名P0
#define  是   ...

如果不取別名,能直接尋址0x80進(jìn)行讀寫嗎?
作者: tyrl800    時(shí)間: 2021-5-17 17:39
憶1709 發(fā)表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進(jìn)行讀寫嗎?

不能直接對(duì)0X80讀寫
作者: tyrl800    時(shí)間: 2021-5-17 19:33
憶1709 發(fā)表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進(jìn)行讀寫嗎?

如果你用匯編語(yǔ)言就可以
作者: munuc_w    時(shí)間: 2021-5-18 08:29
憶1709 發(fā)表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進(jìn)行讀寫嗎?

可以上的,但在操作前要把數(shù)字0X80轉(zhuǎn)換成地址。(U8 *)0X80.
作者: tyrl800    時(shí)間: 2021-5-18 09:20
munuc_w 發(fā)表于 2021-5-18 08:29
可以上的,但在操作前要把數(shù)字0X80轉(zhuǎn)換成地址。(U8 *)0X80.

強(qiáng)制轉(zhuǎn)換成地址好像不行
作者: eb900001    時(shí)間: 2021-5-18 17:40
SFR是關(guān)鍵字,用來(lái)定義特殊功能寄存器。在51系列單片機(jī)中,IO口的地址是映射到寄存器上的,即IO口的地址就是對(duì)應(yīng)特殊功能寄存器的地址。P0是PORT0的名字,0x80是P0口對(duì)應(yīng)的內(nèi)部特殊功能寄存器的地址。
作者: 漠城    時(shí)間: 2021-5-18 18:02
個(gè)人認(rèn)為,51單片機(jī)是直接對(duì)寄存器操作,定義管腳就是對(duì)寄存器進(jìn)行定義。定義51單片機(jī)的IO口是需要使用特定寄存器定義的
作者: dzc3458    時(shí)間: 2021-10-30 13:35
定義P0這個(gè)東西指向p0端口寄存器,你往里面寫什么,p0端口就輸出什么
作者: dzc3458    時(shí)間: 2021-10-30 13:38
不這樣定義你就沒(méi)辦法用有關(guān)于和P0端口的所有操作,必須定義一個(gè)名稱指向p0端口寄存器才能操作p0端口。sfr是指向寄存器的,define只是定義一個(gè)名稱,代表的是把后面的字符和這個(gè)名稱替換,不能替代sfr
作者: 188610329    時(shí)間: 2021-10-30 13:47
憶1709 發(fā)表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進(jìn)行讀寫嗎?

可以, 用匯編就可以了。
MOV  80H,A

就就可以把累加器A的內(nèi)容復(fù)制到P0了。
作者: Hephaestus    時(shí)間: 2021-11-26 14:35
本帖最后由 Hephaestus 于 2021-11-26 16:28 編輯

看來(lái)真懂51體系的人還是太少了。80H這個(gè)地址有兩個(gè)東西啊!直接訪問(wèn)是P0,用地址間接訪問(wèn)是RAM。
MOV R0,#80H
MOV A,@R0
上句是把80H地址的RAM內(nèi)容送到ACC里面。

用地址訪問(wèn)會(huì)混淆這兩個(gè)東西,用SFR限制一下,不就清爽多了?
作者: 188610329    時(shí)間: 2021-11-26 15:47
Hephaestus 發(fā)表于 2021-11-26 14:35
看來(lái)真懂51體系的人還是太少了。80H這個(gè)地址有兩個(gè)東西啊!直接訪問(wèn)是P0,用地址間接訪問(wèn)是RAM。
MOV R0,8 ...

把80H地址的RAM內(nèi)容送到ACC里面,一般要這么寫:
MOV R0,#80H
MOV A,@R0






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1