roboBASIC命令手册汇编.docx
《roboBASIC命令手册汇编.docx》由会员分享,可在线阅读,更多相关《roboBASIC命令手册汇编.docx(91页珍藏版)》请在冰豆网上搜索。
roboBASIC命令手册汇编
roboBASICv2.10命令手册
第一章roboBASIC命令概要
命令概要
roboBASIC语言以通用BASIC编程语言为基础,为了方便控制机器人而开发的专用性编程语言,是(株式社会)迷你机器人公司研制并登记注册的编程软件。
roboBASIC语言与BASIC语言相比,其最大特点是添加了方便控制机器人的专用命令。
与声明/定义相关的命令
DIM
声明变量
AS
在声明变量时指定变量类型
CONST
声明常量
BYTE
声明变量时定义为字节类型
INTEGER
声明变量时定义为整型
流程控制命令
IF
条件语句开始
THEN
条件语句为真时执行下一条语句
ELSE
条件语句为假时执行下一条语句
ELSEIF
开始另一个条件语句
ENDIF
条件语句结束
FOR
循环语句开始
TO
指定一条循环语句的循环次数范围
NEXT
循环语句结束
GOTO
无条件转移
GOSUB
调用子程序
RETURN
从子程序返回
END
结束程序
STOP
停止程序执行
RUN
连续执行程序
WAIT
等待直到程序完成
DELAY
延迟一定时间再执行程序
BREAK②
暂停程序执行并转换到调试模式
数字信号输入输出命令
IN
从输入端口读取数据
OUT
发送信号到输出端口
BYTEIN
从输入端口读取字节型数据
BYTEOUT
发送字节型数据到输出端口
INKEY②
从输入端口输入键值
STATE
输出端口状态
PULSE
发送脉冲信号到输出端口
TOGGLE
反转输出端口状态
KEYIN③
接受模拟键盘输入
与存储有关的命令
PEEK
从控制器RAM中读取数据
POKE
写数据到控制器RAM中
ROMPEEK
从控制器外部EEPROM中读取数据
ROMPOKE
写数据到控制器外部EEPROM
与LCD相关的命令
LCDINIT
初始化LCD模块
CLS
清除LCD模块中所有字符
LOCATE
设置在LCD模块中文字显示位置
PRINT
在LCD模块中显示文字
FORMAT
设置LCD模块的数据显示格式
CSON
在LCD模块中显示光标
CSOFF
在LCD模块中隐藏光标
CONT
设置LCD显示屏上文字显示亮度
DEC
输出十进制数到LCD
HEX
输出十六进制数到LCD
BIN③
输出二进制数到LCD
操作数相关操作
AND
使用逻辑与条件表达式
OR
使用逻辑或条件表达式
MOD
求余
XOR
使用逻辑异或条件表达式
NOT③
对所有位求反
与电机控制相关的命令
ZERO
设置电机0点(中心点)
MOTOR
开启电机
MOTOROFF
关闭电机
MOVE
同时操作多个电机
SPEED
设置电机速度
ACCEL②
设置电机加速度
DIR
设置电机方向
PTP
开启/关闭同时电机控制操作
SERVO
控制单个电机
PWM
直流电机的脉冲宽度控制
FASTSERVO②
以最大速度转动伺服电机
HIGHSPEED③
开启/关闭伺服电机的高速模式
MOVEPOS③
根据声明的位置转动电机
POS③
设置机器人特定姿势
FPWM③
改变脉冲宽度和频率
MOVE24③
同时操作24个电机
INIT③
设置初始运动姿态
MOTORIN③
读取电机当前位置值
AIMOTOR③
设置使用AI电机
AIMOTOROFF③
取消使用AI电机
AIMOTORIN③
读取AI电机当前位置值
SETON③
设置使用setup功能
SETOFF③
退出setup功能
ALLON③
对所有电机设置setup功能
ALLOFF③
退出对所有电机的setup功能
GETMOTORSET③
读取电机当前值并保持当前位置
MOTORMODE④
设置电机模式
电机组分配相关参数
G6A③
将0-5号电机分配给A组
G6B③
将6-11号分配给B组
G6C③
把12-17分配给C组
G6D③
把18-23分配给D组
G6E③
把24-29分配给E组
G8A③
把0-7分配给A组
G8B③
把8-15分配给B组
G8C③
把16-23分配给C组
G8D③
把24-31分配给D组
G12③
分配0-11号伺服电机
G16③
分配0-15号伺服电机
G24③
分配0-23号伺服电机
G32③
分配0-31号伺服电机
与声音控制相关的命令
BEEP②
用压电蜂鸣器发出警告声
SOUND②
用压电蜂鸣器发出声音
PLAY②
用压电蜂鸣器播放歌曲
MUSIC③
用压电蜂鸣器播放音乐
TEMPO③
设置声音节奏
与外部通信相关的命令
RX②
通过RX端口接收RS232信号
TX②
通过TX端口传输RS232信号
MINIIN②
通过mini通讯端口接收miniBUS信号
MINIOUT②
通过mini通讯端口传输miniBUS信号
ERX③
通过RX端口接收RS232信号
ETX③
通过TX端口传输RS232信号
模拟信号处理相关命令
AD③
从AD端口读取模拟信号值
REMOCON③
从红外远程控制器中读取按键值
SONAR③
从超声波端口读取距离
RCIN③
从RC(遥控器)读取输入值
GYRODIR③
根据陀螺仪(gyro)输入的设置电机转动方向
GYROSET③
给电机组分配相应的陀螺仪进行控制
GYROSENSE③
设定相对应电机组里电机的陀螺仪传感器灵敏度
处理跳转命令
ON...GOTO
根据变量值进行相应跳转
其它命令
RND
产生一个随机数
REMARK
文本注释开头标记
伪命令
'$DEVICE
设置控制器由正在运行的程序来操作
'$LIMIT③
限制电机转动范围
'$INCLUDE④
文件包含
注:
②表示该命令在MR-C2000系列控制器中使用
③表示该命令在MR-C3000系列控制器中使用
④表示该命令在MFC3024FX控制器中使用
第二章roboBASIC语法概要
由于roboBASIC语法是基于通用BASIC编程语言之上的,因此roboBASIC类似于BAISC语言。
以下主要叙述roboBASIC的常见语法。
标识符集
roboBASIC标识符集由汉字、英文字母、数字和特殊文字组成。
列于下表中的符号,在roboBAISC语言中具有其特殊含义。
符号
说明
+
加
-
减
*
乘
/
除
%
求余
.
位指定号
&
数字
?
?
文本
?
?
字符串
:
标志
=
相等或赋值
<
小于
>
大于
<<
位左移
>>
位右移
表达式及运算符
表达式是可以计算出数值的组合,该组合由常数、变量以及数字与可用操作运算符连接组成。
运算符对给定值执行算术或者逻辑运算。
在roboBASIC语言中,运算符分类如下表所示。
类别
功能
算术运算符
执行算术计算
关系运算符
比较数值大小
逻辑运算符
比较组合条件或者执行位运算
位运算符
按位运算
算术运算符
算术运算符是执行计算的标识符。
和一般BASIC语言一样,+、-、*、/、%(或MOD)在roboBASIC中也可以使用,但在roboBASIC和BASIC间有些不同的地方。
1)运算符中没有优先级
在roboBAISC中,不准使用括号()运算符号。
例:
A=1,B=2,C=3
对于常规的BAISC语言,A+B*C=1+2*3=1+6=7,即乘法优先于加法。
对于该式,如果要先进行加法,则需要把该式改为(A+B)*C;
而对于roboASIC语言,运算符没有优先级,按顺序从左往右运算,如A+B*C=1+2*3=3*3=9;
2)复杂的数学计算会产生意想不到的错误
因此,复杂数学计算式应该分解为2次或3次计算。
例:
D=A*B+C(通过)
F=A*B/C*D+E(避免复杂算术计算)
3)roboBASIC只支持字节类型(BYTE)和整型(INTEGER),因此输出的小数点将被忽略。
求余计算使用%或MOD,输出结果为余数。
关系运算
关系运算符用来比较两个值。
数值比较结果为TRUE或FALSE。
数值比较结果主要用于IF语句中的程序流向控制。
运算符
关系
表达式
=
等于
A=B
<>
不等于
A<>B
<
小于
A
>
大于
A>B
<=
小于等于
A<=B
>=
大于等于
A>=B
当算术运算和逻辑运算组合到一个式子里时,算术运算符优先于逻辑运算符。
逻辑运算
逻辑运算符用来逻辑比较组合条件。
计算结果返回TRUE或FALSE。
输出用来于IF条件语句的控制程序流向。
运算符
说明
AND
与
OR
或
XOR
异或
每个运算的输出如下表所示。
下表中的“T”代表TRUE,“F”代表FALSE
X与Y的值
结果
X
Y
XANDY
XORY
XXORY
T
T
T
T
F
T
F
F
T
T
F
T
F
T
T
F
F
F
F
F
位运算
位运算可以为机器人控制器中每个变量执行计算,这样更容易对输入/输出端口进行按位控制。
位运算有位或(OR)、位与(AND)以及位异或三类。
在roboBASIC语言中,运算符左移“<<”、右移“>>”和“.”用来移动某一位到指定位置。
设A的值为33(二进制形式为00100001),B的值为15(二进制形式为00001111),对两数使用相应的位运算符时可得到以下结果。
运算
结果
AANDB
1(00000001)
AORB
47(00101111)
AXORB
46(00101110)
A<<1
66(01000010)
A>>1
16(00010000)
A.0
1(A的第0位)
同一条指令中使用多个运算符时,将以下顺序计算。
1)算术运算/位运算
2)关系运算
3)逻辑运算
数字、变量、常数以及其它语法解释
因为roboBASIC为控制硬件专门开发的语言,所以不支持通用BAISC所支持的与字符串相关的变量或者常量。
数据类型
roboBASIC语言中,数据类型分为字节类型与整型两类。
相对应数据类型的数值范围如下表所示。
数字类型
存储大小
范围
字节型(BYTE)
1个字节(8位)
0~255
整型(INTEGER)
2个字节(16位)
0~65535
RoboBASIC语言不支持负数。
因此,运算表达式中不可以在数字之前添加“+”与“-”来表示正负数,否则表达式运算会出错。
变量声明应选用合适的数字类型,以便于节省存储空间。
进制数
由于roboBASIC用来控制硬件,因此使用十六进制数、二进制数以及八进制数比使用十进制数更为方便。
在roboBASIC中,可以使用二进制数(BIN)、八进制数(OCT)、十进制数(DEC)以及十六进制数(HEX),各个进制数的表示方法如下表所示。
进制数
声明
可用数字
例子
二进制数
&B
0,1
&B111101
八进制数
&O
0,2,…,7
&O75
十进制数
无
0,1,2,…,9
61
十六进制数
&H
0,1,2,…,9,A,B,…F
&H3D
常量和变量
在程序执行过程中,常量的值不发生变化。
roboBASIC语言可定义类似于字节类型(BYTE)和整型(INTEGER)的常量。
常量类型根据数的范围自动确定。
一旦常量被定义,就不能再被定义了。
定义常量对程序大小没有影响。
当使用某些频繁的数字时,可把它们定义为常量,这样程序修改会变得更为方便可靠。
例如:
CONSTOFF=0
CONSTmotor_1=3
CONSTmotor_1_speed=200
用于程序中的变量是数据存储位置的名字。
在迷你机器人控制器中,使用的变量数是有限,因此变量声明应设计为在符合对象要求的情况下使变量所占用的存储量最小。
DIMmotor_1_delayASINTEGER
DIMsensor_leftASBYTE
声明常量或变量时,遵守以下规则:
1)首字母用英语字母或者汉字。
汉字、英文、数字与“_”可用在变量名和常量名中。
2)常量名和变量名的长度不可超过64个字符。
3)相同常量名和变量名只能声明一次,即不能重复声明,不区分大小写。
4)声明的常量值不得超过65535,否则会出错
位运算
roboBASIC使用的变量可进行位运算。
位运算可使用位指定符“.”,可指定字节变量的0~7位或者整型变量的0~15。
位运算必须使用变量或者常量作为操作数。
例:
DIMAASINTEGER
CONSTBIT_2=2
A.1=1
A.BIT_2=0
A.3=IN
(1)‘从端口1读数并赋给整型变量A的第三位
OUT2,A.1‘将A的第一位的值传给端口2
注释语句
在编写程序时,适当穿插代码注释可便于程序的有效管理与创建。
为了在程序中插入注释性语句,需要在注释性语句前添加“’”或者“REMARK”命令。
在程序编译过程中,会自动忽略注释性语句,因此不会影响程序的执行。
赋值(=)
赋值语句用来给变量赋值,使用符号“=”。
赋值(=)符号的左边为被赋值的变量,其右边为变量、字符串、表达式或者函数。
例:
A=B'变量B的值赋给变量A
A.1=1'给变量的指定位赋值
A=ADIN(0)'运用函数给变量赋值
A=3*2-1'数值运算式给变量赋值
A=C+B-A'变量运算式给变量赋值
A="1"'字符串赋值给变量
行标记
行标记用来指示指令在整个程序里的位置。
行标记由字母和数字组成,可分为文字标记名与数字标记名两类。
行标记的使用规则如下:
1)文字标记名不得超过64个字符,第一个字符必须为汉字或者英文。
2)文字标记名后必须用标记符号“:
”
3)数字标记名可使用0~65535之间的数字,不需要标记符“:
”
4)标记名不得重复声明,不分大小写
通常,行标记用于程序流程控制,如GOTO命令与GOSUB命令。
例:
DIMAASINTEGER
START:
A=IN(0)
IFA=0THEN
GOTOSTART
ELSE
GOSUB10
END
GOTOSTART
10OUT1,0
DELAY100
OUT1,1
RETURN
第三章声明命令的说明
这些指令用于声明定义变量和常量。
DIM…AS
声明变量
命令格式
1.单一变量声明:
DIM[变量名]AS[变量类型]
2.多变量同时声明:
DIM[变量名]AS[变量类型],[变量名]AS[变量类型],….
命令说明
在roboBASIC编程语言中,变量使用之前必须使用DIM进行变量的强制声明,另外须用AS来指定所声明的变量类型。
变量的命名按变量命令规则来命名。
变量不能重复声明定义。
变量用来接收处理传感器采集信号值或者模拟信号的转换值。
因此合适的使用变量,可使程序的创建更加灵活。
可使用的变量数目根据每个机器人控制器类型来定。
MR-C2000系列用于存储变量的空间大小少于30字节。
MR-C3000系列用于存储变量的空间大小少于254字节。
字节型变量所需存储空间为1个字节,整型变量所需存储空间为2个字节,因此必须合理的声明定义变量以免产生变量存储空间的不足。
命令示例
DIMIASINTEGER'声明整型变量I
DIMJASBYTE'声明字节型变量J
CONST
声明常量
命令格式
COSNT[常量名]=数字
命令说明
为有特定意义或者经常使用的数值指定常量名可以简化程序的编写工作。
相对于数字与变量,使用常量有以下优点:
1)常量一经定义,整个程序都可使用
2)常量不会由于失误而改变常量值
3)容易修改
4)常量不会占用大量的存储空间
命令示例
CONSTOFF=0'声明常量OFF=0
CONSTA=&B1001'声明常量A为二进制数1001,即十进制数9
第四章流程控制命令的说明
这些命令用于控制或者执行程序的流程
IF…THEN
条件判断语句
命令格式
1.单一条件(多行形式)
IF[条件]THEN
[条件为真时的执行语句]
ENDIF
或者(单行形式)
IF[条件]THEN[条件为真时的执行语句]
2.两个条件(多行形式)
IF[条件]THEN
[条件为真时的执行语句]
ELSE
[条件为假时的执行语句]
ENDIF
或者(单行形式)
IF[条件]THEN[条件为真时的执行语句]ELSE[条件为假时的执行语句]
3.多重条件
IF[条件1]THEN
[条件1为真时的执行语句]
ELSEIF[条件2]THEN
[以上条件为假且条件2为真时的执行语句]
...
ELSEIF[条件n]THEN
[以上条件为假且条件n为真时的执行语句]
ELSE
[以上条件都为假时的执行语句]
ENDIF
命令说明
当IF…THEN语句被执行时,首先判断IF的条件。
如果这个条件为真,那么THEN后面的语句将被执行。
如果这个条件为假,则按顺序判断紧接着的ELSEIF条件,如果条件为真,则执行THEN后面的语句,如果都为假,则进行最后的ELSE条件语句。
这里的ELSEIF可根据需要决定是否需要添加。
在roboBASIC语言中,为了按照外部输入来进行操作以及保存来自外部值到某一变量中,条件语句IF…THEN是不可或缺的。
条件语句判断变量的值,并且根据该变量的值使机器人做相应的动作。
命令示例
1)条件语句中条件与语句的执行很简单。
两种放在同一行。
IFA>0THENB=5
IFA<5THENB=0ELSEB=1
2)IF语句中的条件可以是条件表达式,当用关系运算符时可使用两种条件。
IFA>0ANDA<5THENB=3
IFA=7ORA=9THENB=1
3)复杂形式的IF语句使用例子
IFA=1THEN
B=2
C=3
ELSEIFA=3ANDA=5THEN
B=1
C=2
ELSEIFA=8THEN
B=6
C=0
ELSE
B=0
C=0
ENDIF
FOR…NEXT
按照给定的次数循环执行
命令格式
FOR[循环次数变量]=[起始值]to[终值]
[循环语句]
NEXT[循环次数变量]
命令说明
[循环次数变量]为循环的次数变量。
[起始值]为循环次数变量的初始值,[终值]为循环次数变量的终值。
数字、常量以及变量都可以作为[起始值]与[终值]。
在roboBASIC中,[终值]必须大于[起始值]。
循环次数变量会随着程序的执行逐步的增加。
FOR…NEXT语句的使用必须符合以下规则:
1)FOR…NEXT语句能嵌套在另一个FOR…NEXT语句中。
FORI=1TO10
FORJ=1TO5
……..
NEXTJ
NEXTI
2)当使用多个FOR…NEXT语句时,NEXT[循环次数变量]必须按照相对应的FOR顺序排列。
不正确
FORI=1TO10
FORJ=1TO5
……..
NEXTI
NEXTJ
正确
FORI=1TO10
FORJ=1TO5
……..
NEXTJ
NEXTI
尽管在不正确的例子中循环变量的顺序发生改变,但是该错误不影响程序目标代码的生成,但是当该目标代码下载到迷你机器人的控制器内时将发生不可预料的结果
3)FOR…NEXT语句不允许从循环体外进入循环体内,但允许从循环体内跳出到循环体外。
可以
正确
FORI=1TO10
IFI=5THEN
GOTO20
ENDIF
NEXTI
……………….
20……………
不可以
不正确
GOTO40
……………….
FORI=1TO10
……………
40……………
NEXTI
4)[循环次数变量]、[起始值]以及[终值]不能在FOR…NEXT循环语句中武断的改变。
命令示例
连接LED到控制器的0号端口,并使它闪烁5次。
DIMAASBYTE'声明循环语句中所需的循环次数变量
FORA=1TO5'重复次数5次
OUT0,0'点亮LED
DELAY100'延时0.1s
OUT0,1'关闭LED
DELAY100'延时0.1s
NEXTA
GOTO
跳转到指定位置
命令格式
GOTO[行标志]
命令说明
GOTO命令通过跳转到代码中的指定行而改变程序的执行流程。
由于GOTO命令会使程序极度地复杂化,因此不要频繁地使用该语句。
命令示例
DIMIASINTEGER
DIMJASBYTE
I=7
IFI=6THENGOTOL1
……………………..
L1:
J=1
OUTI,J
GOSUB…RETURN
调用子程序并返回
命令格式
GOSUB[行标志]
………………..
[行标志:
]
………………...
RETURN
命令说明
GOSUB命令调用频繁使用的子程序,然后返回。
运用这种方法,GOSUB语句可以使程序更小更灵活。
在一个子程序可以在调用第二个子程序。
在MR-C2000系列中,该类嵌套不得超过4次;在MR-C3000系列中,该类嵌套不得超过5次。
否则,会发生错误。
命令示例
DIMLED_PORTASINTEGER
LED_PORT=1
START:
…………………...
……………………
GOSUBLED_TOGGLE
……………………..
GOTOSTART
END
LED_TOGGLE:
TOGGLELED_PORT
`RETURN
END
结束程序的运行
命令格式
END
命令说明
当控制器开启2s后,存于EEP