hfei1980 发表于 2020-10-3 13:46:13

STC8H的P_SW2最高位置允许操作扩展SFR后要清零吗

STC8H的P_SW2最高位置允许操作扩展SFR后要清零吗?P_SW2|=0X80;操作扩展区SFR后,操作非扩展SFR需要P_SW2&=0x7f;吗?

小李非刀 发表于 2020-10-5 15:45:53

我将P_SW2最高位写1后,不清0,一样可以正常访问xdata和xsfr,只要两者地址不同即可。

hfei1980 发表于 2020-10-6 17:13:10

小李非刀 发表于 2020-10-5 15:45
我将P_SW2最高位写1后,不清0,一样可以正常访问xdata和xsfr,只要两者地址不同即可。 ...

嗯,谢谢,后来仔细看了官方例程也有不清零的例子。

ax6808 发表于 2022-3-5 18:48:19

本帖最后由 ax6808 于 2022-3-5 18:51 编辑

今天我刚好在优化代码,也想到这个事情。最后果断把P_SW2&=0x7f干掉了!关键前面用了P_SW2“|=”0x80只影响B7,就对其他没影响的。
P_SW1复位值 nn00,0000
P_SW2复位值 0x00,0000
位地址与符号
                                                         B7B6          B5B4            B3 B2               B1         B0             复位值
P_SW1 外设端口切换寄存器 1 A2H   S1_S   CCP_S    SPI_S            0            -               nn00,000x
P_SW2 外设端口切换寄存器 2 BAHEAXFR -   I2C_S   CMPO_S S4_S   S3_S   S2_S            0x00,0000

zhuyi25762 发表于 2022-3-15 22:08:13

我测试 I2C和PWM,如果清零了,这个单片机会不断硬件在复位,不断在重启,不知道 原因 ,,关掉就好了

ax6808 发表于 2022-12-15 17:21:20

本帖最后由 ax6808 于 2022-12-15 17:23 编辑

       昨天刚好碰到这个问题:STC8用内部上拉4.1K替换外部上拉时,效果不同(理论等同外部上拉电阻)。
      目的:验证P32 int0下降沿或边沿触发+内部上拉电阻,实现最简长短按功能;
      方案:P32只接个按键到地+使能内部上拉电阻+设置INT0双边沿中断+20msT0不重载消抖+电平判断上、下沿。后面+适当延时检测电平判断长短按。
      问题:1.按键未动,但每次开机时, int0都先触发短按功能+1次,导致初始状态不对;
               2.加上外接上拉电阻后,结果正常! 这个就奇怪了:难道内部上拉未设置成功?这就涉及到设置:P_SW2 |= 0x80; P3PU=0X04;   及清零问题了.
      措施:1.暂时修正初始状态,短按初值-1次后:正常了;
                2.再查最新手册看看究竟哪里的问题;

   STC8XXX手册最新版:20221114:增加了这个内容:   
7.2.8 扩展 SFR 使能寄存器 EAXFR 的使用说明
   STC8G/8H 的扩展 SFR 地址范围为 0FA00H~0FFFFH,如需访问 XFR 区域的扩展 SFR,需要先将 EAXFR( P_SW2.7)置 1,
   并使用 MOVX A,@DPTR 和 MOVX @DPTR,A 这两条指令进行读写操作。 XFR 的地址范围与外部扩展 RAM 地址的 0FA00H~0FFFFH 区域是重叠的。
   1、若用户不使用外部扩展RAM或者外部扩展RAM的最大地址不超过0FA00H(例如只外扩32KRAM),这种情况下不会有不同区域的访问地址冲突,可以在上电系统初始化时将 EAXFR
      寄存器设置为1(例如:P_SW2 |= 0x80;),后续一直保持为1不用再修改,即可正常访问 XFR 区域。
   2、若用户有外扩 64K 的扩展 RAM,则在访问 XFR 和外部扩展 RAM 时需要注意:
      访问 XFR 时需要将 EAXFR 寄存器位设置为 1;
      访问地址范围在 0FA00H~0FFFFH 的外部扩展 RAM 时需要将 EAXFR 设置为 0;
      访问地址范围在 0000H~0F9FFH 的外部扩展 RAM 时,与 EAXFR 设置的值无关

ax6808 发表于 2022-12-16 13:56:59

ax6808 发表于 2022-12-15 17:21
昨天刚好碰到这个问题:STC8用内部上拉4.1K替换外部上拉时,效果不同(理论等同外部上拉电阻)。
   ...
(引用自6楼)

经验证:内部上拉电阻已生效!(接个LED亮度变亮)     
        暂无需清零。只是用内上拉和外部上拉的开机状态就是不同!反复各种代码验证亦如此,暂时百思不得其解。好玩!又可消磨一下子时间了

ax6808 发表于 2023-1-2 14:40:50

ax6808 发表于 2022-12-15 17:21
昨天刚好碰到这个问题:STC8用内部上拉4.1K替换外部上拉时,效果不同(理论等同外部上拉电阻)。
   ...
(引用自6楼)

最终搞清楚了!就是开中断前 要先清0一下中断标志位 就好了! 如IE0=0
页: [1]
查看完整版本: STC8H的P_SW2最高位置允许操作扩展SFR后要清零吗