求教,关于bitClear()这个函数
我发现 bitClear() 和bitSet() 好像起不了作用, 经常是设置或是清0以后,用 digitalRead()去读取还是会变动 ,下面是我的测试代码void printdelay()
{
Serial.println();
Serial.print("digi 13: ");
Serial.println(digitalRead(13));
Serial.print("digi 12: ");
Serial.println(digitalRead(12));
Serial.print("digi 11: ");
Serial.println(digitalRead(11));
Serial.print("digi 10: ");
Serial.println(digitalRead(10));
Serial.print("digi 9: ");
Serial.println(digitalRead(9));
Serial.print("digi 8: ");
Serial.println(digitalRead(8));
delay(500);
Serial.println();
}
void setup() {
Serial.begin(9600);
}
void loop() {
bitSet(PORTB, 0);
bitSet(PORTB,1);
bitClear(PORTB,2);
bitClear(PORTB,3);
bitSet(PORTB,4);
bitSet(PORTB,5);
printdelay();
}
如上面代码, 照理 这里输出应该是 110011, 可是输出偏偏是111011 ,
难道 bitClear 只能对其中一位进行清除置0吗? 道理很简单:
BitSet()设置的是输出寄存器。当这个引脚作为输出时,可以控制输出电平高低。
但是 digitalRead(8)是首先把引脚设置为输入模式,然后读取的是引脚上的实际电平,并非输出寄存器的内容。
如果你执意想读取原来设置的输出寄存器内容,那就不能用digitalRead(8),直接访问 PORTB 寄存器。
if (PORTB & (1<<3)) Serial.println("1") else Serial.println("0"); maidoo 发表于 2017-5-19 17:06
道理很简单:
BitSet()设置的是输出寄存器。当这个引脚作为输出时,可以控制输出电平高低。
但是 digit ...
:handshake 谢谢!
页:
[1]