![]() |
允許訪問擴展在XDATA區(qū)的SFR(特殊功能寄存器)。51架構直接訪問的寄存器只有128字節(jié),而STC公司的MCU外設擴展了幾百個寄存器,只好放在XDATA區(qū)。 |
STC為了發(fā)展51芯片擴展了很多東西!又必須考慮兼容過去和能夠在Keil中編程和調試,有些設置就好像是“打補丁”。其實STC的手冊很長,也敘述的很清楚。只是許多人缺少認真看書的習慣! |
用于訪問擴展的特殊功能寄存器,因為51的架構問題,常規(guī)的特殊功能寄存器地址(128字節(jié))遠遠不夠,所以STC增加的幾百個特殊功能寄存器都放在xdata地址空間,為了避免與xdata內存沖突,所以用這一位來允許/禁止擴展的特殊功能寄存器訪問。 如果沒有外接xdata芯片,或外接的沒到64K,或者到64K,最后幾百個字節(jié)不用,則程序已開始設置該位為1,一直不用清除。 |
搞的太復雜了,這就是51架構的局限性 |
innere 發(fā)表于 2023-5-15 16:38 8.2.8 擴展SFR 使能寄存器EAXFR 的使用說明 STC8G/8H 的擴展SFR 地址范圍為0FA00H~0FFFFH,如需訪問XFR 區(qū)域的擴展SFR,需要先將EAXFR (P_SW2.7)置1,并使用MOVX A,@DPTR 和MOVX @DPTR,A 這兩條指令進行讀寫操作。XFR 的地址范 圍與外部擴展RAM 地址的0FA00H~0FFFFH 區(qū)域是重疊的。 1、若用戶不使用外部擴展RAM 或者外部擴展RAM 的最大地址不超過0FA00H (例如只外擴32K RAM),這種情況下不會有不同區(qū)域的訪問地址沖突,可以在上電系統(tǒng)初始化時將EAXFR 寄存器設置為1(例如:P_SW2 |= 0x80;),后續(xù)一直保持為1 不用再修改,即可正常訪問XFR 區(qū)域。 2、若用戶有外擴64K 的擴展RAM,則在訪問XFR 和外部擴展RAM 時需要注意: 訪問XFR 時需要將EAXFR 寄存器位設置為1; 訪問地址范圍在0FA00H~0FFFFH 的外部擴展RAM 時需要將EAXFR 設置為0; 訪問地址范圍在0000H~0F9FFH 的外部擴展RAM 時,與EAXFR 設置的值無關 ![]() |
我也是沒注意到,搞了好久 |
他沒有講這位置1后,耽誤訪問data里的內容不 |
小胸姑娘 發(fā)表于 2021-3-13 10:55 對,我也是這里,卡了好幾天 ![]() |
這個操作 一言難盡! 我看IIC的時候剛好把這個漏過去了,結果硬件IIC怎么也通訊不成功,看了芯片資料給的例程后發(fā)現(xiàn)P_SW2的第一位被置一了,然后再過來查。前前后后搞了好久好久 |
angmall 發(fā)表于 2020-7-16 22:07 謝謝,昨天看了后面才發(fā)現(xiàn) |
謝了,昨天看了后面才發(fā)現(xiàn) |
你認真看下這個表的下面文檔,你會發(fā)現(xiàn)驚喜, |
P_SW2寄存器的最高位EAXFR 是擴展SFR訪問控制使能 如下特殊功能寄存器位于擴展 RAM 區(qū)域 訪問這些寄存器,需先將 P_SW2 的 BIT7(EAXFR) 設置為 1,才可正常讀寫 ![]()
|