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