![](https://blogimg.goo.ne.jp/user_image/59/42/0dc5c88e577d8cdeedfd8ce25e1de582.jpg)
PICのプログラムを少し勉強してみました。
LEDピカピカも良いのですが、少し実用的なものという事で、
赤外センサの受けている信号を1個ずつ分けて各ポートに出すだけで
サーボやアンプの信号として使え、そのまま受信機としても使えます。
このプログラムは田中さんの”PICマイコンでつくるインドアプレーン”の本に詳しく解説されていて、プログラムもあるのですが、
あまり読むと同じ物になってしまいそうなので、横目でながめつつ、自分なりにプログラムを組んでみました、
そしてやっと何とか動くプログラムになりました。
上がセンサの出力信号 下が各ポートに出力される信号
![](https://blogimg.goo.ne.jp/user_image/3a/d0/5bb89863b1b4ff6d64cb78b49121849d.jpg)
恥ずかしながら、ソースです。
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
ラベルと命令が一緒になって見にくくなりますね。
よくプログラムの説明に画像でアップされているのを見たことがあります。
あれって この原因で画像なんではないかな?
短いプログラムなら画面コピーでアップすれば大丈夫かも・・
しかし、いつもながら行動が早い ^^;
私はいつも切った貼ったばかりです。
何も出来なかったのですが、2,3日前から取り組んでいました、1からと言っても、おまじないは切り貼りですし、田中さんのカンニングしながらですので....しかもこのプログラムは簡単、信号の立下りを見つけて順番に切り替えていくだけですから、
↓こんな感じで。
ソース
ただ、もしかしたらgooブログのシステムでこのが取り除かれちゃったりするかもしれません。
コメント欄で入力したタグは取り除かれちゃうんですね。
全角で書きますが、実際に使うときには全部半角で書いてくださいね。
<pre>
ソース
</pre>
って書くとソースがそのまま表示される、かもしれません。コメント欄と同じくタグを取っちゃう仕様だとyasさんの言われるように画像を使うしかないですね。
ちゃんとTABも表示されました
なんてエラーが出る
無視して良いのかな?
Error(間違い)Warning(警告)Messageとあるみたいで、Messageは無視しても問題ないみたいですよ。
バンク切り替えの時には出るみたいです、
PICマイコンで作るインドアプレーン250P参照