找回密码
 立即注册
查看: 54|回复: 0

STC32G12K128汇编访问拓展SFR(特殊功能寄存器)

[复制链接]
已绑定手机

2

主题

6

回帖

224

积分

中级会员

积分
224
发表于 7 天前 | 显示全部楼层 |阅读模式

说明:主要是我之前发其它博客的文章总结被平台强制收费观看了有点恶心,在这里重新发吧

前言:

我之前在论坛上发的一个问题:直接用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=13973

这里就涉及到内部的一些架构问题了,C51内核和C251内核还是有点差别的。从芯片手册可以看到访问拓展SFR的用法例子:

image.png

之前到这里就是搞不懂为什么会用WR6和WR4的了,手册没提及。后面去找TSC80251手册资料才看到。这里要解决的疑惑:

1、这里的WR6、WR4寄存器是什么?

image.png

从TSC80251手册能看到,32位的DR4寄存器由两个16位的寄存器WR4和WR6组成,而16位的WR6寄存器由两个8位的寄存器R6和R7组成。每一组的寄存器中一个发生变化,则这一组的寄存器都按组成方式变化。P3PU的地址为7EFE13H,已超出8位,自然会报错。所以要借助32位的寄存器访问,并且SFR只能使用间接寻址方式访问:(建议细看TSC80251手册P18到P20的内容,并且同步看一下STC32G12K128芯片手册存储器那里的图片,然后对比看看)

image.png

P29的:

image.png

2、WORD0是?

#WORD0 CLKSEL其实就是相当于对立即数CLKSEL取低16位,WORD1就是高16位。和HIGH和LOW的用法差不多,只不过这两个是8位的。

image.png

从keil帮助文档的汇编器说明那里也能看到WORDx的说明。在ide主界面的help选择第二个open books window,左边弹出后双击uVision User's Guide Selection,之后就选择:
A251 Assembler User's Guide——Writing Assembly Programs——Expressions and Operators——Operators——WORDx。
然后你就能看到关于WORD0和WORD2的说明还有图表了。(懒得找了用原来的)

image.png

3、R11是?

R11就是累加器A,但是R11可以作为SFR访问。

image.png

4、例子解释(到这里应该都能大概理解了吧)

; 第一步,初始化累加器A为00H(清零操作)

MOV A,#00H ; 将立即数00H加载到累加器A中,A = 00H

MOV WR6,#WORD0 CLKSEL ; 第二步,将要写入的寄存器 CLKSEL 地址的低16位写入16位寄存器 WR6

MOV WR4,#WORD2 CLKSEL ; 第三步,将要写入的寄存器 CLKSEL 地址的高16位写入16位寄存器 WR4

; 第四步,将R11(累加器A)的值00H写入 CLKSEL 寄存器

**MOV @DR4,R11 ;**通过数据寄存器DR4(WR6+WR4)间接寻址,将R11(即累加器A)的值写入CLKSEL寄存器

之前自己的总结文章笔记保存这里吧附件upload 附件:STC32G12K128汇编访问拓展SFR(特殊功能寄存器).docx

参考:

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3616

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-7 10:37 , Processed in 0.066837 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表