购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.6.3 高级IO

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。 OVJzj3iaHcv5s0m1ZlLHWFe3Zc+xJF5lJM4pCbkBlU9BdJBByDlf1nWvOZhwea2X

点击中间区域
呼出菜单
上一章
目录
下一章
×