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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10375|回復: 15
打印 上一主題 下一主題
收起左側

51單片機中,這個SFR定義的是啥意思?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:847776 發表于 2021-5-17 12:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 憶1709 于 2021-5-17 12:35 編輯

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

② 以上語句,寫在頭文件里,它有什么用處嗎?不這樣定義會出什么問題?

③ 能否把sfr換成#define?









分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:752974 發表于 2021-5-17 13:40 | 只看該作者
1. SFR是關鍵字,用來定義特殊功能寄存器。在51系列單片機中,IO口的地址是映射到寄存器上的,即IO口的地址就是對應特殊功能寄存器的地址。P0是PORT0的名字,0x80是P0口對應的內部特殊功能寄存器的地址。
2. 將這個語句放到頭文件中,是便于使用,在應用程序中只要包含這個頭文件,就不用再定義特殊功能寄存器了,直接使用其名字即可。
3. 如果用 #define 定義,語句是這樣的:#define P0 (BYTE *)0X80; 這樣定義后,在匯編語言中就不能使用 P0 這個名字了。
回復

使用道具 舉報

板凳
ID:57657 發表于 2021-5-17 14:15 | 只看該作者
P0口對應的0x80數字,就和地鐵幾號線一樣,不同號線去了不同的地方,不同地址都去控制了不同的特殊功能寄存器。
回復

使用道具 舉報

地板
ID:367369 發表于 2021-5-17 15:21 | 只看該作者
sfr 定義了 P0 端口對應的物理地址為0x80 ,相當于給0x80地址的內存區域(寄存器)取別名P0
#define  是  把P0 定義為常量0x80;
P0 =  0x00  是給P0對應的寄存器賦值,就是把 0x00寫到對應的物理地址的0x80處;
回復

使用道具 舉報

5#
ID:847776 發表于 2021-5-17 16:30 | 只看該作者
game灬boy 發表于 2021-5-17 15:21
sfr 定義了 P0 端口對應的物理地址為0x80 ,相當于給0x80地址的內存區域(寄存器)取別名P0
#define  是   ...

如果不取別名,能直接尋址0x80進行讀寫嗎?
回復

使用道具 舉報

6#
ID:275826 發表于 2021-5-17 17:39 | 只看該作者
憶1709 發表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進行讀寫嗎?

不能直接對0X80讀寫
回復

使用道具 舉報

7#
ID:275826 發表于 2021-5-17 19:33 | 只看該作者
憶1709 發表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進行讀寫嗎?

如果你用匯編語言就可以
回復

使用道具 舉報

8#
ID:752974 發表于 2021-5-18 08:29 | 只看該作者
憶1709 發表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進行讀寫嗎?

可以上的,但在操作前要把數字0X80轉換成地址。(U8 *)0X80.
回復

使用道具 舉報

9#
ID:275826 發表于 2021-5-18 09:20 | 只看該作者
munuc_w 發表于 2021-5-18 08:29
可以上的,但在操作前要把數字0X80轉換成地址。(U8 *)0X80.

強制轉換成地址好像不行
回復

使用道具 舉報

10#
ID:45026 發表于 2021-5-18 17:40 | 只看該作者
SFR是關鍵字,用來定義特殊功能寄存器。在51系列單片機中,IO口的地址是映射到寄存器上的,即IO口的地址就是對應特殊功能寄存器的地址。P0是PORT0的名字,0x80是P0口對應的內部特殊功能寄存器的地址。
回復

使用道具 舉報

11#
ID:808225 發表于 2021-5-18 18:02 | 只看該作者
個人認為,51單片機是直接對寄存器操作,定義管腳就是對寄存器進行定義。定義51單片機的IO口是需要使用特定寄存器定義的
回復

使用道具 舉報

12#
ID:964308 發表于 2021-10-30 13:35 來自手機 | 只看該作者
定義P0這個東西指向p0端口寄存器,你往里面寫什么,p0端口就輸出什么
回復

使用道具 舉報

13#
ID:964308 發表于 2021-10-30 13:38 來自手機 | 只看該作者
不這樣定義你就沒辦法用有關于和P0端口的所有操作,必須定義一個名稱指向p0端口寄存器才能操作p0端口。sfr是指向寄存器的,define只是定義一個名稱,代表的是把后面的字符和這個名稱替換,不能替代sfr
回復

使用道具 舉報

14#
ID:624769 發表于 2021-10-30 13:47 | 只看該作者
憶1709 發表于 2021-5-17 16:30
如果不取別名,能直接尋址0x80進行讀寫嗎?

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

就就可以把累加器A的內容復制到P0了。
回復

使用道具 舉報

15#
ID:883242 發表于 2021-11-26 14:35 | 只看該作者
本帖最后由 Hephaestus 于 2021-11-26 16:28 編輯

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

用地址訪問會混淆這兩個東西,用SFR限制一下,不就清爽多了?
回復

使用道具 舉報

16#
ID:624769 發表于 2021-11-26 15:47 | 只看該作者
Hephaestus 發表于 2021-11-26 14:35
看來真懂51體系的人還是太少了。80H這個地址有兩個東西啊!直接訪問是P0,用地址間接訪問是RAM。
MOV R0,8 ...

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

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久精品一区二区毛片吞精 | 91av久久久| av免费网站在线观看 | 久久久精品一区 | 久久精品中文字幕 | 亚州av| 久久久.com | 日日草夜夜草 | 久久伊人影院 | 亚洲成人精选 | 草久视频| 精品视频久久久 | 中文在线a在线 | 久久91精品国产一区二区三区 | 久久久久久久久久性 | 黄色91在线| 99久久国产综合精品麻豆 | 亚洲va国产日韩欧美精品色婷婷 | 日韩电影一区二区三区 | 成人在线免费网站 | 欧美视频 亚洲视频 | 特a毛片 | 91视频播放 | 99国产精品99久久久久久 | 欧美精品一区二区免费 | 国产精品入口麻豆www | 欧美亚洲激情 | 一区二区免费 | 蜜桃av鲁一鲁一鲁一鲁 | 亚洲欧美精品一区 | 成人免费视频网站在线观看 | 另类视频区 | 亚洲国产一区二区三区在线观看 | 亚洲国产精品成人综合久久久 | 国产欧美一区二区三区国产幕精品 | 97精品超碰一区二区三区 | 91中文字幕在线 | 成人国产精品入口免费视频 | 成年人免费看 | 精品少妇一区二区三区日产乱码 | 国产精品www |