亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 為什么32的寄存器可以這樣操作,而51單片機的不行 [打印本頁]

作者: 3038838599    時間: 2024-8-21 17:09
標題: 為什么32的寄存器可以這樣操作,而51單片機的不行
32的是可以直接將地址強制類型轉化為指針,然后再解引用,就可以直接給這個寄存器賦值操作了。
但是51的不行,不知道干嘛,






作者: cccc888    時間: 2024-8-21 20:54
可以的,你那個括號有問題。

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


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

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

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



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




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

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

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

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

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

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




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