ソースコードをそのまま載せても見にくいので、動作手順を示すフローチャートを書いてみた。
割り込みはシリアル受信のために使うため、PWM生成のタイミングはメイン側で取る。
PWM1とPWM2の間の5ms待ちは、タイマを利用したウェイトとし、途中で割り込まれても周期を乱されにくい構成にする。
PWMの立ち上がり時は割り込み禁止とし、タイマー1のクリアと端子の立ち上がりを確実に行う。
PWMの立下りはCCP1のコンペアマッチ出力で制御するので、メイン、割り込み共に処理はしない。
PWM生成後、シリアル受信が完了していれば角度設定を行う。
タイマー1の1カウントは1usとしたので、500~2500の値を設定できるようにする。
これで大抵のメーカーのサーボは全角度振ることができる。
需要がありそうならこれもPCB起こそうかな。