電子書籍の厳選無料作品が豊富!

タイトルのことについて、0.08(ms)から0.3(ms)くらいで簡単に調整可能なプログラムを作成したいのですが、調整可能というのがネックになってよく分からないので教えていただきたいです。
PIC16F84です。発振子は20(MHz)です。プログラムリストを示していただけるとうれしいです。
よろしくお願いいたします。

A 回答 (2件)

PICは1サイクルを4クロックで実行します。

従って1サイクル実行するには、50ns*4=200nsecです。

CNT1;-----------カウント値1
CNT2;-----------カウント値2

L1;-------------ループカウンタ1
L2;-------------ループカウンタ2

とします。


MOVF CNT1,W;---------WにCNT1を読み込む(1)
MOVWF L1;-------------L1にCNT1をセット(2)
LB1
MOVF CNT2,W;---------WにCNT2を読み込む(3)
MOVWF L2;-------------L2にCNT2をセット(4)

LB2
DECFSZ CNT2,F;-------CNT2を減算、0ならスキップ(5)
GOTO LB2;------------(6)

DECFSZ CNT1,F;-------CNT1を減算、0ならスキップ(7)
GOTO LB1;------------(7)

RETUEN;---------------(8)


MOV命令は1サイクルです。
GOTO命令は2サイクルです。
DECFSZ命令はスキップする場合2サイクル、スキップしない場合は1サイクルです。

CNT2を調整して(3)~(6)で0.01mSECのwaitを作っておけば、CNT1を変更するだけで、0.08~0.3msecのwaitを作れます。正確さを求めるのであれば、内側ループ内にNOP命令などを入れて、若干調整が必要かもしれません。
    • good
    • 0
この回答へのお礼

CNTの数値を変えればいいんですね!分かりました!ありがとうございます。

お礼日時:2004/05/29 00:33

;***************************


; Timer Subroutines
;***************************
; 0.4msec Timer Subroutine
TIM10
MOVLW 0F9H ;1
MOVWF CNT1 ;1+1=2
TIMLP1NOP
DECFSZ CNT1,F ;1+1+2=4
GOTO TIMLP1 ;2+4*249-1=997
RETURN ;997+1=998*0.4usec=0.4msec

下記のURLのサンプルから引っ張って来ました。
あとはご自身で宜しく。

参考URL:http://www.picfun.com/picframe.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。参考になりました。

お礼日時:2004/05/29 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!