找回密码
 立即注册
查看: 328|回复: 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
回复 送花

使用道具 举报

该用户从未签到

61

主题

626

回帖

1万

积分

荣誉版主

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

使用道具 举报

该用户从未签到

1

主题

113

回帖

627

积分

高级会员

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

使用道具 举报

该用户从未签到

1

主题

113

回帖

627

积分

高级会员

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

使用道具 举报

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4029

    积分

    论坛元老

    积分
    4029
    发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 157 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1301

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 124 天

    [LV.7]常住居民III

    4

    主题

    235

    回帖

    856

    积分

    高级会员

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

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 157 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1301

    积分

    荣誉版主

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 17:27 , Processed in 0.066259 second(s), 59 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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