立即注册 登录
返回首页

uid:257705的个人空间

日志

一种新的单片机编译器1:ZJB8

已有 501 次阅读2017-12-5 14:58

ZJB简述

 

       ZJB是一种新的单片机编译器,她综合了汇编和C51的一些优点,并根据单片机实时性要求高、系统资源少的特殊性,使其可以自由的操纵累加器、寄存器、硬件指针堆栈等系统资源,并增加了许多易于使用的新功能,从而使ZJB更专注于单片机的开发,用她生成的代码将更小更高效,相应程序的编写也更灵活更自由。

 

       ZJB在程序的流程分支方面改变较大,她使用带有辈份的行来进行分支控制,行的辈份其实就是行首缩进的多少,行首缩进越多,行的辈份就越小,一般情况下,父行的选择决定了直系子孙行的执行行为。为了循环或重复,ZJB除了使用父子关系的行外,还设计了段的概念,段能使一大段代码形成一个家族,在家族内你可以使用 < 到家族首进行循环或使用 > 跳出这个家族,当然段内还可嵌套子孙段。利用这种行段的结构特征,您可以组成灵活的程序结构,而操作这些结构的仅仅是一些简单的选择语句而已,从某种意义上来说,这比把程序结构硬性划分成几种规定的模式更灵活更随意。

 

       在过程调用方面,ZJB支持过程名重载,您可以用相同的过程名称来细分一些功能相近但类型或参数不同的过程,在过程调用时,ZJB会选择合适的过程使之匹配。在过程的参数种类方面,除了使用一般参数外,ZJB还增加了引用参数和可返参数,使用引用参数能引用已定义的系统变量,这会加速过程的参数传递,使用可返参数能从过程返回多个数据,这在数据采集的过程中就避免了函数只能返回一个数据的尴尬局面。

 

       随着技术的飞速发展,芯片的互联将变得愈发简单起来,这些芯片大都使用串行互联通信,比如IICSPI等,这种互联方式将大大缩小PCB的面积,同时也节省了昂贵的单片机端口资源,为了和这些新颖的芯片通信,ZJB修改了移位语句的形式,使之成为固定的三端语句,利用新的移位语句,使得这些串行芯片的编程工作变得更加轻松自如。如果有兴趣,您完全可以自定协议,用2个甚至1IO口来轻松实现板级的通信互联。

 

       在程序的书写方面,ZJB可以一行书写多条语句,当有多条语句时,语句和语句之间使用半角逗号进行分隔,她唯一的限制是不能把一个语句分写在两行。另外,ZJB的注释符和汇编相同,都是使用半角分号,分号后的任何字符将会被看做注释,就像程序中不存在他们一样。

 

       总之,ZJB是一个较新的语言,在发展中她还有不尽人意的地方,如果您有好的想法和建议,可联系作者。祝学习愉快,工作顺利!

                   

 数制与常数

 

       计算机使用存储器来存储数据,由于存储器的最小单位是位,而位只能存储10两种状态,所以她只能使用二进制的方式来存储数据并以二进制的方式来进行运算,为了更好的编制计算机程序,我们不得不对二进制的运算规则加以研究,由于二进制和十六进制存在一一对应的关系,并且十六进制书写较为简短,所以十六进制在计算机中获得广泛使用。

      

       为了更方便的编制程序,ZJB提供了三种数制供编程者使用,它们分别是十进制、二进制和十六进制。十进制最符合我们的思维习惯,如果您想控制循环次数,十进制通常是最好的表示形式,但在布尔运算方面,二进制将会显得更加直接。在存储器的地址表示上,由于地址和十六进制有着对齐的特征,所有在表示地址方面还是使用十六进制更好,下面列出了ZJB各种数制表示之间的区别:

              十进制:                  0-9序列字串

              二进制:                  0B前缀或B后缀的01序列字串

              十六进制:               0X前缀或H后缀的0-9A-F序列字串

              HEX:                  0H前缀的HEX代码串,HEX串可直接生成HEX执行代码

 

