找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

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

下載.png
回復(fù)

使用道具 舉報(bào)

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


EAXFR-STC8A.jpg


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

  3. //測(cè)試工作頻率為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,訪問(wèn)XSFR
  47.     PWMCKS = 0x00;                              // PWM時(shí)鐘為系統(tǒng)時(shí)鐘
  48.     PWMC = 0x1000;                              //設(shè)置PWM周期為1000H個(gè)PWM時(shí)鐘
  49.     PWM0T1= 0x0100;                             //在計(jì)數(shù)值為100H地方輸出低電平
  50.     PWM0T2= 0x0500;                             //在計(jì)數(shù)值為500H地方輸出高電平
  51.     PWM0CR= 0x80;                               //使能PWM0輸出
  52.     P_SW2 = 0x00;

  53.     PWMCR = 0x80;                               //啟動(dòng)PWM模塊

  54.     while (1);
  55. }

復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

8.2.8 擴(kuò)展SFR 使能寄存器EAXFR 的使用說(shuō)明
STC8G/8H 的擴(kuò)展SFR 地址范圍為0FA00H~0FFFFH,如需訪問(wèn)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 的最大地址不超過(guò)0FA00H
(例如只外擴(kuò)32K RAM),這種情況下不會(huì)有不同區(qū)域的訪問(wèn)地址沖突,可以在上電系統(tǒng)初始化時(shí)將EAXFR
寄存器設(shè)置為1(例如:P_SW2 |= 0x80;),后續(xù)一直保持為1 不用再修改,
即可正常訪問(wèn)XFR 區(qū)域。
2、若用戶有外擴(kuò)64K 的擴(kuò)展RAM,則在訪問(wèn)XFR 和外部擴(kuò)展RAM 時(shí)需要注意:
訪問(wèn)XFR 時(shí)需要將EAXFR 寄存器位設(shè)置為1;
訪問(wèn)地址范圍在0FA00H~0FFFFH 的外部擴(kuò)展RAM 時(shí)需要將EAXFR 設(shè)置為0;
訪問(wèn)地址范圍在0000H~0F9FFH 的外部擴(kuò)展RAM 時(shí),與EAXFR 設(shè)置的值無(wú)關(guān)
EAXFR.jpg





回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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