Якщо в межах програмного забезпечення кількість потрібних параметрів яскравості не надто велика, це може бути корисно для зберігання даних у "біт-планарному" форматі (як описано в моїй іншій апаратній відповіді), а потім мати вихідні процедури використовують булеві оператори, щоб діяти на 8 пікселів одночасно. Для максимальної ефективності для цього потрібно мати кілька окремих вихідних процедур, які використовуються для різних частин циклу ШІМ; Наприклад, якщо потрібно використовувати 4-бітні значення яскравості, можна використовувати вісім підпрограм форми:
movf bit0Comp, w; Повинен бути 00 або FF залежно від біта 0 порівняння (FF, якщо ясно)
iorwf POSTINCF, w; Біт 0 даних; завжди використовуйте IORWF
andwf POSTINCF, w; Біт 1 даних; використовувати IORWF, якщо встановлено біт 1 порівняння; ANDWF, якщо ясно
andwf POSTINCF, w; Біт 2 даних; Використовуйте IORWF, якщо встановлено біт 1 порівняння; ANDWF, якщо ясно
andwf POSTINCF, w; Біт 2 даних; Використовуйте IORWF, якщо встановлено біт 1 порівняння; ANDWF, якщо ясно
movwf SPIREG; Зберегти отриманий байт (біти встановлені, якщо> = comparand)
Можна використовувати різні комбінації IORWF та ANDWF, залежно від значення компаранда. Зауважте, що, використовуючи такий підхід, як показано на малюнку, можна оновити значення яскравості пікселів у будь-якій точці циклу ШІМ без мерехтіння, за умови, що всі чотири біти записуються між викликами до режиму зсуву дисплея або, якщо програма оновлення пікселів визначає, чи наступний зсув виведе "1" або "0" для пікселя, а також встановивши або очистивши всі біти пікселя (залежно від того, яка операція змусить його робити все, що він збирався зробити), а потім записати будь-які біти, значення яких повинно бути бути протилежним. Зауважте також, що можна домогтися довільних масштабів нелінійної яскравості, змінюючи терміни оновлень дисплея або використовуючи деякі порівняльні значення більше ніж один раз у циклі ШІМ.