标节

       常数一般会在存储器中储存,那么一个常数会占用多大的存储空间呢?,通常ZJB会选择最合适的空间来存储常数,但有时我们想让常数占用一个规定的字节数,这就会用到标节,标节明确表示这个常数占用多少字节长度,标节符用英文双引号“表示,标节后的数值+1表示占用的存储器的字节长度,例如:

              0x103          ;常数将占用4字节长度,存储器中的代码为  00H 00H 00H 10H

 

分节

       一个十进制数有时会需要按字节的值分别赋给不同的字节变量,比如对定时器的赋值,在一般的编程中这将非常麻烦,我们不得不使用程序员计算器进行数制转换、计算并取得各个字节的值,然后再分别赋值给需求的变量,ZJB使用分节的概念轻松的简化了这个问题,编译器会根据分节求出一个常数第几个字节的字节值。分节符用英文 单引号 ’表示。例如:

              TL0=-100000             -10000的第0个字节赋值给TL0

              TH0=-100001            -10000的第1个字节赋值给TH0

 

名称取代和命名常数 

       有时程序大量出现一些相同的常数,而在调试时我们不得不逐个修改这些常数使之符合要求,使用命名常数将会避免这些缺陷,有了命名常数,我们只需要修改命名常数的常数值即可解决问题,要对常数进行命名,我们可使用取代符进行村民们·取代(重命名),取代符用 == 表示。例如:

       定时值==1000               ;声明命名常数1000,在编程时用 定时值代替1000这个常数

 

声明变量 

       ZJB和其他语言一样,程序中使用的变量需预先声明,然后在程序中才能使用它们。声明变量的格式为一个可选的开始地址后跟两个英文冒号,然后是变量列表,如果省略开始地址,那么编译器将在30H-7FH的片内存储器中安排变量,如果变量名后使用标节符声明一个字节集,那么,这个变量名将代表这个字节集,而ZJB会额外为这个字节集声明分节变量,分节变量是一个1字节的变量,分节后的变量将按 变量名0,变量名1...表示,这和常数分节类似,但省略的分节符。

 

       如果您想声明特殊寄存器或可位寻址变量,请使用定址变量声明语句。定址变量按声明的地址从低到高进行排序,如果您像保留空间请使用~符号,定址声明的变量如果在单片机的可位寻址空间,那么ZJB将额外用变量名声明8个位变量,他们用 变量名.0-变量名.7 表示这8个位变量,您可以在程序中任意引用他们而不需要从新声明。

 

       假如您对编译器额外声明的变量名称不满意,你可以用取代符对这些变量重新命名,如果您对额外声明的位变量名称不满意,您可以用这个可寻址的节变量代替开始地址,然后对他们重新声明。

 

       注:声明的变量名称均从低地址开始排序。

 

变量声明的一般形式为:

              [可选的开始地址|可位寻址的字节变量]::   变量名["k],...

                     变量名:  非数值开头的非空字符串

                     k         变量所占用的存储器字节数-1

 

;普通变量声明示例,普通变量由编译器定址在片内30H-7FH的存储空间

                     ::   x,y"3      

                     ;以上语句声明了一个1字节变量x和一个4字节变量y

                     ;y将被分节成4字节变量,在程序中用y0,y1,y2,y3表示

 

;定址变量声明示例,定址变量按用户声明的开始地址从低地址到高地址排列定址

                     20H::    x"3  

                     ;以上语句声明了一个4字节变量x,程序中您可用x表示这个4字节变量

                     ;编译器会额外声明4个分节变量,它们是:x0x1x2x3

                     ;由于x处于可位寻址空间,那么编译器还会额外声明这些分节变量的位变量

                            x0.0x0.1...x0.7

                            x1.0x1.1...x1.7

                            x2.0x2.1...x2.7

                            x3.0x3.1...x3.7

 

;编译器隐含声明的这些分节变量和位变量在您的程序中可以任意引用,如果您对这些名称             ;不满意,您可以用取代语句对他们进行名称取代(重命名)。

              启动标志==x0.0,停机标志==x0.1,报警标志==x0.3...

 

;当声明的变量位于可位寻址空间时,您可以对这个字节变量重新声明,或用取代语句重命名

              x0::      启动标志,停机标志,~,报警标志,前进阀,后退阀



获取变量地址

 

       如果您想得到变量的地址,请使用#前缀。例如:

              R0=#x                   x取地址常数赋值给硬件指针R0

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部