找回密码
 立即注册
楼主: 杨***

STC32G/F系列单片机是32位单片机吗?

[复制链接]
  • TA的每日心情
    开心
    16 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    37

    主题

    863

    回帖

    3922

    积分

    荣誉版主

    积分
    3922
    发表于 2023-2-12 14:24:22 | 显示全部楼层
    倒数 2: 间接寻址, ARM指令偏向于 间接寻址, 这在组成大系统时, 占极大的优势, 比如, 实时操作系统, 多任务的切换, 用到的堆栈保护, 程序工作量低. 代码量少.  

           在 ARM中, 除了一些必须的 寄存器, 其他变量都在 RAM中, 通过高效的间接寻址方式, 执行程序.

           而 251中, 寄存器过多, 如全部使用, 像在  实时操作系统 中, 多任务的切换, 用到的堆栈保护, 程序工作量太大. 程序效率低.  

           所以 Keil公司, 就聪明的 在程序中, 仅使用了 DR0-DR8(3个32位寄存器), 而后面的 DR12-DR28(5个32位寄存器), 都没有使用,

           这样, 在执行  实时操作系统 中, 多任务的切换, 用到的堆栈保护, 程序工作量不是太大. 程序效率可行.

            Keil公司,  仅在后来推出的 64位双精度浮点运算时, 使用了后面的 DR12-DR28(5个32位寄存器), 该特定用法没有普及性.

           251的间接寻址, 指令太单一, 功能弱 (和 ARM相比), 当然, 如和 51相比, 一个天一个地, 功能强的实在太多了.

    该用户从未签到

    550

    主题

    9219

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2023-2-12 14:32:46 | 显示全部楼层
    不要换概念
    讲 M0, 不要讲 ARM, STC有M33这个是打M3的,降维打击 !
    STC32F12K64-72MHz-LQFP48/32/TSSOP20 这个是代表STC8051世界打M0的
    不要将 M0 上升到 ARM 的高度 ! 英国在发展,中国也在发展 !
    STC8051世界 对标 M0的是 STC32F12K64-72MHz-LQFP48/32/TSSOP20 ,STC32G
    STC33是对标M3的
  • TA的每日心情
    开心
    16 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    37

    主题

    863

    回帖

    3922

    积分

    荣誉版主

    积分
    3922
    发表于 2023-2-12 14:34:14 | 显示全部楼层
    倒数 1: 这一项没法比, 就算 ARM 有 Bit-Band 功能, 但编译后代码长度长, 哪有 号称世界上, 也是 唯一的, 内含 1位机处理器 的 51强大?

           251 在对 I/O口操作, 或对位变量 赋值, 变更, 指令简单执行迅速,  无论是编译后的代码长度, 还是执行效率, 是目前世界上的所有单片机中, 最最优秀的,
  • TA的每日心情
    开心
    16 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    37

    主题

    863

    回帖

    3922

    积分

    荣誉版主

    积分
    3922
    发表于 2023-2-12 14:36:58 | 显示全部楼层
    神农鼎 发表于 2023-2-12 14:32
    不要换概念
    讲 M0, 不要讲 ARM, STC有M33这个是打M3的,降维打击 !
    STC32F12K64-72MHz-LQFP48/32/TSSOP20  ...

    我看了讨论稿, STC33是对标M4的吧

    该用户从未签到

    550

    主题

    9219

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2023-2-12 14:38:30 | 显示全部楼层
    跟 M0 比,不要跟 ARM 比,STC有 M33, 跟ARM是合作伙伴,但 STC 看不上 M0,
    用 STC32F12K64/STC32G12K128  敲打下 某些国人崇洋媚外的M0 而已
  • TA的每日心情
    开心
    16 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    37

    主题

    863

    回帖

    3922

    积分

    荣誉版主

    积分
    3922
    发表于 2023-2-12 14:38:35 | 显示全部楼层
    用 STC33(m4) 打击 M3, 肯定完胜 :lol

    该用户从未签到

    550

    主题

    9219

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2023-2-12 14:41:31 | 显示全部楼层
    田忌赛马,谁让咱是学中文的

    用STC ,以前大部分客户主要是用STC的高稳定性,不是比啥速度,比速度用 并行的FPGA 更合适,
    现在用 STC, 除了情怀,还有就是用 STC8H/STC32G的 高精准12位ADC, 不是用啥 CPU
    ===用 STC 是情怀,是 STC 在默默的陪你长大,陪你一起慢慢变老后,又激情燃烧到32位8051



    回复 支持 1 反对 0 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    863

    回帖

    3922

    积分

    荣誉版主

    积分
    3922
    发表于 2023-2-12 14:46:03 | 显示全部楼层
    ===你比较下16位除,32位除,位操作,就知道 M0就是个大忽悠,STC32G12K128对的起STC8051世界

    这些是 251 比 M0 强的地方.

    反过来 你对比一下 带进位 加减法, 移位操作, 间接寻址, M0  比 251 要强.

    总之, M0 和 251 性能相当, 各有千秋, 我个人偏爱 251.

    251 和 M3 没法比, M3的 性能要强大多了.

    该用户从未签到

    550

    主题

    9219

    回帖

    1万

    积分

    管理员

    积分
    13928
    发表于 2023-2-12 14:52:24 | 显示全部楼层
    STC的M33是买断,钱都给够了!
    不用白不用,你要 M3, 我们没有,也看不上,我们给你 STC33-M33
  • TA的每日心情
    开心
    16 小时前
  • 签到天数: 130 天

    [LV.7]常住居民III

    37

    主题

    863

    回帖

    3922

    积分

    荣誉版主

    积分
    3922
    发表于 2023-2-12 15:05:24 | 显示全部楼层
    本帖最后由 LAOXU 于 2023-2-12 15:07 编辑

    至于 MDU32库, 除了64位定点整数运算及数制转换, 还顺带加了 int_to_bcd, long_to_bcd, bcd_to_int,  bcd_to_long.


    请同学们帮忙看一下, 基本的库程序功能, 还有什么可以加入



    /*--------------------------------------------------------------------------
    DLONG.H

    Prototypes for mathematic functions for C251 Version 4.
    Copyright (c) 1995-2004 Keil Elektronik GmbH and Keil Software, Inc.
    All rights reserved.
    --------------------------------------------------------------------------*/

    #pragma SAVE
    #pragma PARM251

    // 双长字整数(64位),使用说明:
    // 数据格式, 双长字HEX码: 分无符号整型数(原码)和有符号整型数(补码); 双长字BCD码: 无符号整型数(原码)
    //                                          三长字BCD码: 分无符号整型数(原码)和有符号整型数(原码+最高位为符号位)
    // 双长字整型数,分无符号整型数和有符号整型, 存储格式: 高位长字在先, 低位长字在后
    // 双长字型BCD码无符号整型数, 存储格式: 高位长字在先, 低位长字在后
    // 三长字BCD码整型数, 带有符号位(原码), 存储格式: 高位长字在先, 中位长字在后, 最后是扩展的最高位长字(符号位在最高Bit)
    // 四长字商和余数(指针先指向商,后紧跟余数), 存储格式: 商:高位长字在先, 低位长字在后, 后面紧跟余数:高位长字在先, 低位长字在后
    extern void  add64 (long aH, long aL, long bH, long bL, long far *cp);
    extern void  sub64 (long aH, long aL, long bH, long bL, long far *cp);
    extern void  mul64 (long aH, long aL, long bH, long bL, long far *cp);
      // c=1,返回商; c=2,返回余数; c=3,返回商 和 余数(指针先指向商,后紧跟余数);
    extern void sdiv64 (long aH, long aL, long bH, long bL, char c, long far *cp);
      // c=1,返回商; c=2,返回余数; c=3,返回商 和 余数(指针先指向商,后紧跟余数); c=0,堆栈返回商 和 余数(汇编专用);
    extern void udiv64 (unsigned long aH, unsigned long aL, unsigned long bH, unsigned long bL, char c, long far *cp);  
      // c=0,输出双长整型BCD; c=1,输出三长整型无符号BCD; c=2,输出三长整型有符号BCD;
            // c=3,输出三长整型有符号BCD(最高长字为补码,仅供调试时,显示监控变量);
    extern void hex_bcd64 (unsigned long aH, unsigned long aL, char c, long far *cp);  
    extern void bcd_hex64 (unsigned long aH, unsigned long aL, long far *cp);    // 双长字无符号整型数(BCD),转双长字整型数(HEX)
    extern void AtoL64 (char far *s, long far *cp);  
      // c=0,输入HEX; c=1,输入双长整型BCD;  c=2,输入三长整型BCD;
    extern void uLtoA64 (unsigned long aH, unsigned long aL, char c, long far *cp);  // 指针返回BCD的 ASCII码串
      // c=0,输入HEX; c=1,输入双长整型BCD;  c=2,输入三长整型BCD;
    extern void sLtoA64 (unsigned long aH, unsigned long aL, char c, long far *cp);  // 指针返回BCD的 ASCII码串
      // c=1,返回补码; c=0,不返回(汇编专用);
    extern void neg64 (unsigned long aH, unsigned long aL, char c, long far *cp);  

    extern unsigned int  int_bcd16 (unsigned int a, unsigned char b);    // 溢出位存ACC,可紧跟一条指令读出最高位ACC(例如: Ca=ACC;)
    extern unsigned long long_bcd32 (unsigned long a, unsigned char b);  // 溢出位存ACC,可紧跟一条指令读出最高位ACC(例如: Ca=ACC;)
    extern unsigned int  bcd_int16 (unsigned int a);
    extern unsigned long bcd_long32 (unsigned long a);  

    #define  LADD64(a,b,c)        do{ add64 (a##.##h, a##.##l, b##.##h, b##.##l, (long far *)&##c##.##h); }while(0)                          // 返回和
    #define  LSUB64(a,b,c)        do{ sub64 (a##.##h, a##.##l, b##.##h, b##.##l, (long far *)&##c##.##h); }while(0)                          // 返回差
    #define  LMUL64(a,b,c)        do{ mul64 (a##.##h, a##.##l, b##.##h, b##.##l, (long far *)&##c##.##h); }while(0)                          // 返回积
    #define ULDIV64(a,b,c)        do{ udiv64 (a##.##h, a##.##l, b##.##h, b##.##l, 1, (long far *)&##c##.##h); }while(0)          // 返回商 和 余数(指针先指向商,后紧跟余数);
    #define SLDIV64(a,b,c)        do{ sdiv64 (a##.##h, a##.##l, b##.##h, b##.##l, 1, (long far *)&##c##.##h); }while(0)                // 返回商 和 余数(有符号数);
    #define SLMOD64(a,b,c)        do{ sdiv64 (a##.##h, a##.##l, b##.##h, b##.##l, 2, (long far *)&##c##.##h); }while(0)          // 返回商 和 余数(指针先指向商,后紧跟余数);
    #define ULMOD64(a,b,c)        do{ udiv64 (a##.##h, a##.##l, b##.##h, b##.##l, 2, (long far *)&##c##.##h); }while(0)          // 返回商 和 余数(指针先指向商,后紧跟余数);
    #define SLDIVm64(a,b,c)       do{ sdiv64 (a##.##h, a##.##l, b##.##h, b##.##l, 3, (long far *)&##c##.##h); }while(0)          // 返回商 和 余数(指针先指向商,后紧跟余数);
    #define ULDIVm64(a,b,c)       do{ udiv64 (a##.##h, a##.##l, b##.##h, b##.##l, 3, (long far *)&##c##.##h); }while(0)          // 返回商 和 余数(指针先指向商,后紧跟余数);
    #define  HEXtoBCD64(a,c)      do{ hex_bcd64 (a##.##h, a##.##l, 0, (long far *)&##c##.##h); }while(0)                                        // 返回双长字无符号整型数(BCD)
    #define UHEXtoBCD64H(a,c)     do{ hex_bcd64 (a##.##h, a##.##l, 1, (long far *)&##c##.##h); }while(0)                                        // 返回三长字无符号整型数(BCD);
    #define SHEXtoBCD64H(a,c)     do{ hex_bcd64 (a##.##h, a##.##l, 2, (long far *)&##c##.##h); }while(0)                                        // 返回三长字有符号整型数(BCD);
    #define WATCHtoUBCD64H(a,c)       UHEXtoBCD64H(a,c)                                                                                                    // 返回三长字无符号整型数(BCD,最高长字为原码,可供调试时,显示监控变量);
    #define WATCHtoSBCD64H(a,c)   do{ hex_bcd64 (a##.##h, a##.##l, 3, (long far *)&##c##.##h); }while(0)                                        // 返回三长字有符号整型数(BCD,最高长字为补码,仅供调试时,显示监控变量);
    #define  BCDtoHEX64(a,c)      do{ bcd_hex64 (a##.##h, a##.##l, 0, (long far *)&##c##.##h); }while(0)                                  // 双长字整型数(BCD),转双长字整型数(HEX)
    #define  BCDHtoHEX64(a,c)     do{ bcd_hex64 (a##.##h, a##.##l, 1, (long far *)&##c##.##h); }while(0)                                  // 三长字整型数(BCD),转双长字整型数(HEX)
    #define  ASCIItoL64(a,c)      do{ AtoL64 ((char far *)a, (long far *)&##c##.##h); }while(0)                                                                                // ASCII码(BCD),转双长字整型数(HEX)
    #define UL64toASCII(a,c)      do{ AtoL64 ((char far *)a, 0, (long far *)&##c##.##h); }while(0)                                                                // 双长字无符号整型数(HEX),转ASCII码(BCD)
    #define SL64toASCII(a,c)      do{ AtoL64 ((char far *)a, 1, (long far *)&##c##.##h); }while(0)                                                                // 双长字有符号整型数(HEX),转ASCII码(BCD)
    #define LNEG64(a,c)           do{ neg64 (a##.##h, a##.##l, 1, (long far *)&##c##.##h); }while(0)                                                        // 双长字有符号整型数(HEX),求补码
    #define UINTtoBCD16(a)        do{ int_bcd16 (a, 0); }while(0)                                                        // 无符号整型数(HEX),转BCD码,溢出位存ACC,可紧跟一条指令读出最高位ACC(例如: Ca=ACC;)
    #define SINTtoBCD16(a)        do{ int_bcd16 (a, 1); }while(0)                                                        // 有符号整型数(HEX),转BCD码,溢出位存ACC,可紧跟一条指令读出最高位ACC(例如: Ca=ACC;)
    #define ULONGtoBCD32(a)       do{ int_bcd32 (a, 0); }while(0)                                                        // 无符号长整型数(HEX),转BCD码,溢出位存ACC,可紧跟一条指令读出最高位ACC(例如: Ca=ACC;)
    #define SLONGtoBCD32(a)       do{ int_bcd32 (a, 1); }while(0)                                                        // 有符号长整型数(HEX),转BCD码,溢出位存ACC,可紧跟一条指令读出最高位ACC(例如: Ca=ACC;)


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

    本版积分规则

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

    GMT+8, 2024-4-26 19:56 , Processed in 0.070902 second(s), 63 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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