立即注册 登录
返回首页

uid:257705的个人空间

日志

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

已有 328 次阅读2017-12-5 15:02

真位与假位

 

       51系列单片机因具有真正的位操作能力,所以被赞誉为布尔处理机,ZJB扩展了这种能力,对于字节变量,无论是否处于可位寻址空间,ZJB都具有操作字节变量8个位的能力,当然,这种操作能力和真位相比具有较大的限制,为了和真正的位变量进行区别,ZJB把这种普通字节的位叫做假位,假位只能进行清零、置位和取反三种操作,但这已极大的方便了应用。

 

;假位运算示例:

       ::   x

       x.0=1             ;对字节变量x0位置位

       x.1=0             ;对字节变量x1位清零

       ~x.3               ;对字节变量x3位取反

;利用假位操作对STC单片机IO口模式进行设置示例:

       P1M1.2=1      ;P1.2口设置为高阻输入口

       P1M0.3=1      ;P1.3口设置为强驱输出口



 行段结构 

       ZJB使用可嵌套的父子行来控制程序的流程结构,行首缩进越多,行的辈份就越小,缩进相同的行为兄弟行。父行的行为决定子孙行是否执行。子孙行结构示例:

              ?x=1                            ;父行

                     Z=200                   ;缩进的子行

                     ?y=10                   ;缩进的子行

                            z=20              ;子行的子行

              其他代码                       ;父行的兄弟行

      

       除了使用父子行进行选择分支外,ZJB还使用 .. 来定义一段代码,段像行一样也可以任意嵌套使用。在段内的适当位置可以使用循环语句 < 到段首进行循环,也可以在适当位置插入跳段语句 > 跳出段结束循环。循环段结构示例:

              ..      段内代码                ;段首

                     ?x=0>                   ;条件满足跳出段,结束循环

                     段内代码                ;段内代码

                     <                          ;段尾,无条件循环语句,到段首循环

              段外代码                       ;段外代码

      

       如果用 k.. 声明一个段,那么段内代码将会重复执行k次,相当于定次循环,这种结构可以很方便的写成一个定时程序,当然,在段内您可以插入选择语句随时退出定次循环。定次循环示例:

              1000..                           ;定次循环段首,段内代码重复执行1000

                     段内代码                ;段首

                     ?x=0>                   ;条件满足跳出段,结束循环

                     段内代码                ;段尾代码,定次段段尾无需书写循环语句

              段外代码                       ;段外代码

 

       简单的定时程序示例

              10000000..                    ;调整k值即可增减定时时长

              其他代码

 

       总之,利用行段结构和选择语句,您就可以进行灵活的分支,这将充分发挥您的想象力而不必局限为几种固定的结构,这种新颖的流程控制方式将使您的代码更灵活,相应编制出的代码也会更规范。利用这种机制,您可以编制出几乎不可想象的程序结构,希望您能喜欢。

 


分支与循环 

       选择语句以 ? 开头,后跟一个条件比较式组成,比较式后面还可跟一个可选的跳转符,用于条件满足后的跳转,合法的跳转符为:

           条件满足执行本行后续语句和子行语句,否则跳到本行的兄弟行或高辈份行执行

       !      跳行符,条件满足跳过本行其他语句到本行尾(直接到子行执行)

       <     段内循环符,条件满足跳到段首循环(必须在段内使用)

       >     段内跳出符,条件满足跳出段外执行(必须在段内使用)

 

选择语句的形式为:        ?条件比较式[可选的跳转符],

       比较符:    =,<>,<,<=,>,>=,<<,<<=,>>,>>=

              =            等于

              <>          不等于

              <            小于

              >            大于

              <=          小于等于

              >=          大于等于

              <<          小小于(用于有符号数比较)

              >>          大大于(用于有符号数比较)

              <<=              小小于等于(用于有符号数比较)

              >>=              大大于等于(用于有符号数比较)

 

       ZJB选择和分支的例子:

       ;如果x=1,执行后续语句和子行,否则到兄弟行

              ?x=1                     ;父行,如果x=1执行子行,否则到其他代码执行

                     y=10              ;缩进的子行

                     z=20              ;子行的兄弟行

              其他代码                ;父行的兄弟行

      

       ;如果x=1,并且y=0执行后续行和子行

              ?x=1?y=0           ;父行,如果x=1并且y=0执行子行,否则到其他代码执行

                     z=0                ;缩进的子行

              其他代码                ;父行的兄弟行

      

       ;如果x=1跳过过后续语句,直接执行子行(相当于如果x=1或者y=0执行子行)

              ?x=1!,?y=0          ;父行,如果x=1或者y=0执行子行,否则到其他代码执行

                     z=0               ;子行

              其他代码                ;父行的兄弟行

      

       ;利用段模拟 IF-Else-End语句

              ..      x=1                    If(x==1)

                            y=10>         ;执行完y=10,跳出段

                     x=2                    Elseif(x==2)

                            y=100>       ;执行完y=100,跳出段

                     x=3                    Elseif(x==3)

                            y=1000>     ;执行完y=1000,跳出段

                     y=0                       Elsey=0

              段外代码

      

       ;利用段模拟 IF-Else-End语句,简写形式

              ..      x=1y=10>    If(x==1)

                     x=2y=100Elseif(x==2)

                     x=3y=1000> Elseif(x==3)

                     y=0                       Else

              段外代码

      

       ;当型循环的例子

              ..      ?x=0>                   ;段首

                     段内代码                ;段内其他代码

                     <                          ;段尾

              段外代码                       ;段的兄弟行,

      

       ;直到型循环的例子

              ..      段内代码                ;段首

                     ?x<>0<                 ;如果x<>0到段首循环

              段外代码                       ;段的兄弟行,

      

       ;定次循环的例子

              1000..                           ;重复执行段内代码1000

                     段内代码                ;用选择语句可以随时跳出段来结束循环

              段外代码

      

       ;定时程序的例子

              100000..                       ;修改k值即可修改定时时长

              其他代码

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

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

Powered by 单片机教程网

返回顶部