呼び出し方

MOVLW	D'10'				; 10ms (10をWレジスタに入れて)
CALL	WAIT_1msec_w			; サブルーチンをCALL

プログラム

汎用メモリー確保

WAIT_COUNT	EQU		0x50	; 汎用1msecタイマー用 その1
WAIT_COUNT2	EQU		0x51	; 汎用1msecタイマー用 その2

サブルーチン本体

WAIT_1msec_w

	MOVWF	WAIT_COUNT2				; カウント数セット 1msec × n 回

WAIT_1msec_LOOP

	; PICのクロック周波数によってカウント数を変える ※→
	; CLK =  2MHz … 1cycle = 2μsec ,   COUNT = 25
	; CLK =  4MHz … 1cycle = 1μsec ,   COUNT = 50
	; CLK =  8MHz … 1cycle = 0.5μsec , COUNT =100
	; CLK = 16MHz … 1cycle = 0.5μsec , COUNT =200
	; CLK = 20MHz … 1cycle = 0.5μsec , COUNT =250
	; 但しカウント数セットとreturnは除く(ゆえに、だいたいタイマー)

	; 1m秒待ち部分
	MOVLW	D'50'					; カウント数セット ←※
	MOVWF	WAIT_COUNT

	NOP						; 1cycle
	NOP						; 1cycle
	NOP						; 1cycle
	NOP						; 1cycle
	NOP						; 1cycle
	NOP						; 1cycle
	NOP						; 1cycle
	NOP						; 1cycle
	DECFSZ	WAIT_COUNT,f				; スルー時 1cycle / Skip時 2cycle
	GOTO	$-9					; 1cycle LOOP時には1回で10サイクル

	DECFSZ	WAIT_COUNT2,f
	GOTO	WAIT_1msec_LOOP

	RETURN						; 2cycle

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-27 (月) 23:39:35