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

標題: C51單片機在主程序里怎么訪問特殊功能寄存器或者說怎么更改先前SFR定義的地址? [打印本頁]

作者: 舊言四    時間: 2022-4-27 14:17
標題: C51單片機在主程序里怎么訪問特殊功能寄存器或者說怎么更改先前SFR定義的地址?
環境 :KielC51
MCU :IAP15W4K61S4
應用環境:利用兩組IO端口(P1^6\P1^5 和 P4^1\P4^2)模擬IIC總線和顯示驅動芯片1648A及外部EEPROM通信,現在用的兩組獨立的代碼實現IIC協議。現在設想改為兩個端口共用一組代碼以減少代碼量,之前想過使用改變指針指向來重定向端口,但是在主程序里發現通過SFR定義的地址無法通過指針獲取。
請問有好的解決方案嗎。

作者: munuc_w    時間: 2022-4-27 16:10
IIC設備是有地址的,放在一組總線上就可以了,用地址區分設備。
作者: 舊言四    時間: 2022-4-27 16:31
munuc_w 發表于 2022-4-27 16:10
IIC設備是有地址的,放在一組總線上就可以了,用地址區分設備。

感謝回復  確實使用一條總線確實可以實現目的 但是因為在結構上也是兩個IIC外設單獨掛載的 所以暫時不能用這種方法。這邊首選還是設想一種方案以軟件來實現外設端口的跳轉,了解到51的SFR地址區域只能采用直接尋址,是不是代表著沒有辦法在主程序中以指針或者中間值替換的方式改變SFR關鍵字的定義地址呢
作者: yzwzfyz    時間: 2022-4-27 17:37
51系統單片機中的特殊寄存器的地址是:80-FFH
而高端RAM的地址也是:80-FFH
這兩個地址是相同的。51為了能區分它們,在指令系統上做了如下的規定:
直接尋址(訪問)對應的是特殊寄存器。
間接尋址(訪問)對應的是高端RAM。
明白這一點就不難理解了。
你用指針訪問80H,而80H即表示特殊寄存器的P0口,也表示高端RAM中的80H。現在知道你訪問的是哪一個了吧。
要讀通CPU手冊,這些手冊上都有。
作者: Hephaestus    時間: 2022-4-27 17:42
純c51語言是無法實現你需要的功能,只能用匯編寫函數,用c語言調用這個函數。
作者: 舊言四    時間: 2022-4-27 17:43
yzwzfyz 發表于 2022-4-27 17:37
51系統單片機中的特殊寄存器的地址是:80-FFH
而高端RAM的地址也是:80-FFH
這兩個地址是相同的。51為了 ...

確實如此

1651052485(1).png (171.45 KB, 下載次數: 33)

1651052485(1).png

作者: lkc8210    時間: 2022-4-27 17:53
IAP15W4K61S4有61k ROM
就那一點點的代碼量CV十次都綽綽有余
作者: Y_G_G    時間: 2022-4-27 21:15
7#已經回復過了
如果不是代碼空間已經不夠用了,實在不理解為什么要減少代碼量?C+V它不香嗎?
說不定整半天,代碼量反而更多了
再說,當初設計的時候就應該先看一下IIC的從機地址,如果不是一樣的地址,那就兩根線足夠了
作者: 188610329    時間: 2022-4-27 21:57
舊言四 發表于 2022-4-27 16:31
感謝回復  確實使用一條總線確實可以實現目的 但是因為在結構上也是兩個IIC外設單獨掛載的 所以暫時不能 ...

說實話, STC15 系列沒有硬件 IIC, 換句話說,你只能通過軟件模擬來 操作IIC, 也就是說不可能在后臺讀寫IIC器件,必須前臺讀寫的話,同一之間你只能訪問一個IIC器件,因此,兩個IIC器件,分別用兩個套IO來操控的意義何在? 感覺是給自己增加工作量啊……
作者: 舊言四    時間: 2022-4-28 09:10
Y_G_G 發表于 2022-4-27 21:15
7#已經回復過了
如果不是代碼空間已經不夠用了,實在不理解為什么要減少代碼量?C+V它不香嗎?
說不定整半天 ...

好巧不巧的是  硬件IIC地址都是0XA0 外部EEPROM采用的是SOT-23-5的封裝也沒有辦法更改從機地址
作者: 舊言四    時間: 2022-4-28 09:12
188610329 發表于 2022-4-27 21:57
說實話, STC15 系列沒有硬件 IIC, 換句話說,你只能通過軟件模擬來 操作IIC, 也就是說不可能在后臺讀寫II ...

給自己挖了個大坑
作者: 舊言四    時間: 2022-4-28 09:14
Hephaestus 發表于 2022-4-27 17:42
純c51語言是無法實現你需要的功能,只能用匯編寫函數,用c語言調用這個函數。

感謝回復  值得參考的建議
作者: lkc8210    時間: 2022-4-28 13:32
其實又不用全代碼CV
只需要加個全局變量來選擇用個腳就可以了

if(IIC_Sel)//0=IIC1, 1=IIC2
SDA1 = 1;
else
SDA2 =1;
作者: 舊言四    時間: 2022-4-28 14:17
lkc8210 發表于 2022-4-28 13:32
其實又不用全代碼CV
只需要加個全局變量來選擇用個腳就可以了

感謝回復  這樣的話確實是比較省時間  




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人免费视频在线观看 | 一区二区三区欧美在线 | 国产欧美日韩精品一区二区三区 | 国产成人网 | 国产亚洲一区二区三区在线观看 | 91久久国产综合久久 | 欧美一级免费黄色片 | 亚洲精品在线91 | 午夜一级做a爰片久久毛片 精品综合 | 91国内外精品自在线播放 | 日本三级电影免费观看 | 国产精品国产精品国产专区不片 | 国产成人精品亚洲日本在线观看 | 99精品免费久久久久久日本 | 一级欧美一级日韩片 | 日韩精品成人av | 久久精品日产第一区二区三区 | 成年人在线视频 | 激情免费视频 | av在线免费播放 | 国产不卡在线 | 久久久精 | 成人影院午夜 | 亚洲日韩中文字幕一区 | 国产精品久久久久久久久久东京 | 日本精品一区二区在线观看 | 日本在线视频中文字幕 | 国产在线a视频 | 99色综合 | 色在线免费视频 | 中文字幕在线剧情 | 丝袜 亚洲 欧美 日韩 综合 | 久久久www成人免费精品 | 国产999精品久久久 精品三级在线观看 | 免费观看黄a一级视频 | 日韩高清中文字幕 | 国产午夜精品一区二区三区 | 91看片免费 | 狠狠做深爱婷婷综合一区 | 日韩精品不卡 | 国产二区精品视频 |