十、位方式的端口编程
控制机器人通常涉及对计算机或微控制器的端口之一个或多个输入/输出线(“位”)进行操控。
I/O端口的常见格局是8个位,即由8根单独的引脚组成。这与IBM PC兼容式计算机上的并行口的格局是一样的。该平行口提供8根数据线以便把字符发送给打印机或其他设备(还有少数的附加输入线和输出线用于传输控制和状态信息)。典型的微控制器或计算机的设计与相应的常用编程工具不容易直接操控一个端口的个别位。相反地,您必须每次操控整个端口,而且在这样做的时侯希望只改变想改变的一些位。另一种方法是同时向端口发送一个整值,对4位端口是0至15中的某一整值。这个值与您想控制的位正好对应。例如对于一个8位端口,数值54对应于二进制的00110110。
幸运的是,在对低价二进制位进行编程时,数值并不难转换为对应的二进制位,反之亦然。每种编程语言为这些子程序提供不同的实现方法,下面几节讲解使用Visual BasIC的简单方法。
其他的语言如C语言提供更可靠的位处理操作等。下面的程序码例子更偏重于教基本原理,而不是直接应用于机器人。请掌握好概念,并把它们用于特定的场合。
1.按二进制格式决定数字串代表的位
把二进制数表示为数字串,是表达半字节或字节信息的一种方便的方法。例如,“0010”是一个半字节,代表数值2:
另一个例子:数值11表示为4位的二进制数串“0010”
有许多编程方法可以确定二进制格式各个位的取值。例如,您可能想确定在0至15中的任何一个二进制等效值每个位是O还是1。您可以制作一个速查表,其中列出0到15的16个数和对应的二进制等效值。但是,您可以想采用其他的一些方法,即利用编程语言所提供的命令和语句来完成转换。
一种方法是使用这里介绍的Mid语句来分析位串的每一位,最后返回字符的二进制值。这个程序是VisualBasic兼容型程序,它把每位的值(0或1)依次放入4单元的数组Bit(0)到Bit(3)中。虽然这个例子只说明4位的二进制串如何找到,这种方法同样可以应用于8位或16位的二进制串。
这个程序的工作部分是For循环。它与Mid语句配合,把串内的每个字符(本例是“0110”)分解到数组的4个单元中。Val语句把分离出来的串字符变成数字。