找回密码
 立即注册
查看: 582|回复: 6

STCx51虚拟单片机(5):C351和A351语言与长缨8 STC编译器简介

[复制链接]

该用户从未签到

63

主题

661

回帖

1万

积分

荣誉版主

积分
10810
发表于 2024-1-10 14:07:57 | 显示全部楼层 |阅读模式
本帖最后由 杨为民 于 2024-2-19 12:48 编辑

“长缨8 STC编译器”是笔者为STC8系列单片机研制的C语言编译器。长缨8编译器是基于“STC80351指令集”开发的,“A351”是80351指令集汇编语言的名称,C351是长缨8支持的C语言规范的名称。目前的长缨8编译器V3.x版支持STC 80351的L0和L1等级指令集
研制长缨8编译器的目的是为新的采用80351指令集的STC32位单片机的软件工具链进行先行研究,因此并没有计划支持C51语言的全部特征和规范。C351语言规范是Keil的C51的一个子集,子集的大小以能够用C351语言开发出一个8位单片机上的RTOS为标准。
目前这个目标已经实现。笔者的“泰山x51-RTOS”使用C351和A351语言在STC8H8K64U单片机上开发,具体的介绍在STC论坛上笔者的《长缨x51(1)STC单片机软件工具链》帖子里有(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2490)。
本文将用5个范例程序来介绍C351与C51语言的兼容性,介绍A351与A51语言的兼容性,介绍A351中的80351汇编语言格式以及介绍C351编程方法。范例在文末的附件里。
一、C351语法是C51的一个子集
(1)本文的范例是连接在P2端口上的8个LED灯交替闪烁。下图是范例1的C51主程序:
Fig_01_C51.jpg
(2)本文的范例是用Keil的IDE项目组织的,可以直接使用C51编译。长缨8是一个独立的EXE文件,需要用MakeFile的方法来编译Keil的项目。下图四本范例的子目录文件列表:
Fig_02_MakeFile.jpg
双击其中的“长缨8_MakeFile.bat”批处理文件就可以对项目进行编译。目录中的“DEMO_STC8H.uvproj.MSG”是长缨8编译器生成的“编译信息”文件,这是一个文本文件,包含编译过程中出现的提示、警告、出错等信息。如果使用的是STC的IDE,这些信息将同步地显示在IDE信息框中。下图是编译成功后的内容:
Fig_03_Msg.jpg
(3)长缨8作为研究版编译器,C351只支持C51中的简单数据结构、简单语句和简单表达式。对于范例1这样简单的C51程序,不需要做任何简化修改就使用长缨8编译器编译通过,生成正确运行的代码。
二、A351语法是A51的超集
(4)STC 80351-L0指令集是Intel8051指令集全集。STC 80351-L1指令集则进一步包含了16位、32位的运算和内存操作。长缨8 STC编译器既支持STC 80351-L0指令集,也支持STC 80351-L1指令集。A351支持A51的全部汇编功能和部分宏语言功能。

