真位与假位
51系列单片机因具有真正的位操作能力,所以被赞誉为布尔处理机,ZJB扩展了这种能力,对于字节变量,无论是否处于可位寻址空间,ZJB都具有操作字节变量8个位的能力,当然,这种操作能力和真位相比具有较大的限制,为了和真正的位变量进行区别,ZJB把这种普通字节的位叫做假位,假位只能进行清零、置位和取反三种操作,但这已极大的方便了应用。
;假位运算示例:
:: x
x.0=1 ;对字节变量x的0位置位
x.1=0 ;对字节变量x的1位清零
~x.3 ;对字节变量x的3位取反
;利用假位操作对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 ;Else:y=0
段外代码
;利用段模拟 IF-Else-End语句,简写形式
.. ?x=1,y=10,> ;If(x==1)
?x=2,y=100,> ;Elseif(x==2)
?x=3,y=1000,> ;Elseif(x==3)
y=0 ;Else
段外代码
;当型循环的例子
.. ?x=0> ;段首
段内代码 ;段内其他代码
< ;段尾
段外代码 ;段的兄弟行,
;直到型循环的例子
.. 段内代码 ;段首
?x<>0< ;如果x<>0到段首循环
段外代码 ;段的兄弟行,
;定次循环的例子
1000.. ;重复执行段内代码1000次
段内代码 ;用选择语句可以随时跳出段来结束循环
段外代码
;定时程序的例子
100000.. ;修改k值即可修改定时时长
其他代码