32G12K128——汇编指令MOV给P3PU寄存器赋值报错(访问拓展SFR)
问题:直接用汇编mov给P3PU寄存器赋值报错。新手上路STC32G12K128 系列,在用汇编配置P30端口上拉的时候碰到一些问题。刚开始直接用MOV A,#00000001B和MOV P3PU,A发现报错mission1.asm(22): warning A52: VALUE HAS BEEN TRUNCATED TO 8 BITS,说是值已被截断为 8 位。网上查阅一番在论坛上的另一个帖子找到类似问题:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5944。
再查阅芯片手册,P3PU寄存器地址为7EFE13H,属于扩展 SFR,在手册:10.5 扩展特殊功能寄存器列表(XFR:0x7EFE00-0x7EFEFF)可找到,附带有例子。
下列特殊功能寄存器为扩展 SFR(XFR),逻辑地址位于 XDATA 区域,访问前需要将 P_SW2 寄存器的最高位(EAXFR)置 1,然后使用 MOV @DRk, Rm 和 MOV Rm, @DRk 指令进行访问,例如:
MOV A,#00H
MOV WR6,#WORD0 CLKSEL ; CLKSEL 可换为需要访问的寄存器
MOV WR4,#WORD2 CLKSEL
MOV @DR4,R11
和
MOV WR6,#WORD0 CLKSEL ; CLKSEL 可换为需要访问的寄存器
MOV WR4,#WORD2 CLKSEL
MOV R11,@DR4
到目前为止我还没有搞懂WR6、WORD0、DR4这些是从哪里蹦出来的,芯片手册没讲,难受。上面的帖子的楼5的图片挺好,不知道是从哪里找到的,我在芯片手册没找到。
我自己最后给P30口上拉的汇编代码:(话说是这么操作吗?不太确定,代码效果我还没看,迟点回来)
ORL P_SW2,#80H ;相或操作,将最高位置1,使能访问XFR
MOV WR6,#WORD0 P3PU
MOV WR4,#WORD2 P3PU
MOV A,#00000001B
MOV @DR4,R11PS:WR这些寄存器上网搜80251手册就有了,从TSC80251手册的:Figure 3.5. Register File in Byte, Word, and Dword Register Views那里,第23页。TSC80251,TSC80251 pdf,TSC80251中文资料,TSC80251引脚图,TSC80251电路_datasheet网 (elecfans.com)
我的改用引脚下拉的查看按键P33所在的情况,可以的。在芯片手册的IO口那里有:
关于 I/O 的注意事项:
1、 P3.0 和 P3.1 口上电后的状态为弱上拉/准双向口模式
2、 除 P3.0 和 P3.1 外,其余所有 IO 口上电后的状态均为高阻输入状态,用户在使用 IO 口
前必须先设置 IO 口模式。如果按键刚好是P30、P31口那么不用配置相关输入上下拉也效果也正常。我的测试代码:
$INCLUDE (STC32G.INC);引用头文件
ORG 0000H
JMP MAIN
MAIN:
LCALL GPIO_Init
LJMP MAIN_LOOP
GPIO_Init:
MOV A,#00000001B
MOV P0M0,A
MOV A,#00000000B
MOV P0M1,A ;配置P0.0口推挽输出
;MOV A,#00000000B
;MOV P3M0,A
;MOV A,#00000001B
;MOV P3M1,A ;配置P3.0口高阻输入
MOV A,#00000000B
MOV P3M0,A
MOV A,#00001000B
MOV P3M1,A ;配置P3.3口高阻输入
ORL P_SW2,#80H ;相或操作,将最高位置1,使能访问XFR
MOV WR6,#WORD0 P3PU
MOV WR4,#WORD2 P3PU
MOV A,#00001000B ;P33口上拉
MOV @DR4,R11
;MOV WR6,#WORD0 P3PD
;MOV WR4,#WORD2 P3PD
;MOV A,#00001000B ;P33口下拉
;MOV @DR4,R11
RET
MAIN_LOOP:
JNB P3.3, BUTTON_PRESSED ; 如果P3.0为0,跳转
SETB P0.0 ; 对P0.0置1
SJMP MAIN_LOOP
BUTTON_PRESSED:
CLR P0.0
SJMP MAIN_LOOP
END 具体芯片手册没找到的寄存器可以去TSC80251手册找,STC32G12K128用的架构是基于80251架构弄的。找到一篇牵涉到251架构寄存器比较能看懂的:STC32G FreeRTOS入门(11):现场保护与恢复机制—FreeRTOS与C251中断异同 - uCOS/FreeRTOS,GUI-uGFX/U8g2, 文件系统, 国产RTOS, 实时操作系统 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com) 另外的一些总结放博客了:https://mp.csdn.net/mp_blog/creation/editor/145961875
页:
[1]