アバウトなタイマーです  1mSから255mS迄一つのサブルーチンで済みますが  精度はアバウトです  色々な遅延時間を使用する時に便利です  但し発振周波数がMHzの整数倍の時に限ります W EQU 0 F EQU 1 COUNT1 EQU H'**' COUNT2 EQU H'**' OSC EQU H'**' COUNT4 EQU H'**' COUNT5 EQU H'**' MOVLW D'OSC' ;最初に発振周波数(MHz)をセットして MOVWF OSC ;おきます MOVLW D'TIME' ;必要な遅延時間(mS)を「W」レジスタに CALL TIMER ;セットしてサブルーチンを呼びます TIMER MOVWF COUNT5 ;1mS少のサブルーチンを LOOP5 MOVF OSC,W ;整数倍しているだけです MOVWF COUNT4 LOOP4 CALL MS1 DECFSZ COUNT4,F GOTO LOOP4 DECFSZ COUNT5,F GOTO LOOP5 RETURN MS1 MOVLW D'79' ;1mS少のサブルーチンです MOVWF COUNT1 MOVLW D'1' MOVWF COUNT2 LOOP2 DECFSZ COUNT1,F GOTO LOOP2 DECFSZ COUNT2,F GOTO LOOP2 NOP RETURN  上記プログラムの誤差を調べてみました(各mS)  設定値    1      10      250  4MHz  1.012    10.05     251.0   8MHz  1.006    10.02     250.5  20MHz  1.002    10.01     250.2