sample.asmの改造方法


ここからは、のソースファイルと見比べながら読んでください。この色は注釈です

はじめの
	list p=12c509
	include <p12c509.inc>
	__config _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC
から
	MOVWF	GPIO		;出力をすべてLoにする

までは、おまじないです。そのままでお使いください。

;################ここからプログラムの開始#################

LOOP1				;1番目の動作の始まり

ここでのLOOP1は、ラベルといい、どこかから飛んでくるときのマークになります。

	BSF	GPIO,	0	;7番ピンをHiにする

BSFは、出力をHiにするという意味です。数字の0が、どのピンかを指定します。
0は7番ピン、1は6番ピン、2は5番ピン、3は4番ピンですが入力専用なので出力には使えません、4は3番ピン、5は2番ピンで、合計5出力あります。

	BCF	GPIO,	1	;6番ピンをLoにする

BCFは、出力をLoにするという意味です。数字の0が、どのピンかを指定します。
この要領で、好きなピンをHiにしたりLoにしたりします。

	BCF	GPIO,	2	;5番ピンをLoにする

	BSF	GPIO,	4	;3番ピンをHiにする

	BCF	GPIO,	5	;2番ピンをLoにする

	CALL	T250M		;0.25秒待つ

CALLは、サブルーチンを呼ぶ命令です。ここではT250Mというサブルーチンを呼んでいます。
T250Mは、250msec(0.25秒)の時間稼ぎをするもので、次の動作までの時間を決めます。

;###############2番目の動作の始まり

以下同様に、動作の順番を書いて行きます。エディタでカット&ペーストでいいでしょう。

;###############3番目の動作の始まり

;###############4番目の動作の始まり

	BCF	GPIO,	0	;7番ピンをLoにする

	BSF	GPIO,	1	;6番ピンをHiにする

	BSF	GPIO,	2	;5番ピンをHiにする

	BCF	GPIO,	4	;3番ピンをLoにする

	BSF	GPIO,	5	;2番ピンをHiにする

	CALL	T250M		;0.25秒待つ

	GOTO	LOOP1		;LOOP1の動作に戻る

最後の動作まで記述したら、GOTO命令で最初の動作に戻します。ここではLOOP1に戻ります。
以後これの繰り返しで点滅します。

;#################ここからサブルーチン

T250Mというサブルーチンの始まりです。T250Mは、250msec(0.25秒)の時間稼ぎをするものです

T250M				;250ミリ秒待つルーチン

T250Mがサブルーチンの名前です

	MOVLW	0F2H

ここの 0F2H が時間を決める数値です。(16進数を意味するので後ろにHをつけます)
10進数で表すと242です。数字1が約1ミリ秒(1/1000秒)です。
たとえば0.1秒待つサブルーチン作りたければ、この数字を64H(100)としてください。
(厳密にはオーバーヘッドがあるので設定した値よりほんの少し長くなります。)
上限は0FFH(FFHでは、数値とわからないのでアルファベットで始まる数値は頭に0をつけます)までです。
よって1秒待たせたい場合は、T250Mを4回CALLしてください。


	MOVWF	WP1
	MOVLW	0FFH
	MOVWF	WP2
L1
違う時間のサブルーチンを作るときは、L2などに名前を変えます
	CALL	W1
	DECFSZ	WP1,	F
	GOTO	L1
違う時間のサブルーチンを作るときは、L2などに名前を変えます
	RETLW	00H

W1
違う時間のサブルーチンを作るときは、W2などに名前を変えます
	NOP
	DECFSZ	WP2,	F
	GOTO	W1
違う時間のサブルーチンを作るときは、W2などに名前を変えます
	RETLW	00H

ここまでが、T250Mのサブルーチンです。
複数の時間待ちサブルーチンを作りたい場合ここまでをコピーして違う時間の(例T100Mとか)つくってください。
その場合必ず違う名前のサブルーチンにする必要があります。
また、ここで使ったラベルL1とW1は、おのおのL2、W2というように違うラベルにしなければなりません。	

	END

最後に必ず END と書いてください。

ご意見は、電子掲示板にどうぞ。

RC PLAZAトップへ