3 段構成 プログラム (50mS以上に適します) W EQU 0 F EQU 1 COUNT1 EQU H'**' COUNT2 EQU H'**' COUNT3 EQU H'**' CALL DAN3 ;2 DAN3 MOVLW D'**' ;1 MOVWF COUNT1 ;1 MOVLW D'**' ;1 MOVWF COUNT2 ;1 MOVLW D'**' ;1 MOVWF COUNT3 ;1 LOOP3 DECFSZ COUNT1,F ;1(2) GOTO LOOP3 ;2 DECFSZ COUNT2,F ;1(2) GOTO LOOP3 ;2 DECFSZ COUNT3,F ;1(2) GOTO LOOP3 ;2 NOP ;注 NOP ;注 RETURN ;2 ;--------------------------------------------------- ;16 注)NOP は精密調整用です、最終的に精度を要する場合挿入します 必要サイクル数(SUM)=TIME(μS)*発振周波数(MHz)/ 4 SUM=固定分 10      1段分 (3*COUNT1)-1      2段分 (770*COUNT2)-768      3段分 (196352+3)*(COUNT3-1)+2       (196355*COUNT3)-196353 SUM=(3*COUNT1)-1 + (770*COUNT2)-768  +(196355*COUNT3)-196353 =(3*COUNT1)+(770*COUNT2) +(196355*COUNT3)-197122 COUNT3=(SUM+197122) / 196355 小数点以下切捨て COUNT2=((SUM+197122)-(196355*FIX(COUNT3)))/770 小数点以下切捨て 計算した COUNT2 が 256 になった時は 0 を設定します 計算した COUNT2 が 0 の時 COUNT2を 256 と見做して COUNT3 を -1 し設定します   COUNT1=((SUM+197122)-(770*FIX(256)    -(196355*FIX(COUNT3-1))) / 3 計算した COUNT2が 0 以外の時  COUNT1=((SUM+197122)-(770*FIX(COUNT2))    -(196355*FIX(COUNT3))) / 3 計算した COUNT1 が 256 になった時は 0 を設定します 計算した COUNT1 が 0 の時は COUNT2 を -1 します 小数点のある時は四捨五入 (NOP未使用時) 少数点部分切捨て     (NOP使用時) MIN COUNT1=COUNT2=COUNT3=1 SUM=16 MAX COUNT1=COUNT2=COUNT3=0 SUM=50,267,646 実測を行いましたところ、この段に限りほんの少しの誤差を表示する 組み合わせがあります 測定器の分解能の限界なのか「アルゴリズム」の錯誤なのかは不明です どなた様か確認、検証を行っていただけませんでしょうか