タイマー0 / Phase Correct PWMモード / Waveform Generationモード1
pp.529-530
non-invertingモードでのデューティは(コンペア値)×2/(255×2) = (コンペア値)/255。だからFast PWMと違ってデューティ0%にできる(invertingモード時もデューティ100%にできる)。オーバーフローフラグは、昇って降りてBOTTOM時に立つ。
; スタックポインタの初期化マクロ .MACRO INITSTACK LDI R20, HIGH(RAMEND) OUT SPH, R20 LDI R20, LOW(RAMEND) OUT SPL, R20 .ENDMACRO INITSTACK ; OC0A (PD6)、OC0B (PD5)からPWM波を出力する。 LDI R20, (1 << PD6) | (1 << PD5) OUT DDRD, R20 ; コンペア値Aをセットする。 LDI R20, 51 OUT OCR0A, R20 ; コンペア値Bをセットする。 LDI R20, 102 OUT OCR0B, R20 ; Aはup-counting時にコンペアマッチでクリア、down-counting時にコンペアマッチでセットしてみる。 ; Bはup-counting時にコンペアマッチでセット、down-counting時にコンペアマッチでクリアしてみる。 ; Waveform Generationモード1 (Phase Correct PWMモード, TOP値は0xFF) LDI R20, (1 << COM0A1) | (1 << COM0B1) | (1 << COM0B0) | (1 << WGM00) OUT TCCR0A, R20 ; 8分周してカウントする。 LDI R20, (1 << CS01) OUT TCCR0B, R20