找回密码
 立即注册
查看: 1737|回复: 8

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-1-10 14:07:57 | 显示全部楼层 |阅读模式
“长缨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, 下载次数: 152)

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-05-01 00:00:50

4

主题

242

回帖

1287

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-05-01 06:58:22

5

主题

184

回帖

1331

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:477
  • 最近打卡:2025-05-01 18:48:32
已绑定手机

6

主题

92

回帖

938

积分

高级会员

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

使用道具 举报 送花

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

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-1-10 18:04:02 | 显示全部楼层
jm*** 发表于 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编译器”,下一篇文章给出
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:186
  • 最近打卡:2025-03-06 09:49:49

14

主题

133

回帖

1149

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:516
  • 最近打卡:2025-05-01 14:38:03

0

主题

72

回帖

2104

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-05-01 18:20:12

79

主题

631

回帖

1132

积分

金牌会员

积分
1132
发表于 2024-9-7 21:23:45 | 显示全部楼层
这个厉害了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2025-05-01 00:46:29

0

主题

23

回帖

334

积分

中级会员

积分
334
发表于 2025-4-9 10:21:10 | 显示全部楼层
长缨351 C351编译器”   怎么一直没有更新版本呢?
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 21:58 , Processed in 0.149115 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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