(5)Intel 8051指令集共有111条指令,范例2以A51汇编的形式给出了这些指令的实例,下图是范例程序开头的部分:
Fig_04_8051.jpg
分别用Keil和长缨8对范例进行编译,对生成的HEX文件进行比较可以看到所有指令对应的代码完全一致,A351实现了对A51的全兼容。
(6)范例3是用A51汇编语言实现的范例1的P2端口LED灯交替闪烁效果的程序。分别用Keil和长缨8对范例进行编译,对生成的HEX文件进行比较可以看到两者对应的代码完全一致,A351实现了对A51的全兼容。
(7)范例4是用A351汇编语言实现的范例1的P2端口LED灯交替闪烁效果的程序。下图是其中延时函数的部分
Fig_05_A351.jpg
其中“AX”和“BX”是两个16位的寄存器,利用两层循环实现软件延时。
(8)上面A351程序涉及到STC80351-L1指令集的指令有:“MVR”指令将右操作数的内容传送给左寄存器,“DECS”指令可以对8/16/32位的寄存器做减1操作,“IS_TRUE”指令判断操作数是否为零。
(9)由于Keil的IDE是主流的STC单片机集成开发环境,而STC 80351指令集的A351汇编语言尚未被C51/C251编译器接受,因此A351/C351语言特别增加了语法元素“配对的忽略符”:第25行的“/*{”和第54行的“}*/”
在A351/C351语言中,起始忽略符“/*{”用在程序行的开头,C351/A351编译器将忽略该行程序。第25行中的下一个“A351”指明下面的程序按照A351汇编语言语法来编译。在A351/C351语言中,结束忽略符“}*/”用在程序行的开头,后面不要写其他内容,单独占一行程序。
(10)配对的“忽略符”在程序中的用途是“欺骗”C51/C251这样编译器,使得这些编译器认为配对的“忽略符”之间的程序是“块注释”的无关内容,就不会再进行语法检查。
三、C351编程的注意事项
(11)由于C351是C51的子集,因此C351的编程方法参考C51就行了。C351与C51最大的不同是C语言的复杂程度。C51语法是按专业人员的编程水平设计的,可以支持很复杂的语句结构。C351语法是按初学者的编程水平设计的,语法复杂程度控制在谭浩强C语言教材和大学生计算机等级C语言考试的水平上。
如果C351编译器出错而用户又看不出来错在哪里,那么往往是表达式太复杂造成的,用户可以试着引简单变量来简化程序。

(12)下图是范例5的主函数程序部分:
Fig_06_C351.jpg
其中第23行和第45行是配对的“忽略符”程序。

(13)C351程序与C51/C251程序最大不同是允许将80351指令写在C语言程序中,就像上面的第29行、第36和37行程序一样。只不过在C351程序中这些指令仍然是C语言程序行,必须用分号结束。

0101_长缨8_C351_简介.rar (484.31 KB, 下载次数: 26)

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 送花

使用道具 举报

  • TA的每日心情
    慵懒
    昨天 09:04
  • 签到天数: 120 天

    [LV.7]常住居民III

    3

    主题

    205

    回帖

    572

    积分

    高级会员

    积分
    572
    发表于 2024-1-10 14:33:46 | 显示全部楼层
    膜拜大佬,下班回家好好学习一下
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    85

    回帖

    652

    积分

    高级会员

    积分
    652
    发表于 2024-1-10 16:15:01 | 显示全部楼层
    I see no mention of MCS251 opcodes ?
    Surely this also supports MCS251 as well as MCS51 and C351 opcodes ?

    点评

    支持80251指令集的是另一个研究成果“长缨351 C351编译器”,下一篇文章给出  详情 回复 发表于 2024-1-10 18:04
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    5

    主题

    56

    回帖

    1027

    积分

    金牌会员

    积分
    1027
    发表于 2024-1-10 17:52:00 | 显示全部楼层
    STC是应该有自己的编译器才能充分发挥其性能
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    661

    回帖

    1万

    积分

    荣誉版主

    积分
    10810
     楼主| 发表于 2024-1-10 18:04:02 | 显示全部楼层
    jmg 发表于 2024-1-10 16:15
    I see no mention of MCS251 opcodes ?
    Surely this also supports MCS251 as well as MCS51 and C351 opc ...

    支持80251指令集的是另一个研究成果“长缨351 C351编译器”,下一篇文章给出
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-20 08:31
  • 签到天数: 57 天

    [LV.5]常住居民I

    5

    主题

    23

    回帖

    303

    积分

    中级会员

    积分
    303
    发表于 2024-1-15 13:37:18 | 显示全部楼层
    在哪里下载呢?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 165 天

    [LV.7]常住居民III

    0

    主题

    72

    回帖

    658

    积分

    高级会员

    积分
    658
    发表于 2024-1-16 09:23:05 | 显示全部楼层
    感谢分享
    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-9 17:32 , Processed in 0.069028 second(s), 57 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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