fix input shift register reading

This commit is contained in:
2022-03-10 22:23:38 +01:00
parent 9d00d5c8d1
commit 071d13450d

View File

@ -22,6 +22,12 @@ public:
const unsigned char clk, const unsigned char serOut, const unsigned char parallelLoad):
_port(portReg), _pin(pinReg), _pinSerOut(serOut), _pinClk(clk), _pinParallelLoad(parallelLoad)
{
if constexpr(invert)
*_port &= ~(1<<_pinParallelLoad);
else
*_port |= (1<<_pinParallelLoad);
read();
}
bool getBit(unsigned char bit)
{
@ -34,13 +40,11 @@ public:
{
if constexpr(invert)
{
*_port &= ~(1<<_pinParallelLoad);
*_port |= (1<<_pinParallelLoad);
*_port &= ~(1<<_pinParallelLoad);
for(unsigned char i = 0; i < BITS; ++i)
{
*_port &= ~(1 << _pinClk);
bool value = *_pin & (1 << _pinSerOut);
if constexpr(invertInput)
value = !value;
@ -48,14 +52,13 @@ public:
data[i/8] |= (1<<(i%8));
else
data[i/8] &= ~(1<<(i%8));
*_port &= ~(1 << _pinClk);
*_port |= (1 << _pinClk);
}
}
else
{
*_port |= (1<<_pinParallelLoad);
*_port &= ~(1<<_pinParallelLoad);
*_port |= (1<<_pinParallelLoad);
for(unsigned char i = 0; i < BITS; ++i)
{
@ -69,6 +72,7 @@ public:
data[i/8] &= ~(1<<(i%8));
*_port &= ~(1 << _pinClk);
}
*_port |= (1<<_pinParallelLoad);
}
return data;
}