找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9784|回復(fù): 14
收起左側(cè)

stc8單片機(jī)功能腳切換寄存器這一位EAXFR是干什么的?

  [復(fù)制鏈接]
ID:718037 發(fā)表于 2020-7-16 16:42 | 顯示全部樓層 |閱讀模式
寄存器這一位 EAXFR 是干什么的

下載.png
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2020-7-16 22:07 | 顯示全部樓層
P_SW2寄存器的最高位EAXFR 是擴(kuò)展SFR訪問控制使能
如下特殊功能寄存器位于擴(kuò)展 RAM 區(qū)域 訪問這些寄存器,需先將 P_SW2 的 BIT7(EAXFR) 設(shè)置為 1,才可正常讀寫


EAXFR-STC8A.jpg


  1. #include "reg51.h"
  2. #include "intrins.h"

  3. //測試工作頻率為11.0592MHz

  4. sfr     P_SW2       =   0xba;
  5. sfr     PWMCFG      =   0xf1;
  6. sfr     PWMIF       =   0xf6;
  7. sfr     PWMFDCR     =   0xf7;
  8. sfr     PWMCR       =   0xfe;

  9. #define PWMC            (*(unsigned int volatile xdata *)0xfff0)
  10. #define PWMCKS          (*(unsigned char volatile xdata *)0xfff2)
  11. #define TADCP           (*(unsigned int volatile xdata *)0xfff3)
  12. #define PWM0T1          (*(unsigned int volatile xdata *)0xff00)
  13. #define PWM0T2          (*(unsigned int volatile xdata *)0xff02)
  14. #define PWM0CR          (*(unsigned char volatile xdata *)0xff04)
  15. #define PWM0HLD         (*(unsigned char volatile xdata *)0xff05)
  16. #define PWM1T1          (*(unsigned int volatile xdata *)0xff10)
  17. #define PWM1T2          (*(unsigned int volatile xdata *)0xff12)
  18. #define PWM1CR          (*(unsigned char volatile xdata *)0xff14)
  19. #define PWM1HLD         (*(unsigned char volatile xdata *)0xff15)
  20. #define PWM2T1          (*(unsigned int volatile xdata *)0xff20)
  21. #define PWM2T2          (*(unsigned int volatile xdata *)0xff22)
  22. #define PWM2CR          (*(unsigned char volatile xdata *)0xff24)
  23. #define PWM2HLD         (*(unsigned char volatile xdata *)0xff25)
  24. #define PWM3T1          (*(unsigned int volatile xdata *)0xff30)
  25. #define PWM3T2          (*(unsigned int volatile xdata *)0xff32)
  26. #define PWM3CR          (*(unsigned char volatile xdata *)0xff34)
  27. #define PWM3HLD         (*(unsigned char volatile xdata *)0xff35)
  28. #define PWM4T1          (*(unsigned int volatile xdata *)0xff40)
  29. #define PWM4T2          (*(unsigned int volatile xdata *)0xff42)
  30. #define PWM4CR          (*(unsigned char volatile xdata *)0xff44)
  31. #define PWM4HLD         (*(unsigned char volatile xdata *)0xff45)
  32. #define PWM5T1          (*(unsigned int volatile xdata *)0xff50)
  33. #define PWM5T2          (*(unsigned int volatile xdata *)0xff52)
  34. #define PWM5CR          (*(unsigned char volatile xdata *)0xff54)
  35. #define PWM5HLD         (*(unsigned char volatile xdata *)0xff55)
  36. #define PWM6T1          (*(unsigned int volatile xdata *)0xff60)
  37. #define PWM6T2          (*(unsigned int volatile xdata *)0xff62)
  38. #define PWM6CR          (*(unsigned char volatile xdata *)0xff64)
  39. #define PWM6HLD         (*(unsigned char volatile xdata *)0xff65)
  40. #define PWM7T1          (*(unsigned int volatile xdata *)0xff70)
  41. #define PWM7T2          (*(unsigned int volatile xdata *)0xff72)
  42. #define PWM7CR          (*(unsigned char volatile xdata *)0xff74)
  43. #define PWM7HLD         (*(unsigned char volatile xdata *)0xff75)

  44. void main()
  45. {
  46.     P_SW2 = 0x80;  //將P_SW2寄存器的最高位EAXFR置1,訪問XSFR
  47.     PWMCKS = 0x00;                              // PWM時鐘為系統(tǒng)時鐘
  48.     PWMC = 0x1000;                              //設(shè)置PWM周期為1000H個PWM時鐘
  49.     PWM0T1= 0x0100;                             //在計數(shù)值為100H地方輸出低電平
  50.     PWM0T2= 0x0500;                             //在計數(shù)值為500H地方輸出高電平
  51.     PWM0CR= 0x80;                               //使能PWM0輸出
  52.     P_SW2 = 0x00;

  53.     PWMCR = 0x80;                               //啟動PWM模塊

  54.     while (1);
  55. }

復(fù)制代碼




回復(fù)

使用道具 舉報

ID:311846 發(fā)表于 2020-7-17 09:33 | 顯示全部樓層
你認(rèn)真看下這個表的下面文檔,你會發(fā)現(xiàn)驚喜,
回復(fù)

使用道具 舉報

ID:718037 發(fā)表于 2020-7-17 10:35 | 顯示全部樓層
謝了,昨天看了后面才發(fā)現(xiàn)
回復(fù)

