.
昨日の10F200に続いて10F222にも移植してみました、
そしてそのチップで、基板なしの受信機を組んで、動かしてみました
222受信機
プログラムです。変なところがあれば教えてください。
昨日の10F200に続いて10F222にも移植してみました、
そしてそのチップで、基板なしの受信機を組んで、動かしてみました
222受信機
プログラムです。変なところがあれば教えてください。
; ; 赤外線受信機プログラム 10F222 用 ; モーターは9段階 ラダーは17段階のPWM制御 ; ; 2009/8/16 T.kobara ; ; ; ; rad←GP0[| ``U`` |]GP3←センサin ; - VSS[| 222 |]VDD + ; rad←GP1[|___ __ |]GP2→FET(M) ; ; ; ; LIST P=10F222 INCLUDE P10F222.INC __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_ON & _IOFSCS_4MHZ& _MCPU_OFF ; _MCLRE_OFF = ;6番ピンをMCLRで使わない、GP3のI/O端子になる。 ; _CP_OFF = ;コード・プロテクトしない。 ; _WDT_ON = ;ウォッチドッグ・タイマを使う。 ; _IOFSCS_4MHZ = ;内部発信機4Mhz駆動 ; _MCPU_OFF = ;MCLR プルUP(MCLR使わないからどうでも良い) C1 equ 10h ;カウンター C2 equ 11h ;カウンター上位 MF equ 12h ;前回センサレベルフラグ RC equ 13h ;ループ カウンタ CH equ 14h ;チャンネル カウンタ PWM equ 15h ;pwm カウンタ SM equ 16h ;スロットルメイン RM equ 17h ;ラダー R メイン LM equ 18h ;ラダー L メイン SS equ 19h ;スロットルサブ RS equ 1Ah ;ラダー R サブ LS equ 1Bh ;ラダー L サブ OUT equ 1Ch ;出力バッファ CH1 equ 1Dh ;ラダーデータ CH3 equ 1Eh ;スロットルデータ org 0 ;電源onスタート movwf OSCCAL ;内部発信校正値の書き込み movlw b'00001100' ;A/D入出力ポートの設定 movwf ADCON0 ;GP1,0共にI/Oデジタル設定 movlw b'00001000' ;入出力ポートの設定GP3のみ入力 TRIS GPIO ;他は出力設定 movlw b'00001110' OPTION ;WDTプリスケーラ18ms×64=1.15s ;//////////////////////////////////////////////////////////// ;メインルーチン MAIN clrf GPIO ;出力ポートクリア clrf MF ;前回レベルフラグ 00 clrf RC ;ループ カウンタ 00 clrf CH ;チャンネルカウンタ 00 movlw d'8' movwf PWM ;pwm カウンタ 8 clrf SM ;スロットルメイン 00 clrf RM ;ラダー R メイン 00 clrf LM ;ラダー L メイン 00 clrf SS ;スロットルサブ 00 clrf RS ;ラダー R サブ 00 clrf LS ;ラダー L サブ 00 clrf OUT ;出力バッファ 00 clrf CH1 ;ラダーデータ 00 clrf CH3 ;スロットルデータ 00 MJ2 btfss GPIO,3 ;入力LOならループ goto LOOP movlw d'250' movwf C2 ;カウンタ250セット MJ1 btfss GPIO,3 ;入力LOならループ goto MJ2 nop nop nop ;10us×250回=2.5ms nop nop decfsz C2,F ;C2-1=0なら先頭ブランク発見 goto MJ1 goto LOOP ;LOOP IN ;//////////////////////////////////////////////////////////// MJ3 btfsc MF,0 ;前回レベルフラグ0か? goto MJ7 ;1なら立下りエッジ処理へ clrf MF ;MF←00 MJ4 clrwdt ;WDT クリア incf RC,F ;ループカウントUP ;出力処理 MJ10 decfsz PWM,F ;PWM0でないならMJ5へ goto MJ5 movf SM,W movwf SS ;0なら movf RM,W ;各サブにセット movwf RS movf LM,W movwf LS movlw d'8' movwf PWM ;PWM カウンタ 8 MJ6 clrf OUT rrf SS,F rlf OUT,F ;2 各bitのセット rrf RS,F rlf OUT,F ;1 rrf LS,F rlf OUT,F ;0 movf OUT,W movwf GPIO ;OUTデータをポートに出力 ;ループ入り口 LOOP btfss GPIO,3 ;入力 LO ならMJ3へ goto MJ3 ;LO の処理ルーチンへ bsf MF,0 ;MF←01 btfss RC,7 ;RC 128 以上ならMJ4へ goto MJ4 ;出力処理へ clrf CH ;チャンネルカウンタ クリア goto MJ10 ;出力処理ルーチンへ MJ5 nop nop nop ;時間あわせ nop nop goto MJ6 ;立下りエッジ処理 MJ7 btfsc CH,2 ;CHの2bit 1ならMJ80へ goto MJ80 ;CH4以上はJMP btfss CH,0 ;CHの0bit 0ならMJ80へ goto MJ80 ; btfsc CH,1 ;CHの1bit 1ならMJ9へ goto MJ9 ; movf RC,W ;前回RCとの平均化 addwf CH1,F ; bcf STATUS,C ;(CH1+RC)÷2→CH1 rrf CH1,F ; movlw d'18' ; subwf CH1,W ;CH1-18=W andlw b'00111111' ;3Fhでマスク0~64 call GETLM ;PWMパターン取得 xorlw b'11111111' ;パターンの逆転 movwf RM ;パターン格納 movlw d'30' ; subwf CH1,W ;CH1-30=W andlw b'00111111' ;3Fhでマスク0~64 call GETLM ;PWMパターン取得 movwf LM ;パターン格納 MJ80 clrf RC ;ループカウンタ 00 clrf MF ;前回レベルフラグ00 incf CH,F ;CH+1→CH goto MJ10 MJ9 movf RC,W ;前回RCとの平均化 addwf CH3,F ; bcf STATUS,C ;(CH3+RC)÷2→CH3 rrf CH3,F ; movlw d'16' ; subwf CH3,W ;CH3-16=W andlw b'00111111' ;3Fhでマスク0~64 call GETSM ;PWMパターン取得 movwf SM ;パターン格納 goto MJ80 ;///////////////////////////////////////////////////////////// GETSM addwf PCL,F ;プログラムカウンタにWデータ加算 retlw b'00000000' ;0 retlw b'00000000' ;1 retlw b'00000000' ;2 retlw b'00000000' ;3 retlw b'00000000' ;4 retlw b'00000000' ;5 retlw b'00000000' ;6 retlw b'00000000' ;7 retlw b'00000000' ;8 retlw b'00000000' ;9 retlw b'00000000' ;10 retlw b'00000000' ;11 retlw b'00000000' ;12 retlw b'00000000' ;13 retlw b'00000000' ;14 retlw b'00000000' ;15 retlw b'00000000' ;16 retlw b'00000000' ;17 retlw b'00000000' ;18 retlw b'00000000' ;19 retlw b'00000000' ;20 retlw b'00000000' ;21 retlw b'00000000' ;22 retlw b'00000000' ;23 retlw b'00000000' ;24 retlw b'00000001' ;25 retlw b'00000001' ;26 retlw b'00000011' ;27 retlw b'00000011' ;28 retlw b'00000111' ;29 retlw b'00000111' ;30 retlw b'00001111' ;31 retlw b'00001111' ;32 retlw b'00011111' ;33 retlw b'00011111' ;34 retlw b'00111111' ;35 retlw b'00111111' ;36 retlw b'01111111' ;37 retlw b'01111111' ;38 retlw b'11111111' ;39 retlw b'11111111' ;40 retlw b'11111111' ;41 retlw b'11111111' ;42 retlw b'11111111' ;43 retlw b'11111111' ;44 retlw b'11111111' ;45 retlw b'11111111' ;46 retlw b'11111111' ;47 retlw b'11111111' ;48 retlw b'11111111' ;49 retlw b'11111111' ;50 retlw b'11111111' ;51 retlw b'11111111' ;52 retlw b'11111111' ;53 retlw b'11111111' ;54 retlw b'11111111' ;55 retlw b'11111111' ;56 retlw b'11111111' ;57 retlw b'11111111' ;58 retlw b'11111111' ;59 retlw b'11111111' ;60 retlw b'11111111' ;61 retlw b'11111111' ;62 retlw b'11111111' ;63 retlw b'11111111' ;64 retlw b'11111111' ;65 ;///////////////////////////////////////////////////////////// GETLM addwf PCL,F ;プログラムカウンタにWデータ加算 retlw b'00000000' ;0 retlw b'00000000' ;1 retlw b'00000000' ;2 retlw b'00000000' ;3 retlw b'00000000' ;4 retlw b'00000000' ;5 retlw b'00000000' ;6 retlw b'00000000' ;7 retlw b'00000000' ;8 retlw b'00000000' ;9 retlw b'00000000' ;10 retlw b'00000000' ;11 retlw b'00000000' ;12 retlw b'00000000' ;13 retlw b'00000000' ;14 retlw b'00000000' ;15 retlw b'00000000' ;16 retlw b'00000000' ;17 retlw b'00000000' ;18 retlw b'00000000' ;19 retlw b'00000000' ;20 retlw b'00000000' ;21 retlw b'00000000' ;22 retlw b'00000000' ;23 retlw b'00000000' ;24 retlw b'00000000' ;25 retlw b'00000000' ;26 retlw b'00000000' ;27 retlw b'00000000' ;28 retlw b'00000001' ;29 retlw b'00000011' ;30 retlw b'00000111' ;31 retlw b'00001111' ;32 retlw b'00011111' ;33 retlw b'00111111' ;34 retlw b'01111111' ;35 retlw b'11111111' ;36 retlw b'11111111' ;37 retlw b'11111111' ;38 retlw b'11111111' ;39 retlw b'11111111' ;40 retlw b'11111111' ;41 retlw b'11111111' ;42 retlw b'11111111' ;43 retlw b'11111111' ;44 retlw b'11111111' ;45 retlw b'11111111' ;46 retlw b'11111111' ;47 retlw b'11111111' ;48 retlw b'11111111' ;49 retlw b'11111111' ;50 retlw b'11111111' ;51 retlw b'11111111' ;52 retlw b'11111111' ;53 retlw b'11111111' ;54 retlw b'11111111' ;55 retlw b'11111111' ;56 retlw b'11111111' ;57 retlw b'11111111' ;58 retlw b'11111111' ;59 retlw b'11111111' ;60 retlw b'11111111' ;61 retlw b'11111111' ;62 retlw b'11111111' ;63 retlw b'11111111' ;64 retlw b'11111111' ;65 ;///////////////////////////////////////////////////////////// end :020000040000FA :1000000025000C0C2700080C06000E0C02006600F0 :10001000720073007400080C3500760077007800D9 :1000200079007A007B007C007D007E0066073C0A38 :10003000FA0C31006607160A0000000000000000FC :100040000000F1021A0A3C0A1206490A7200040072 :10005000B302F502430A1602390017023A001802E9 :100060003B00080C35007C0039037C033A037C0319 :100070003B037C031C0226006607240A1205F307D3 :10008000270A7400290A0000000000000000000098 :10009000330A54065E0A14075E0A3406620A130223 :1000A000FD0103043D03120C9D003F0EAF09FF0F3D :1000B00037001E0C9D003F0EAF0938007300720020 :1000C000B402290A1302FE0103043E03100C9E0031 :1000D0003F0E6C0936005E0AE201000800080008C5 :1000E00000080008000800080008000800080008D0 :1000F00000080008000800080008000800080008C0 :1001000000080008000800080008000801080108AD :1001100003080308070807080F080F081F081F082F :100120003F083F087F087F08FF08FF08FF08FF0817 :10013000FF08FF08FF08FF08FF08FF08FF08FF0887 :10014000FF08FF08FF08FF08FF08FF08FF08FF0877 :10015000FF08FF08FF08FF08FF08FF08FF08E2018B :10016000000800080008000800080008000800084F :10017000000800080008000800080008000800083F :10018000000800080008000800080008000800082F :100190000008000800080008000801080308070814 :1001A0000F081F083F087F08FF08FF08FF08FF0827 :1001B000FF08FF08FF08FF08FF08FF08FF08FF0807 :1001C000FF08FF08FF08FF08FF08FF08FF08FF08F7 :1001D000FF08FF08FF08FF08FF08FF08FF08FF08E7 :0401E000FF08FF080D :021FFE00EE0FE4 :00000001FF
アッセンブラはZ80以降やってないので殆ど理解できてません(汗)
ルックアップテーブルを使っているのと、nopを駆使してタイミング合わせをしているのは分かりました。
makkinさんと呼んだ方が良いのかな??
私もあまりよくわかっていません、
しかもこの受信部本体はだいぶ前に作ったので、忘れてしまって、しかも保守性の悪い、こんがらがった物ですので、
たぶん他の人には解読不可能と思います。
酒井さんがプログラムやると言っていたので、頭の設定の部分だけでも参考になるかなと思って、出しました
そうでないと、まぐれで動くプログラムが出来ても 動くかどうかためせません。
じしんありません。
Could you explain me what have you done and draw a basic electronic schematic?
I'm really interested in the "receiver" part of your circuit!
Many thanks
Paride
paridemiola@gmail.com
これを参考にしてください
http://www.oyajin.jp/~toko/pic/0071/index.html
見てください
10F200で検索して辿り付きました
今、ものすごい勢いでPICの知識とテクニックを貯めていますのでソースコードの公開は大変ありがたいことです。
一部わからない所が有りますが気合で理解しようと思います。
記念カキコ2012