以下是我做的一个由计算机向一外置的存储寄存器传输数据的操作实验,以让我获得对计算机传输数据过程和其内在的实质的理解,可以说,这个实验的内涵就是所有计算机传输数据的根本原理。该实验是由以Arduino单板计算机向安置在该计算机以外的一个数据寄存器传输数据。向寄存器的传输是串行口传输,而寄存器收取数据后,又以并行口向外转输出数据,接受这些由寄存器传来的数据的终端是8个发光二极管,每个发光二极管链接8位并行出口中的一个位。为什么是数字8呢?因为这个传输是以字节进行传输,8个数位为一个字节。而实现这个过程的根本灵魂就是操作指令,即,程序。看下面相关的操作程序和解读。见图。 以上程序先指定出计算机的时钟、数据输出口,并指定一个闸门输出口(latch),和定义一个数位数为8位的二进制数字变量light。这个“闸门口”是我对这个输出口latch的表达称谓。 程序指定计算机的这三个口都是输出口。然后进入无限循环程序。在这个无限循环程序中,light先被置零,然后执行函数程序renewsending()。这个函数程序先对那个闸门口进行“关闸”,然后,计算机内置的函数程序shiftOut开始启动,向那寄存器输出要传输的数据和时钟脉冲,数据脉冲与时钟脉冲信号在寄存器内进行逻辑“与”运算,所得出的结果就是要传出的数据。当这个过程完成,闸门口开启,所传数据被复制到寄存器中的存储寄存器中,并向作为这个存储器的终端接受器的发光二极管传输数字信号电压。当这个要传输的数据为零时,寄存器向二极管输出的电压为低电平,即为零,所以二极管不发光。这次的函数程序renewsending()指令完成后,再回到循环程序中,执行循环程序中的下一个指令,即,开启计算机内置的bitSet程序。这个程序是对那个8位数据light进行写入,从最低位开始,共写八次,每次都向前进一位,并都是写入二进制的1,而且,每次写入后,都要再执行函数程序renewsending(),使得所写入的数据都传至寄存器中。 当1被写入寄存器中,即,寄存器相应的并行连接口被赋予1,即,高电平时,发光二极管便发光,随着数据1不断依次地被写入各个位数上,那些发光二极管也因此依次开始发光。当8次数传输完毕后,即,这8位二进制数是11111111,8盏发光二极管灯全亮,程序里的那循环程序又开始新一轮的循环,从一开始的清零运动开始,所有发光二极管都灭灯,一切又从头开始,以此无限地进行往复。
这8位二进制数11111111等于十进制数字255。
我认为,这个程序的实质可以解释PC中主板上的内存条的原理,和显示卡中的显示内存的工作原理。
|