У вас есть опечатка, которая заменила один оператор другим, который имеет аналогичную функцию. Таким образом, &&
гарантированно выдаст ответ 1, если оба его операнда логически верны. Поскольку вы почти наверняка тестируете с Data
, отличным от нуля, то это относится ко всем восьми итерациям вашего цикла.
Это может быть маскировка более тонкой проблемы. Я не знаю, какова ваша целевая архитектура, но если DataPin
является регистром шириной в один бит, то вам, вероятно, следует быть осторожным, чтобы не пытаться присвоить ему значения, отличные от 0 или 1. Один из способов добиться этого - написать DataPin = !!(Data & Mask);
. Другой - сдвинуть данные в другом направлении и использовать фиксированную маску 1.