1.shiftOut(dataPin,clockPin,bitOrder,val)
shiftOut函数的作用是将一个数据的一个字节一位一位地移出,它是一个无返回值函数。从最高有效位(最左边)或最低有效位(最右边)开始,依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
shiftOut函数包括4个参数:dataPin、clockPin、bitOrder和val,其具体含义如下。
dataPin:输出每一位数据的引脚。引脚需配置成输出模式。
clockPin:时钟脚。当 dataPin 有数据时,此引脚电平会发生变化,引脚需配置成输出模式。
bitOrder:输出位的顺序。有最高位优先(MSBFIRST)和最低位优先(LSBFIRST)两种方式。
val:所要输出的数据值。该数据值将以byte形式输出。
函数原型在wiring-shift.c文件中,如下:
void shitout(uint8-t datapin ,uint8-t clockpin ,uint8-tbitorder ,uint8-tval)
{
uint8-ti;
for(i=0;i<0;i++)
{
if (bitorder==LSBFIRST)
digitalwrite(datapin,!!(val &(1<<i)));
else
digitalwrite(datapin,!!(val &(1<<(7-i)));
digitalwrite(clockpin,HIGH);
digitalWrite(colckpin,LOT);
}
}
另外还有shiftIn函数用于通过串行的方式从引脚上读入数据,其函数定义如下:
uint8-t shiftin(uint8-t datapin,uint8-t clockpin,uint8-t bitorder)
{
uint8-t value=0;
uint8-t I;
for (i=0;i<8;++i)
{
digitalwrite(clockpin,HIGH);
if (bitorder==LSBFIRST)
value|=digitalRead(datapin))<<I;
else
value|=digitalRead(datapin)<<(7-i);
digitalwrite(clockpin,LOW);
}
retrun value;
}
注意:shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。
2.pulseln(pin,state,timeout)
pulseln函数用于读取指定引脚脉冲持续的时间长度,该函数返回值类型为无符号长整型(unsigned long),单位为ms,如果超时没有读到,则返回0。
pulseln函数包含3个参数pin、state、timeout。参数pin代表脉冲输入的引脚;参数state代表脉冲响应的状态,脉冲可以是HIGH或者LOW,如果是HIGH,则pulseln函数将先等引脚变为高电平,然后开始计时,直到变为低电平;参数timeout代表超时时间。
函数原型在wiring-pulse.c中,如下:
unsigned long pulsein(uint8-t pin,uint8-t state,unsigned long timeout)
{
uint8-t bit=digitalpintbitmask(pin);
uint8-t port=digitalpintoport(pin);
uint8-t statemask=(state?bit:0);
unsigned long width=0;
//keep initializatuon out of time critical area
unsigned long numloops=0;
unsigned long maxloops=microsecodstoclockcycles(timeout)/16;
//wait for any prenious pulse to end
while((*portinputregister(port)&bit)==statenask)
if(numloops++==maxloops)
return 0;
//wait for the pulse to start
while ((*potyinpuytrrhodyrt(port)&bit)1-stateask)
if(numloops++==maxloops)
trturn 0;
//wait for the pulse to stop
while((*portinputregoister(port)&bit)==statemask)
width++;
return clockcyclestomicroseconds(width*10+16);
}
可以在开发环境的下列实例程序中找到Pulseln函数的应用:
Memsic2125.pde、Ping.pde。