インドアプレーンとロボット

趣味のロボットとインドアプレーンを紹介します。 K O B A R A

プログラム

2007-11-12 00:48:18 | 飛行機 技術情報

PICのプログラムを少し勉強してみました。
LEDピカピカも良いのですが、少し実用的なものという事で、
赤外センサの受けている信号を1個ずつ分けて各ポートに出すだけで
サーボやアンプの信号として使え、そのまま受信機としても使えます。
このプログラムは田中さんの”PICマイコンでつくるインドアプレーン”の本に詳しく解説されていて、プログラムもあるのですが、
あまり読むと同じ物になってしまいそうなので、横目でながめつつ、自分なりにプログラムを組んでみました、
そしてやっと何とか動くプログラムになりました




上がセンサの出力信号 下が各ポートに出力される信号






恥ずかしながら、ソースです。


        LIST	P=12F629
	INCLUDE	P12F629.INC

CB = _CPD_OFF			;データEEPROMもプログラム・メモリも
CB &= _CP_OFF			;コード・プロテクトしない。
CB &= _BODEN_OFF		;ブラウンアウト・リセットを使わない。
CB &= _MCLRE_OFF		;MCLRリセットを使わない。
CB &= _PWRTE_ON			;パワーアップ・タイマを使う。
CB &= _WDT_OFF			;ウォッチドッグ・タイマを使わない。
CB &= _INTRC_OSC_NOCLKOUT 	;内部発振器を使う。

	__CONFIG CB

		
C1	equ	20h		;タイマカウンター
C2	equ	21h		;カウンター上位


	org	0		;電源onスタート
	bsf	STATUS,RP0	;バンク 1 にする。

	call	3FFh
	movwf	OSCCAL		;内部発信校正値の書き込み

	movlw	b'00001000'	;入出力ポートの設定GP3のみ入力
	movwf	TRISIO		;他は出力設定

	bcf	STATUS,RP0	;バンク 0 にする。
	
	movlw	b'00000111'	;GP0~GP2までのコンパレータ解除
	movwf	CMCON


;////////////////////////////////////////////////////////////

				;メインルーチン

MAIN	clrf	GPIO		;出力ポートクリア
	
LOOP	btfss	GPIO,3		;入力LOならループ	
	goto	LOOP
	
	movlw	d'250'
	movwf	C2		;カウンタ250セット
	
M1	btfss	GPIO,3		;入力LOならループ	
	goto	LOOP	

	nop	
	nop
	nop			;10us×250回=2.5ms
	nop
	nop	
			
	decfsz	C2,F		;C2-1=0なら先頭ブランク発見
	goto	M1

M2	btfsc	GPIO,3		;入力HIならループ
	goto	M2		;先頭の立下り待ち
	
	bsf	GPIO,0		;GP0をHIにする
	
	call	T700us		;GP3入力立ち上がり待ち
	
M3	btfsc	GPIO,3		;入力HIならループ
	goto	M3		;次の立下り待ち
	
	bcf	GPIO,0		;GP0をLOにする
	bsf	GPIO,1		;GP1をHIにする
	
	call	T700us		;GP3入力立ち上がり待ち	
	
M4	btfsc	GPIO,3		;入力HIならループ
	goto	M4		;次の立下り待ち
	
	bcf	GPIO,1		;GP1をLOにする
	bsf	GPIO,2		;GP2をHIにする
	
	call	T700us		;GP3入力立ち上がり待ち	
	
M5	btfsc	GPIO,3		;入力HIならループ
	goto	M5		;次の立下り待ち
	
	bcf	GPIO,2		;GP2をLOにする
	bsf	GPIO,4		;GP4をHIにする
	
	call	T700us		;GP3入力立ち上がり待ち
	
M6	btfsc	GPIO,3		;入力HIならループ
	goto	M6		;次の立下り待ち
	
	bcf	GPIO,4		;GP4をLOにする
	
		
	goto	LOOP


;/////////////////////////////////////////////////////////////

T700us	movlw	d'161'		;約700μsのタイマループ
	movwf	C1

T700J1	nop
	decfsz	C1,F
	goto	T700J1
	nop
	return

;/////////////////////////////////////////////////////////////


	end






最新の画像もっと見る

23 コメント

コメント日が  古い順  |   新しい順
どうすれば (kobara)
2007-11-12 01:10:26
ソースファイルをブログに上げると、TABやスペースをなくされてしまって、読みずらいこと、どうすればいいの???
返信する
そうなんですよ (yas)
2007-11-12 07:35:30
私も以前アップした時そうなりました。
ラベルと命令が一緒になって見にくくなりますね。
よくプログラムの説明に画像でアップされているのを見たことがあります。
あれって この原因で画像なんではないかな?
短いプログラムなら画面コピーでアップすれば大丈夫かも・・

しかし、いつもながら行動が早い ^^;
返信する
多忙で (としちゃん)
2007-11-12 16:55:07
飛行会後静かだと思ったら、PICお勉強していたとは早速コピーしてMAKEしてみました。MPLABで問題なくできます。これから焼き込んで遊んでみます。プログラム零から作るなんて凄いニャー
私はいつも切った貼ったばかりです。
返信する
多忙 (kobara)
2007-11-12 17:49:17
飛行会後、たましいが抜けたのと、仕事が忙しくて
何も出来なかったのですが、2,3日前から取り組んでいました、1からと言っても、おまじないは切り貼りですし、田中さんのカンニングしながらですので....しかもこのプログラムは簡単、信号の立下りを見つけて順番に切り替えていくだけですから、
返信する
ソースは (飛行リーマン)
2007-11-12 19:32:36
タグで囲めばTABやスペースもそのまま表示されると思います。
↓こんな感じで。


ソース


ただ、もしかしたらgooブログのシステムでこのが取り除かれちゃったりするかもしれません。
返信する
あれ? (飛行リーマン)
2007-11-12 19:40:36
上のコメントですが...肝心なところが~
コメント欄で入力したタグは取り除かれちゃうんですね。

全角で書きますが、実際に使うときには全部半角で書いてくださいね。

<pre>
ソース
</pre>

って書くとソースがそのまま表示される、かもしれません。コメント欄と同じくタグを取っちゃう仕様だとyasさんの言われるように画像を使うしかないですね。
返信する
飛行リーマンさん すごい! (yas)
2007-11-12 21:07:54
早速以前の記事に付け足してみると!!
ちゃんとTABも表示されました
返信する
あら! (kobara)
2007-11-12 21:34:08
ほんと、綺麗に表示できました、ありがとうございます、なるほど~!!!
返信する
・・・ (yas)
2007-11-12 23:49:48
Register in operand not in bank 0. Ensure that bank bits are correct.

なんてエラーが出る
無視して良いのかな?
返信する
エラーじゃなくて (kobara)
2007-11-13 00:29:46
Messageではありませんか?OUTPUTのウインドには
Error(間違い)Warning(警告)Messageとあるみたいで、Messageは無視しても問題ないみたいですよ。

バンク切り替えの時には出るみたいです、

PICマイコンで作るインドアプレーン250P参照
返信する

コメントを投稿