| 
论坛元老  
 威望78 贡献129 热心值1 金币13904 注册时间2020-8-31
 
 | 
 
 
| 应广 Mini-c编程指南,pdf文档,Mini-c语法规则和举例 尚诚科技杨帆,电话
 ,应广大陆技术支持,销售全系列应广空片,并承接小方案川发
 3)条件编译
 #if标识符
 statement
 #else
 Statement 2
 fendi
 测试井if后面是否为真,为真则编译圩if和*else之间的程序,否则编译井else和# endif之间的稈序。其
 中标识符只能为
 或者定义的标识符
 标识符
 测试后面的标识符是否用
 定义过,如果定义过则编译和之间的程序,否则编译
 和之间程序。
 标识符
 测试
 后面的标识符是否用
 定义过,如果没有定义过则编译
 和之间的程序,否则
 编译和之间程序。
 标识符
 标识符的名称包含连续的字母、数字或下划线,并遵守下列规则:
 第一个字符不可为数字
 最长只能为27个字符
 ●区分大小写
 ●不可以使用保留字
 MINI-C语言中的保留字
 Break. case, const, continue, default
 do, else, extern,
 d. word, dword, int return switch void, while
 asm bit, interrup
 1.5数据类型:
 MINI-C,支持的所有数据都是无符号数字,位长度有1位,8位,16位,24位,32位,分别如下表描
 1.4数据类长度(bit)长度(byte)值域范围
 型数据类型
 bit
 byte
 8
 0~255
 int
 8
 0~65535
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ’应广大陆技术支持,销售全乐列应广空片,并承接小方案川发
 ewer
 0~16777215
 dword
 32
 4
 0~4294967295
 常量
 数字常量:
 支持二进制,十进制以及进制的常数
 (1).十六进制,以0x开头或者H结尾:例如:0xAB,0CDh
 (2).进制,以D结尾或者不写
 例如:12,34d
 进制,以OB开头或者B结尾:例如:OB11001100,01011010B
 (4).在二进制中,可以增加¨,以提高程序撰写的可读性
 (5)
 范例:
 mov A 31h
 MOV
 A,49
 MOV
 A,OB110001
 MOVA,’1
 字符常量:可以为^A~Z,az^,,0~9作为常量的丌头,字符常量使用前需要
 定义具体的数字,定义字符常量的作用是方便程序阅读。比如:
 tdefine c ledon 0
 井 define C BrIGhtNESS mAⅩ220;
 变量
 (1).变量名称不分人小写,变量开头为英文字母或者下滑线,如AZ,
 a z
 2).@不能做变量名称之开头,@用于系统定义最近的向前或者向后跳转地址
 (3).非变量之名称开头则可以为AZ,az
 (4).变量字符串长度不限。
 (5).变量分位变量,单字节变量,双字节变量,三字节变量,和4字节变量。
 请见1.4的数据类型表。
 范例
 位变量的定义:
 在单核的单片机中,位变量必须存放在RAM前16,或者前32字节内,具体
 根据IC的型号确定。位变量,可以指定具体RAM的位,也可以
 由系统分配
 定义一个具体RAM的位时,需要先定义一个或者儿个字节的变量
 定义格式:bit位变量名:具体RAM名.x(x由07组成,或者更大的数字031)
 如
 Byte my flag://先定义一个字节,作为一些标志定义
 Bit f key busy: my flag.0;/指定具休变量的具休第0位
 Bit fled on: my flag.1;//指定具体变量的具体第1位
 当不指定RAM位置的位定义,则具体RAM位置由系统分配,直接由bit定义:
 定义格式:bit位变量名
 如
 Bit f usb on
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ’应广大陆技术支持,销售全乐列应广空片,并承接小方案川发
 Bit f charge full
 变量的定义:
 变量的定义格式:数据类型变量名;
 比如:
 Byte my flag
 Word t16 cnt
 Word user piont;
 Dword timer 10ms
 1.8表达式:
 算术表达式】
 本发展系统已提供、+、-、&、|、、()、=、+=、-、&=、‖
 等操作数。
 以下为例:
 BB1
 BB2
 +-(WW2+BY2)81234h
 不过以下三点请注意:
 (1).尚未提供连等的表达式,如下范例:
 BB1
 (BB2BB3)+2;
 BBI
 BB2= BB3
 (2).对于++、-的操作数,暂时只允许如下单一格式。
 BB1++;
 WWI
 (3).对于<冷、<>〉、<、>-、<<、>〉-的操作数,
 如使用太复杂的表达式,最佳化可能不够理想,请多包涵。
 <<对应到汇编语言是SL。
 <<对应到汇编语言是SLC。
 〉对应到汇编语言是SR。
 >〉对应到汇编语言是SRC
 运算子的优先级,由高排到低,分别为
 功能
 运算子
 括号
 增量、减量++
 加减法
 位移
 、>>、〈<<、>>〉
 位逻辑
 位逻辑
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ’应广大陆技术支持,销售全乐列应广空片,并承接小方案川发
 位逻辑
 算术
 【逻辑表达式】
 提供支持
 表达式。运算子的优先级,由高排到低,分别为:
 功能
 运算子
 括号
 增量、减量++
 比较
 且
 &&
 或
 1.9几个特殊的符号或者符号串
 (1)“;”分号: MINI-C语句的结束符,或者汇编屮的注释符,每一句 MINI-C语句,都必
 须要有一个“;”做结束。
 (2)“@”,简易标记符,有时为了避免取太多的标号名,可以使用简易的标记符。简易标
 记符往往配合字母F和字母B用,以怗知编译器是向前还是向后跳转,此处说的前是
 指后面书写程序,后指更早书写的程序。
 例如
 goto⑩F
 跳跃到后面的@@标记1
 :
 //标记
 goto
 //跳跃到后面的@标记2
 goto
 //跳跃到前面的@标记1
 @@
 /标记2
 goto @B
 //眺跃到前面的@标记2
 你也可以为简易的标记命名,那么跳越的距离就更有弹性了,如下例:
 @@ XX
 //标记XX
 goto @
 //跳跃到后面的@
 @:
 goto @B XX
 //眺跃到前面的@标记XX
 goto @F XX
 //跳跃到后面的@标记XX
 goto @B
 //跳跃到前面的@
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ,应广大陆技术支持,销售全系列应广空片,并承接小方案川发
 @@ XX
 //标记XX
 (3)“S”,取字节字符,利用取字节字符,可以方便的操作2个字节以上的变量,其中
 $0,表示最低位,$1表示次低位,依此类推。“$”还有另外一种用法,给单片机系统寄
 存
 器赋值。赋值格式,$寄存器名数值1,数值2,数值3..。
 例如我们需要将一个双字节word变量的低位加1,高位保持不变:
 Word timer 10ms cnt
 timer 10ms cnt $0++://
 A= timer10 ms cnt.$1;//把高位字节赋给A
 例2.利用$给个别寄存器赋值,
 由于仿真器版本和实体IC有时在寄存名不同,或者设置位有效是用1表示,还是用0表
 示也可能不同,所以用S赋值寄存器的值,就可以告诉编译器在仿真时应该用到与仿真器实际
 控制寄存器相适应的值,而不是$符号赋值的真实值,$符号赋的值是给实体IC使用的。正是
 因为如此,所以,个别型号的部分寄存器的赋值,必须要采用$米赋值,这个在PMC232的ADCM
 中表现特别明显
 比如,你在PMCl31的程序设计中,如果ADCM的值需要赋值为0x84;
 在PC131的程序中直接这样书写编详器是认可的:
 Adcm= 0x84
 但是如果是PMC232的程序设计,上面的表述可能会被编译器卡掉,不认这种书写方式,需要
 用$赋值:
 $ADCM12bit,/4;/此值按规格书描述,也是0x84.看IC文件,可以看出ADCM寄存器的
 /设置主要分为两部分:AD转换的位数,最新规格已经只保留了12位
 /转换了,其他数位已被修订到没有了。保留位,默认设置为0.
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ’应广大陆技术支持,销售全乐列应广空片,并承接小方案川发
 6-24. ADC Mode register (adcm),Io address =0x21
 Bit Reset R/w
 Description
 Bit resolution
 7-5000 WO 100: 12-bit, AD 12-bit result [11: 0]=[ adcrh[7: 01, adar[7: 4])
 others reserved
 Reserved (keep u tor tuture compatiblity
 ADC clack source selection
 000: sysc/
 001: sysCk</2
 010: sysck<4
 3100Wo011:ysck8,
 100:ysck16,
 101:svsc32
 110:svsc64
 111: syscl128
 0
 Reserved
 ()“”,取系统变量地址。
 【利用&读取变量的地址】
 如果我们想用上例的数组作一个 Queue,可以用如下的方法。
 WORD
 Point
 Point
 Bu
 uffer
 thile (1)
 calculate acc
 冰 Point
 A
 Point +t
 // Point plus one each time
 if (point == Buffer [BUF SIZE// until (Point = Buffer
 bottom of buffer
 Point.
 Buffer
 // set point to the initial value
 of Buffer
 【利用&产生变量的参考名称】
 如果我们想要在同一个变量地址上,拥有不同的变量名称,可以川如下的方法。
 WORD Point, Data[21
 byte varl
 Point$0;//Var1跟 Point的 Low Byte是同一地址
 bYte var2
 Point$1;/Var2眼 Point的 High Byte是同地址。
 bYte var3
 Data[0]$1;/var3跟Data[0]的 High byte是同一地址。
 Word var4
 Data[1];∥var4跟Data[1]是同一地址
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ,应广大陆技术支持,销售全系列应广空片,并承接小方案川发
 (4)“SYS”,系统保留特殊字符,用于一些檢测或者特定地址取值。
 比如不同的IC,能支持的指令集合不一样,当记忆不清楚时,可以采用“SYS”来做
 检测,检测格式如下:
 SYS(OP:指令):如果指令存在则返回1
 比如,我们想定义一个宏指令来取代 swapo指令的部分功能, swapo指令不是所有的应广单
 片机都能支持的,有部分资源更高一点的IC才支持。
 #if SYS (OP: SWAPC IOn)
 //判断是否有 swap I0.n的指令
 swap EQU
 swapo
 //将 swapo直接代换成 swapo指令
 #else
 swap macro lob
 //以宏指令取代 swapo指令
 0
 //该指令只是将C送给I0,而且会有毛刺
 tOss
 CF
 en
 #end if
 swapo
 I0 Bit;
 / swapo就可变成通用命令。
 其它类似命令,如
 SYS (OP: COMP A I)
 A跟立即值比较
 SYS (OP: PUSHW index)// push word memory
 SYS (OP: SWAP M)
 // swap byte memory
 SYS(OP: XOR IO A)
 Xor register,
 A
 SYS (OP: STOPEXE
 SYS (OP: PMODE N)
 /
 都可以用来判断指令是否支持
 关于·SYS语法,还有
 Var=>SYS(SIZE.RAM);//得到目前使用IC的 RAM SIze(单位为Byte
 Var=>SYS(SIZE.ROM);//得到目前使用IC的 ROM Size(单位为Word)
 Var=〉SYS(ADR.ROL);/得到 Roll code的起始地址
 SYS(ADR.IHRC);//得到IHRC的校正地址
 SP
 SYS( STACK:n);//重新设定第n个FPPA的SP的值为
 //预设的设定起始地址。
 (5)“ PRAGMA”:使用# PRAGMA指令,可以做一些编译的特殊控制,如卜介绍:
 (1)在Mini-C的项日中,有些指令会自动使用一些 Local memory当作运算川,
 如
 DELAY 10000
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 尚诚科技杨帆,电话
 ,应广大陆技术支持,销售全系列应广空片,并承接小方案川发
 A =*point +*Pointl
 但在作多次烧录时,如果你想自行分配所有 Memory的资源,
 你必须除能这种语法,以免变量的排序地址不如预期
 如果要除能这项检查,必须在.PRE栏案中,加入以卜指令才可。
 #PRAGMA DISABLE SYS LOCAL
 1.10指针:
 无论是程序空间,还是RAM空间,每个单元空间都有一个地址,这个地址也是该室间的
 指针。如果能够通过地址来访问该空间,会让程序操作上更灵活。需要通过地址访问程序或
 者RM空间时,就需要用一个变量来存放这些单元的地址,然后再通过这个地址去访问所需
 要的空间。存放这些地址的变量是指针变量。在MINⅠC中,所有的双字节变量都可以做为指
 针变量使用
 定义一个指针变量:
 Word user pointer
 例如:定义一个指针变量来清0内部RAM;
 user pointer=SYS( RAM SIZE)-1;/取得当前芯片的RAM字节数
 d
 冰 user pointer=0
 While(-- user pointers)
 2.语句.
 程序的执行部分,就是语句,有赋值语句,if语句, switch语句等
 2.1赋值语句用“-”作为赋值符号,
 格式为:变量=变量或者常数;//注意每个语句的结束符“;”不能少的。
 如:a=250;
 2.2if语句,if语句是用来判定所给条件是否满足,根据判定结果的真或者假决定执行
 的操作。
 MINI-C支持的表达式,不能有算数操作,只能是很直观的逻辑表达式,但是,如
 果算数表达式中的常数是一个标记,比如ROM地址符,被作为特例允许使用。比如
 范例: Label
 DC12,34,56
 WORD
 Point
 if( Point== Label+3) Point= Label;//实际上编译完成后, Label+
 3也是一个固定常数
 我的博客空间:
 欢迎光临;我的拍拍店
 第页
 
 
 
 | 
 |