소프트웨어 영역 내에서 필요한 고유 한 밝기 설정의 수가 너무 많지 않으면 데이터를 "비트 평면"형식으로 저장하고 다른 하드웨어 기반 답변에 설명 된대로 데이터를 저장하는 것이 도움이 될 수 있습니다 출력 루틴은 부울 연산자를 사용하여 한 번에 8 픽셀을 처리합니다. 효율성을 극대화하려면 PWM 사이클의 다른 부분에 사용되는 여러 개의 개별 출력 루틴이 필요합니다. 예를 들어, 4 비트 밝기 값을 사용하려면 다음과 같은 8 가지 루틴을 사용합니다.
movf bit0Comp, w; 비교의 비트 0에 따라 00 또는 FF 여야합니다 (클리어 인 경우 FF).
iorwf POSTINCF, w; 데이터의 비트 0; 항상 IORWF를 사용하십시오
andwf POSTINCF, w; 데이터의 비트 1; 비교의 비트 1이 설정된 경우 IORWF를 사용하십시오. 명확한 경우 ANDWF
andwf POSTINCF, w; 데이터의 비트 2; 비교의 비트 1이 설정된 경우 IORWF를 사용하십시오. 명확한 경우 ANDWF
andwf POSTINCF, w; 데이터의 비트 2; 비교의 비트 1이 설정된 경우 IORWF를 사용하십시오. 명확한 경우 ANDWF
movwf SPIREG; 결과 바이트 저장 (> = 비교 인 경우 비트 세트)
비교 값에 따라 IORWF와 ANDWF의 다른 조합을 사용합니다. 도시 된 바와 같이이 접근법을 사용하면, 4 개의 비트 모두가 디스플레이-시프트 루틴에 대한 호출들 사이에 기록되거나 픽셀-업데이트 루틴이 픽셀-업데이트 루틴을 결정하도록함으로써 플리커없이 PWM 사이클의 임의의 지점에서 픽셀 밝기 값을 업데이트 할 수 있음에 유의한다. 다음 시프트는 픽셀에 대해 "1"또는 "0"을 출력하고 픽셀의 모든 비트를 설정하거나 지우고 (어쨌든 어떤 작업을 하든지간에) 값이 반대 야 또한 디스플레이 업데이트의 타이밍을 변경하거나 PWM 사이클에서 두 개 이상의 비교 값을 사용하여 임의의 비선형 밝기 스케일을 달성 할 수 있습니다.