使用道具 舉報

ID:718037 發(fā)表于 2020-7-17 10:39 | 顯示全部樓層
angmall 發(fā)表于 2020-7-16 22:07
P_SW2寄存器的最高位EAXFR 是擴(kuò)展SFR訪問控制使能
如下特殊功能寄存器位于擴(kuò)展 RAM 區(qū)域 訪問這些寄存器, ...

謝謝,昨天看了后面才發(fā)現(xiàn)
回復(fù)

使用道具 舉報

ID:883988 發(fā)表于 2021-3-13 10:55 | 顯示全部樓層
這個操作
一言難盡!
我看IIC的時候剛好把這個漏過去了,結(jié)果硬件IIC怎么也通訊不成功,看了芯片資料給的例程后發(fā)現(xiàn)P_SW2的第一位被置一了,然后再過來查。前前后后搞了好久好久
回復(fù)

使用道具 舉報

ID:890869 發(fā)表于 2021-9-4 00:50 | 顯示全部樓層
小胸姑娘 發(fā)表于 2021-3-13 10:55
這個操作
一言難盡!
我看IIC的時候剛好把這個漏過去了,結(jié)果硬件IIC怎么也通訊不成功,看了芯片資料給的 ...

對,我也是這里,卡了好幾天
回復(fù)

使用道具 舉報

ID:911455 發(fā)表于 2023-5-15 16:38 | 顯示全部樓層
他沒有講這位置1后,耽誤訪問data里的內(nèi)容不
回復(fù)

使用道具 舉報

ID:206581 發(fā)表于 2023-5-15 21:57 | 顯示全部樓層
我也是沒注意到,搞了好久
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2023-5-16 08:39 | 顯示全部樓層
innere 發(fā)表于 2023-5-15 16:38
他沒有講這位置1后,耽誤訪問data里的內(nèi)容不

8.2.8 擴(kuò)展SFR 使能寄存器EAXFR 的使用說明
STC8G/8H 的擴(kuò)展SFR 地址范圍為0FA00H~0FFFFH,如需訪問XFR 區(qū)域的擴(kuò)展SFR,需要先將EAXFR
(P_SW2.7)置1,并使用MOVX A,@DPTR 和MOVX @DPTR,A 這兩條指令進(jìn)行讀寫操作。XFR 的地址范
圍與外部擴(kuò)展RAM 地址的0FA00H~0FFFFH 區(qū)域是重疊的。
1、若用戶不使用外部擴(kuò)展RAM 或者外部擴(kuò)展RAM 的最大地址不超過0FA00H
(例如只外擴(kuò)32K RAM),這種情況下不會有不同區(qū)域的訪問地址沖突,可以在上電系統(tǒng)初始化時將EAXFR
寄存器設(shè)置為1(例如:P_SW2 |= 0x80;),后續(xù)一直保持為1 不用再修改,
即可正常訪問XFR 區(qū)域。
2、若用戶有外擴(kuò)64K 的擴(kuò)展RAM,則在訪問XFR 和外部擴(kuò)展RAM 時需要注意:
訪問XFR 時需要將EAXFR 寄存器位設(shè)置為1;
訪問地址范圍在0FA00H~0FFFFH 的外部擴(kuò)展RAM 時需要將EAXFR 設(shè)置為0;
訪問地址范圍在0000H~0F9FFH 的外部擴(kuò)展RAM 時,與EAXFR 設(shè)置的值無關(guān)
EAXFR.jpg





回復(fù)

使用道具 舉報

ID:879348 發(fā)表于 2023-5-16 11:52 | 顯示全部樓層
搞的太復(fù)雜了,這就是51架構(gòu)的局限性
回復(fù)

使用道具 舉報

ID:1034262 發(fā)表于 2023-5-16 12:18 | 顯示全部樓層
用于訪問擴(kuò)展的特殊功能寄存器,因?yàn)?1的架構(gòu)問題,常規(guī)的特殊功能寄存器地址(128字節(jié))遠(yuǎn)遠(yuǎn)不夠,所以STC增加的幾百個特殊功能寄存器都放在xdata地址空間,為了避免與xdata內(nèi)存沖突,所以用這一位來允許/禁止擴(kuò)展的特殊功能寄存器訪問。
如果沒有外接xdata芯片,或外接的沒到64K,或者到64K,最后幾百個字節(jié)不用,則程序已開始設(shè)置該位為1,一直不用清除。
回復(fù)

使用道具 舉報

ID:106977 發(fā)表于 2025-1-23 21:28 | 顯示全部樓層
STC為了發(fā)展51芯片擴(kuò)展了很多東西!又必須考慮兼容過去和能夠在Keil中編程和調(diào)試,有些設(shè)置就好像是“打補(bǔ)丁”。其實(shí)STC的手冊很長,也敘述的很清楚。只是許多人缺少認(rèn)真看書的習(xí)慣!
回復(fù)

使用道具 舉報

ID:1034262 發(fā)表于 2025-1-24 11:01 | 顯示全部樓層
允許訪問擴(kuò)展在XDATA區(qū)的SFR(特殊功能寄存器)。51架構(gòu)直接訪問的寄存器只有128字節(jié),而STC公司的MCU外設(shè)擴(kuò)展了幾百個寄存器,只好放在XDATA區(qū)。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表