.
昨日の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