gpt4 book ai didi

c - native c中的arduino `shiftOut()`函数

转载 作者:行者123 更新时间:2023-12-02 17:34:48 24 4
gpt4 key购买 nike

我正在尝试在我的 MCU 上的 native c 中创建与 arduino shiftOut() 函数等效的功能。

我想通过带有 MSBFIRSTshiftOut() 类型函数发送命令 int gTempCmd = 0b00000011;

这个伪代码会是什么样子,以便我可以尝试将其映射到我的 MCU 的 gpio 功能?

谢谢

float readTemperatureRaw()
{
int val;

// Command to send to the SHT1x to request Temperature
int gTempCmd = 0b00000011;

sendCommandSHT(gTempCmd);
...
return (val);
}


//Send Command to sensor
void sendCommandSHT(int command)
{
int ack;

shiftOut(dataPin, clockPin, MSBFIRST, command);
....
}

最佳答案

考虑以下“psuedo-c++”

代码的工作原理如下:

  • 通过与除 MSB 或 LSB 之外的全零进行 AND 运算,获取字中的最高位或最低位,具体取决于 MSBFIRST 标志
  • 将其写入输出引脚
  • 将命令向右移动一步
  • 对时钟引脚施加脉冲
  • 对命令中的每一位重复 8 次

通过添加重复次数参数将其扩展为任意位数(最多 32 位)是相当简单的

void shiftOut(GPIO dataPin, GPIO clockPin, bool MSBFIRST, uint8_t command)
{
for (int i = 0; i < 8; i++)
{
bool output = false;
if (MSBFIRST)
{
output = command & 0b10000000;
command = command << 1;
}
else
{
output = command & 0b00000001;
command = command >> 1;
}
writePin(dataPin, output);
writePin(clockPin, true);
sleep(1)
writePin(clockPin, false);
sleep(1)
}
}

关于c - native c中的arduino `shiftOut()`函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36401027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com