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

標(biāo)題: 為什么32的寄存器可以這樣操作,而51單片機(jī)的不行 [打印本頁(yè)]

作者: 3038838599    時(shí)間: 2024-8-21 17:09
標(biāo)題: 為什么32的寄存器可以這樣操作,而51單片機(jī)的不行
32的是可以直接將地址強(qiáng)制類(lèi)型轉(zhuǎn)化為指針,然后再解引用,就可以直接給這個(gè)寄存器賦值操作了。
但是51的不行,不知道干嘛,






作者: cccc888    時(shí)間: 2024-8-21 20:54
可以的,你那個(gè)括號(hào)有問(wèn)題。

作者: 單片機(jī)研究協(xié)會(huì)    時(shí)間: 2024-8-21 22:42
51用匯編也可以實(shí)現(xiàn)同樣的效果
作者: lkc8210    時(shí)間: 2024-8-22 09:23


作者: 3038838599    時(shí)間: 2024-8-22 09:45
cccc888 發(fā)表于 2024-8-21 20:54
可以的,你那個(gè)括號(hào)有問(wèn)題。

那你試著不要“reg52.h"頭文件,看看能不能把P1的引腳都置0。
作者: coody_sz    時(shí)間: 2024-8-22 09:58
51的寄存器只能直接尋址操作,不能用間接尋址,所以不能用指針。
作者: 624353765    時(shí)間: 2024-8-22 19:36
是因?yàn)?2比較落后,沒(méi)有bit功能,只能這么操作
而51就比較強(qiáng)大,不但能用bit賦值,也能用指針賦值
只是你沒(méi)寫(xiě)對(duì)
作者: cccc888    時(shí)間: 2024-8-22 21:23
3038838599 發(fā)表于 2024-8-22 09:45
那你試著不要“reg52.h"頭文件,看看能不能把P1的引腳都置0。

的確是這樣子的,但是xdata寄存器可以這樣定義,我看過(guò)別的單片機(jī)的頭文件定義。
作者: cccc888    時(shí)間: 2024-8-22 21:33
又有新發(fā)現(xiàn)。參照別的頭文件加上內(nèi)存區(qū)塊名



發(fā)現(xiàn)加了data和加idata和不加生成的匯編代碼一樣。這算不算??,既然支持了,就應(yīng)該有區(qū)別吧。




作者: csmjmcc    時(shí)間: 2024-8-23 14:47
我嘗試回答,不知道是否有誤,請(qǐng)指正。
1、51特殊功能寄存器與RAM使用統(tǒng)一編址,如果用這種指針?lè)绞皆L問(wèn),編譯器不知道指向哪個(gè)鬼,編譯器會(huì)給出警告說(shuō):內(nèi)存空間或許無(wú)效。
2、所以,51使用關(guān)鍵字SFR訪問(wèn)特殊寄存器。如:sfr   P1  = 0x90;        //P1口數(shù)據(jù)寄存器
作者: 3038838599    時(shí)間: 2024-8-24 16:08
cccc888 發(fā)表于 2024-8-22 21:23
的確是這樣子的,但是xdata寄存器可以這樣定義,我看過(guò)別的單片機(jī)的頭文件定義。

是的 我也是看見(jiàn)過(guò)別的51內(nèi)核的單片機(jī)這么做,所以才需要搞懂
#define I2C_SR                    *(_IO  uint8 xdata *)0x402b        // RV:  00H      I2C狀態(tài)寄存器
作者: 3038838599    時(shí)間: 2024-8-25 15:15
lkc8210 發(fā)表于 2024-8-22 09:23

我也看了這段話,但是沒(méi)有整明白,有人說(shuō)32的是地址映射,
作者: 單片機(jī)研究協(xié)會(huì)    時(shí)間: 2024-8-26 00:21
3038838599 發(fā)表于 2024-8-24 16:08
是的 我也是看見(jiàn)過(guò)別的51內(nèi)核的單片機(jī)這么做,所以才需要搞懂
#define I2C_SR                    *(_IO ...

這個(gè)寄存器地址是在xdata區(qū)域,不在0x80--0xFF,所以可以這樣定義,大多數(shù)寄存器地址是0x80--0xFF,需要使用直接尋址,
如果用間接尋址訪問(wèn)0x80--0xFF,就是訪問(wèn)idata的RAM,
如果用直接尋址訪問(wèn)0x80--0xFF,就是訪問(wèn)寄存器
0x00-0x7F可以是data區(qū),也可以是idata區(qū)
如果用間接尋址訪問(wèn)0x00--0x7F,就是訪問(wèn)idata區(qū)
如果用直接尋址訪問(wèn)0x00--0x7F,就是訪問(wèn)data區(qū)
作者: lkc8210    時(shí)間: 2024-8-26 11:32
3038838599 發(fā)表于 2024-8-25 15:15
我也看了這段話,但是沒(méi)有整明白,有人說(shuō)32的是地址映射,

總而言之
0x80~0xFF地址的寄存器只能用SFR來(lái)訪問(wèn), 如
sfr P3 = 0xB0;
...
P3 = 0x0F;
if(P3 != 0x0F)
{
...
}
作者: 188610329    時(shí)間: 2024-8-26 21:08
你稍微懂一點(diǎn)點(diǎn)的 硬件知識(shí),就不會(huì)有這個(gè)問(wèn)題了。

指針訪問(wèn)屬于 “間接訪問(wèn)”。
而51的SFR 屬于 只能"直接訪問(wèn)",是不能用指針訪問(wèn)的。
至于,51的擴(kuò)展寄存器 XSFR 屬于只能“間接訪問(wèn)”,即無(wú)論如何都必須通過(guò)指針才能訪問(wèn)的。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 老女人毛片| 日韩在线视频免费观看 | 国产美女av | 色爽视频 | 国产黄a三级三级看三级 | 欧美一区二区免费 | 四虎看片 | 一区二区免费视频 | 久久久久久久97 | 毛片网站免费 | av不卡在线观看 | 99国产精品99久久久久久 | 欧美日韩第一页 | 又黄又爽的网站 | 亚洲一区二区三区免费视频 | 欧美日韩高清在线 | 福利片在线观看 | 免费看黄色一级片 | 色天堂影院| 一区视频在线 | 日韩福利在线 | 国内自拍偷拍视频 | www.青青草.com | 精品一区二区三区中文字幕 | 性巴克成人免费网站 | 国产传媒一区二区 | av在线免费观看网站 | 五月天久久久 | 四虎8848| 久久久噜噜噜 | 久久青青操| 午夜免费视频 | 精品黄色片 | 精品国产乱码一区二区三 | 日韩中文字幕在线观看 | 日韩欧美中文字幕在线观看 | 国产精品久久久久久久久久久久午夜片 | 色伊伊 | 欧美三级韩国三级日本三斤在线观看 | 日韩毛片免费 | 国产又粗又猛又黄又爽的视频 |