Di dalam ranah perangkat lunak, jika jumlah pengaturan kecerahan berbeda yang dibutuhkan tidak terlalu besar, mungkin berguna untuk menyimpan data dalam format "bit-planar" (seperti yang dijelaskan dalam jawaban berbasis perangkat keras saya yang lain) dan kemudian memiliki rutinitas keluaran menggunakan operator Boolean untuk bertindak pada 8 piksel sekaligus. Untuk efisiensi maksimum, ini akan memerlukan memiliki beberapa rutinitas keluaran terpisah, yang digunakan untuk berbagai bagian siklus PWM; misalnya, jika seseorang ingin menggunakan nilai kecerahan 4-bit, orang akan menggunakan delapan rutinitas formulir:
movf bit0Comp, w; Harus 00 atau FF tergantung pada bit 0 dari perbandingan (FF jika jelas)
untuk POSTINCF, w; Bit 0 data; selalu gunakan IORWF
dan jika POSTINCF, w; Bit 1 data; gunakan IORWF jika bit 1 dari comparand diatur; ANDWF jika jelas
dan jika POSTINCF, w; Bit 2 data; Gunakan IORWF jika bit 1 dari perbandingan dan diset; ANDWF jika jelas
dan jika POSTINCF, w; Bit 2 data; Gunakan IORWF jika bit 1 dari perbandingan dan diset; ANDWF jika jelas
movwf SPIREG; Simpan byte hasil
Orang akan menggunakan kombinasi IORWF dan ANDWF yang berbeda, tergantung pada nilai perbandingan. Perhatikan bahwa menggunakan pendekatan ini seperti yang diilustrasikan, seseorang dapat memperbarui nilai kecerahan piksel pada titik mana pun dalam siklus PWM tanpa berkedip, asalkan keempat bit tersebut ditulis di antara panggilan ke rutinitas display-shift, atau dengan meminta rutinitas pembaruan piksel menentukan apakah Pergeseran berikutnya akan menampilkan "1" atau "0" untuk piksel, dan baik pengaturan atau menghapus semua bit piksel (operasi mana pun yang akan membuatnya melakukan apa pun yang akan dilakukan) dan kemudian menulis bit apa pun yang nilainya harus bertentang. Perhatikan juga bahwa seseorang dapat mencapai skala kecerahan non-linear sewenang-wenang dengan memvariasikan waktu pembaruan tampilan, atau dengan menggunakan beberapa nilai perbandingan dan nilai lebih dari sekali dalam siklus PWM.