一、概述
项目需要性价比高一点的芯片,在澄海(广东省汕头市下辖区)这边,台湾的芯片占了很大的市场。台湾芯片的特点是便宜,没办法,玩具出口生产量太大,1分钱的差价都有可能累积出大价钱。选型时选了应广单片机。对于用惯了C开发的人,用汇编来开发还是有些抗拒的。看了一下简介,应广单片机支持Mini-C语言,一看就跟C语言有关,我们来了解一下:
二、Mini-C介绍
应广科技的MINI-C语法结构,是一种界于标准C和汇编的一种语言,对于小资源的MCU来说,该语法非常精简实用。 也就是说,对比汇编程序,它的编写方法基本保留了C语言的风格。非常适合刚入手这款芯片的朋友。
三、基础规则
1、变量定义:大多数新手在C51中用 unsigned char 定义8位变量,unsigned int 定义16位变量,但是在Mini-C里。 实验使用:
BYTE 为 8-BIT 数据型态; WORD 为 16 BIT; EWORD 为 24 BIT; DWORD 为 32 BIT。
相当于 #define BYTE unsigned char ; #define WORD unsigned int 已经内部帮你设置好了。对比中应该看到我用了大写,我们知道在汇编中,没有大小写的区分,在这个 Mini-C 语言中,也没有大小写的区分。
所有的 WORD 变量,皆可以当 Point 使用。读取 ROM 的方法,一般有如下三种语法: ○ Point$L (取 Low Byte)。 ○ Point$H (取 High Byte)。 ○ *Point$W (取 WORD)。
四、程序表达
C语言作为面向过程的语言,在这个Mini-C里表现的尤为彻底,先说一个短板,函数表达式不能带参数,也不能传出参数。这个玩法确实有点坑,不过好在汇编的语法它也支持一点,这样就好办了,我们用 累加器A 充当帮运工,带进数据和带出数据。
优点在于,程序表达是保留了很多指令,这就为程序设计提供了很好的便捷性了。举个例子:
WORD ww;
BIT Bit_1;
Bit_1 = 1; // 等同于 SET1 Bit_1
Bit_1 = 0; // 等同于 SET0 Bit_1
ww.15 = 1; // 等同于 SET1 ww.15,等同于 SET1 hb@ww.7
.DELAY 50; //延时50个指令周期
通过查阅芯片的中文手册,即可得到芯片支持的指令。对于未知指令是否支持,也可以使用一下方法来查询:
语法:_SYS(OP:指令) : 如果指令存在,则回传 1。
指令的格式,采用各系列 IC 的 datasheet 的指令集命名方法。
#if _SYS (OP:SWAPC IO.n) // 判断是否有 swapc IO.n 的指令
swapc_ EQU swapc // 将 swapc_ 直接代换成 swapc 指令
#else
swapc_ macro iob // 以宏指令取代 swapc 指令
iob = 0;
t0sn CF;
iob = 1;
endm
#endif
swapc_ IO_Bit; // swapc_ 就可变成通用命令。
其他类似命令,如:
_SYS (OP:COMP A I) // A 跟立即值比较
_SYS (OP:PUSHW index) // pushw word_memory
_SYS (OP:SWAP M) // swap byte_memory
_SYS (OP:XOR IO A) // xor register, A
_SYS (OP:STOPEXE) //
_SYS (OP:PMODE N) //
都可以用来判断指令是否支持。