应广单片机(PADAUK) MINI-C 编程指南初级(系列1),台湾科技的 MINI-C 编译器基本上是构建于 ANSI C,但受限于应广单片机的硬件结构,因此只能支持部
分的 ANSI C。并根据应广单片机的硬件结构,扩展了一些语法,以提高编译效率及节省程序空间。
1. 了解MINI-C语言特性:MINI-C是一种类似于传统C语言的编程语言,但在一些细节上有所不同。首先,需要注意MINI-C不支持变量的乘除法和数组的自加操作。因此,在编写代码时,需要使用其他方式来实现这些功能,例如使用移位操作来代替乘除法,使用循环来实现数组的自加操作。
2. 使用比较器作为伪ADC:在台湾应广单片机PMS150C/PMS150G中,由于硬件限制,无法直接使用模拟数字转换器(ADC)。但可以利用比较器来模拟ADC的功能。比较器可以将模拟信号与参考电压进行比较,并输出相应的数字信号。通过合理设置参考电压和比较器的阈值,可以实现对模拟信号的采样和转换。
3. 模拟串口收发:在台湾应广单片机PMS150C/PMS150G中,没有内置的硬件串口模块。但可以通过软件来模拟串口的收发功能。通过设置GPIO口的输入输出状态和时序,可以实现串口数据的发送和接收。需要注意的是,由于软件模拟的串口速度较慢,需要合理设计数据传输的协议和时序,以确保数据的可靠性和稳定性。
1 MINI- C 语言
1.1 简介
1.2 MINI-C 的程序结构
1.3 预处理
1.4 标示符
1.5 数据类型
1.6 常量
1.7 变量
1.8 表达式
1.9 特殊的符号或者符号串
1.10 指针
2.程序控制语句
2.1 赋值语句
2.2 if 语句
2.3 switch 语句
2.4 while 语句
3.查表
4.函数
5.参考程序范例
1 MINI- C 语言
1.1 简介
台湾科技的 MINI-C 编译器基本上是构建于 ANSI C,但受限于应广单片机的硬件结构,因此只能支持部
分的 ANSI C。并根据应广单片机的硬件结构,扩展了一些语法,以提高编译效率及节省程序空间。
1.2 MINI-C 的程序结构
MINI-C 语言程序由语句、注释和预处理指令组合而成的。
语句
语句由变量、常量、运算符和函数共同组成,以分号作为结束符。主要是执行以下的动作:
宣告数据变量与数据结构
定义数据空间
执行算术与逻辑运算
执行程序的控制动作
一行程序可以包含多个语句;复合语句由一个或多个被包含在一对大括号内的语句组成,并且可以将其当
单一语句来使用。
源程序必须定义主函数 fppa0。工程可能不只一个源程序文件,但只有一个源程序文件中可以定义主函数fppa0。
应广早期的产品具有双核和 8 核,如果采用双核,程序中还可以有第二个程序指针所指的一套程序 fppa1;
如果采用 8 核,则还可以有 fppa2,fppa3....,fppa7 等。
注释
注释一般是在文件中解释源程序语句的意义与作用来提供程序的可读性。注释不可以嵌套。
行注释符[ // ],开始于//直至此行结束。
块注释符[ /*…*/ ],开始于/*结束于*/。
1.3 预处理指令
1)文件包含
语法:
#include “filename”
说明:
用双撇号时,系统先在用户当前工程目录中寻找要包含的文件,该文件可以是用户头文件或者 C 程序文件,
或者用户私密库文件 .在应广单片机开发中,各类型的单片机所使用的的寄存器定义头文件,会被系统根
据用户选择的单片机型号自动载入,不需要用户在单独使用“#include”来载入。
2)宏定义
#define 标识符 value
其中 value 可以是数值或者语句。注意#define 不能用来定义 IO 名称。
一般用#define 来定义常数或者宏名是可以的。
比如定义常数:
#define
C_AD_PB0
0 //定义 AD 通道 PB0 为数据 0;
宏语句定义:
#define
WTD_ON
set1 clkmd.1 ;//定义宏语句,将看门狗 WTD 打开;
set0 clkmd.1 ;//定义宏语句,将看门狗 WTD 关闭;
#define
WTD_OFF
定义后,便可以在程序中直接使用宏语句,以方便程序的阅读
3)条件编译
#if 标识符
statement1
#else
Statement2
#endif
测试#if 后面是否为真,为真则编译#if 和#else 之间的程序,否则编译#else 和#endif 之间的程序。其
中标识符只能为#define 或者 EQU 定义的标识符。
#ifdef 标识符
statement1
#else
Statement2
#endif
测试#ifdef 后面的标识符是否用#define 定义过,如果定义过则编译#ifdef 和#else 之间的程序,否则编译#else
和#endif 之间程序。
#ifndef 标识符
statement1
#else
Statement2
#endif
测试#ifndef 后面的标识符是否用#define 定义过,如果没有定义过则编译#ifndef 和#else 之间的程序,否则
编译#else 和#endif 之间程序。
1.4 标识符(深圳逐高电子应广单片机授权代理商)
标识符的名称包含连续的字母、数字或下划线,并遵守下列规则:
第一个字符不可为数字
最长只能为 27 个字符
区分大小写
不可以使用保留字
MINI-C 语言中的保留字
Break, case , const,continue,default , do,else,extern,
Goto,if,byte ,word, eword ,dword,int
return,switch void,while
asm bit,interrup,
1.5 数据类型:
MINI-C,支持的所有数据都是无符号数字,位长度有 1 位,8 位,16 位,24 位,32 位,分别如下表描
述。
1.4 数据类 长度(bit) 长度(byte) 值域范围
型数据类型
bit | 1 | —— | 0,1 |
byte | 8 | 1 | 0~255 |
int | 8 | 1 | 0~255 |
word | 16 | 16 |
0~65535 |
eword | 24 | 3 | 0~16777215 |
dword | 32 | 4 | 0~4294967295 |
1.6 常量
数字常量:
MINI-C 支持二进制,十进制以及 16 进制的常数
(1). 十六进制,以 0x 开头或者 H 结尾: 例如: 0xAB, 0CDh
(2). 十进制,以 D 结尾或者不写: 例如: 12, 34d
(3). 二进制,以 0B 开头或者 B 结尾: 例如: 0B11_00_1100, 01011010B
(4). 在二进制中,可以增加 `_`,以提高程序撰写的可读性
(5). 范例: MOV A, 31h
MOV A, 49
MOV A, 0B11_0001
MOV A, '1'
字符常量:可以为 `A~Z`,`a~z`,`_`,`0~9`作为常量的开头,字符常量使用前需要
定义具体的数字,定义字符常量的作用是方便程序阅读。比如:
#define C_LED_ON 0;
#define C_BRIGHTNESS_MAX 220;
1.7 变量
(1). 变量名称不分大小写,变量开头为英文字母或者下滑线,如 `A~Z`,
`a~z` , ` _`。
(2). @ 不能做变量名称之开头,@用于系统定义最近的向前或者向后跳转地址
(3). 非变量之名称开头则可以为 `A~Z`,`a~z`,`_`,`0~9`。
(4). 变量字符串长度不限。
(5). 变量分位变量,单字节变量,双字节变量,三字节变量,和 4 字节变量。
请见 1.4 的数据类型表。
(6). 范例:
位变量的定义:
在单核的单片机中,位变量必须存放在 RAM 前 16,或者前 32 字节内,具体
根据 IC 的型号确定。位变量,可以指定具体 RAM 的位,也可以
由系统分配。
当定义一个具体 RAM 的位时,需要先定义一个或者几个字节的变量。
定义格式:bit 位变量名 :具体 RAM 名.x (x 由 0~7 组成,或者更大的数字 0~31)
如:
Byte my_flag; //先定义一个字节,作为一些标志定义
Bit f_key_busy : my_flag.0;//指定具体变量的具体第 0 位
Bit f_led_on : my_flag.1;//指定具体变量的具体第 1 位
当不指定 RAM 位置的位定义,则具体 RAM 位置由系统分配,直接由 bit 定义;
定义格式:bit 位变量名
如:
Bit f_charge_full;
变量的定义:
变量的定义格式:数据类型 变量名;
比如:
Byte my_flag;
Word t16_cnt;
Word user_piont;
Dword timer_10ms;
1.8 表达式:
【 算 术 表 达 式 】
本发展系统已提供 ~、+、-、&、|、^、( )、=、+=、-=、&=、|=、^= 等操作数。
以下为例:
BB1 = BB2;
WW1 += (WW2 + BY2) & 1234h;
不过以下三点请注意:
(1). 尚未提供连等的表达式,如下范例:
BB1 = (BB2 = BB3) + 2;
BB1 = BB2 = BB3;
(2). 对于 ++、-- 的操作数,暂时只允许如下单一格式。
BB1++; WW1--;
(3). 对于 <<、>>、<<<、>>>、<<=、>>=、<<<=、>>>= 的操作数,
如使用太复杂的表达式,最佳化可能不够理想,请多包涵。
<< 对应到汇编语言是 SL。
<<< 对应到汇编语言是 SLC。
>> 对应到汇编语言是 SR。
>>> 对应到汇编语言是 SRC。
运算子的优先级,由高排到低,分别为:
逻 辑 表 达 式 】 MINI-C 提供支持 ==、!=、>、>=、<、<=、&&、||、!、( ) 等
表达式。 运算子的优先级,由高排到低,分别为:
1.9 几个特殊的符号或者符号串:
(1)“;”分号:MINI-C 语句的结束符,或者汇编中的注释符,每一句 MINI-C 语句,都必
须要有一个“;”做结束。
(2)“@”,简易标记符,有时为了避免取太多的标号名,可以使用简易的标记符。简易标
记符往往配合字母 F 和字母 B 用,以告知编译器是向前还是向后跳转,此处说的前是
指后面书写程序,后指更早书写的程序。
例如:
goto @F // 跳跃到后面的 @@标记 1
…
@@: // 标记 1
…
goto @F // 跳跃到后面的 @@标记 2
…
goto @B // 跳跃到前面的 @@标记 1
…
@@: // 标记 2
…
goto @B // 跳跃到前面的 @@标记 2
你也可以为简易的标记命名,那么跳越的距离就更有弹性了,如下例:
@@.XX: // 标记 XX
goto @F // 跳跃到后面的 @@
…
@@: …
goto @B.XX // 跳跃到前面的 @@标记 XX
…
goto @F.XX // 跳跃到后面的 @@标记 XX
…
@@: …
goto @B // 跳跃到前面的 @@
(未完待续)
深圳逐高电子应广单片机授权代理商