找回密码
 立即注册
查看: 954|回复: 7

STC32F12K54汇编问题

[复制链接]

1

主题

0

回帖

5

积分

新手上路

积分
5
发表于 2023-12-29 09:55:51 | 显示全部楼层 |阅读模式
STC32F12K54-QFP48芯片,编译器KEIL-C251 V5.60,编译器配置截图,编译产生代码量30K左右,设计用到XDATA区间[0000-07FFH],目前碰到下面几个问题,麻烦看下怎么解决,谢谢!

截图202312290924596181.jpg 截图202312290926042742.jpg 截图202312290927016473.jpg

问题1):汇编代码头部包含头文件"STC32G.INC",使用下面的代码,编译时会出"warning A88: VALUE HAS BEEN TRUNCATED TO 16 BITS";

                   ORL   P_SW2,#80H
                   MOV   DPTR,#P0PU
                   MOV   A,#0FFH
                   MOVX  @DPTR,A
                   ANL   P_SW2,#7FH


             查看INC文件,把"P0PU  EQU  07EFE10H",改"P0PU  EQU  0FE10H",编译不报警,好像也不影响运行,(((想问下,这样改会不会影响什么?)))


问题2):堆栈问题

            手册89页位置,有个例子代码,通过MOV  SPX,#0100H设置堆栈指针初始值,但手册上面,查不到SPX这个寄存器的说明,只说堆栈在EDATA区域,能说下堆栈指针怎么使用吗?(汇编方式)
截图202312290935356998.jpg

            目前,采用“MOV SP,#0C1H",通过KEIL-DEBUG查看SPX=00C1H,此时代码上面,调用子程序初始化[0000-07FFH]区间XRAM,子程序返回时,会造成错乱(查看DEBUG信息,发现SPX变成0000),
此时,改成初始化[0100-07FFH],则DEBUG及实际上板都能正常,
           (((问下,手册不是说堆栈在EDATA区间,XRAM与EDATA是物理分开的吗,现在用MOVX @DPTR,A初始化这些[0000-07FFH]为什么会造成在EDATA的堆栈被覆盖?)))
            (((有没有什么代码,可以把EDATA与XRAM物理隔开?)))

以下2种方式测试都会错乱:
1)把”MOV SP,#0C1H"换成"MOV SPX,#1000H",在初始化[0000-07FFH]时也会错乱,
2)采用"MOV SP,#0C1H",改初始化[0100-08FFH],也会错乱;

截图202312290926474979.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-12-29 12:44:38 | 显示全部楼层
我的这个帖子或许对你有帮助
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3615
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2023-12-29 14:17:41 | 显示全部楼层
MOV   DPTR,#P0PU改为MOV   DPTR,#WORD0 P0PU就不会报警了,SPX是C251的内置寄存器,属于寄存器DR60的别名,程序中也可用DR60代替
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2023-12-29 14:20:45 | 显示全部楼层
不过只用DPTR访问不了XFR寄存器,还要结合DPXL才行,都用STC32了,肯定要使用DR0-DR28寄存器来访问XFR了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-12-29 14:43:40 | 显示全部楼层
问题1:扩展寄存器设置可参考STC32G实验箱例程包里面的汇编例子,如:
  1.     ORL     P_SW2,#080H    ;使能访问XFR
  2.     MOV     WR6, #WORD0 P0PU
  3.     MOV     WR4, #WORD2 P0PU
  4.     MOV     A, #0FFH
  5.     MOV     @DR4, R11
复制代码

问题2:SPX是扩展堆栈指针
截图202312291442572699.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:515
  • 最近打卡:2025-05-03 05:51:43

24

主题

515

回帖

994

积分

荣誉版主

积分
994
发表于 2023-12-29 15:50:44 | 显示全部楼层
楼上的内容应该写入STC32的DATASHEET中。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-05-03 07:54:16

5

主题

296

回帖

2068

积分

金牌会员

积分
2068
发表于 2023-12-29 15:58:07 | 显示全部楼层
8051我还可以,但是c251有点复杂了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:515
  • 最近打卡:2025-05-03 05:51:43

24

主题

515

回帖

994

积分

荣誉版主

积分
994
发表于 2023-12-29 16:35:46 | 显示全部楼层
弄明白5楼的图,251汇编还是很好学的。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:09 , Processed in 0.140712 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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