;RC TX-2B COMPATIBLE ENCORDER 2012.05.29 チエックサム 22AA ;PIC 12F629 内臓 4 MHz ; ;POWER:単3 × 3 4.5V ;INTERNAL OSC, NO-USE INTERNAL PULL-UP ; ;GP0:INPUT 前進ボタン (HI-ACTIVE, 外部PULL-DOWN要) ;GP1:INPUT 後退ボタン (HI-ACTIVE, 外部PULL-DOWN要) ;GP2:INPUT 右ボタン (HI-ACTIVE, 外部PULL-DOWN要) ;GP3:INPUT 左ボタン (HI-ACTIVE, 外部PULL-DOWN要?) ;GP4:INPUT ターボ ボタン (HI-ACTIVE, 外部PULL-DOWN要) ;GP5:OUTPUT エンコード出力 ;---- PROGRAM ---- LIST P=12F629 __CONFIG _MCLRE_OFF &_BODEN_ON &_CPD_OFF &_PWRTE_ON &_WDT_OFF &_CP_OFF &_INTRC_OSC_NOCLKOUT INCLUDE "P12F629.INC" ;REGISTER DEFINITION ZENKAI EQU 20H ;前回コード SCODE EQU 21H ;送信コード GCNT EQU 22H ;汎用カウンタ T05M EQU 25H ;500μs TIMER T5M EQU 26H ; 5ms TIMER T10M EQU 27H ;10ms TIMER T50M EQU 28H ;50ms TIMER ;//////// PROGRAM START //////// ; ORG 04H ; CALL INITIAL ;初期設定 MAIN CALL PBCHK ;ボタンチエック KONKAI MOVLW 04H ;今回コードは4か? SUBWF SCODE,W ; BTFSS STATUS,Z ;コード4 Z=1 THEN SKIP GOTO ZENCHK2 ZENCHK1 MOVLW 04H ;前回コードは4か? SUBWF ZENKAI,W ; BTFSS STATUS,Z ;コード4 Z=1 THEN SKIP GOTO ZENCHK2 MOVLW 04H ;コード4 MOVWF ZENKAI ;前回コードに4をセット CLRF SCODE ;送信コード リセット GOTO MAIN ZENCHK2 MOVLW 04H ;前回コードは4か? SUBWF ZENKAI,W ; BTFSS STATUS,Z ;コード4 Z=1 THEN SKIP GOTO SENDSIG2 SENDSIG1 CALL LONG ;ロング送信 4回 SENDSIG2 CALL SENDCODE ;コード送信 CALL LONG ;ロング送信 4回 MOVF SCODE,W MOVWF ZENKAI CLRF SCODE ;送信コード リセット GOTO MAIN ;****SUB ROUTINE**** PBCHK BTFSS GPIO,0 ;前進ボタン=1 THEN SKIP GOTO BKCHK BTFSS GPIO,2 ;右ボタン=1 THEN SKIP GOTO LCHK MOVLW 22H ;34 前進 & 右 MOVWF SCODE RETURN LCHK BTFSS GPIO,3 ;左ボタン=1 THEN SKIP GOTO TBCHK MOVLW 1CH ;28 前進 & 左 MOVWF SCODE RETURN TBCHK BTFSS GPIO,4 ;ターボボタン=1 THEN SKIP GOTO OUT MOVLW 10H ;16 前進 & ターボ MOVWF SCODE RETURN OUT MOVLW 0AH ;10 前進 MOVWF SCODE RETURN BKCHK BTFSS GPIO,1 ;後退ボタン=1 THEN SKIP GOTO RCHK3 BTFSS GPIO,2 ;右ボタン=1 THEN SKIP GOTO LCHK2 MOVLW 2EH ;46 後退 & 右 MOVWF SCODE RETURN LCHK2 BTFSS GPIO,3 ;左ボタン=1 THEN SKIP GOTO OUT1 MOVLW 34H ;52 後退 & 左 MOVWF SCODE RETURN OUT1 MOVLW 28H ;40 後退 MOVWF SCODE RETURN RCHK3 BTFSS GPIO,2 ;右ボタン=1 THEN SKIP GOTO LCHK3 MOVLW 40H ;64 右 MOVWF SCODE RETURN LCHK3 BTFSS GPIO,3 ;左ボタン=1 THEN SKIP GOTO TBCHK2 MOVLW 3AH ;58 左 MOVWF SCODE RETURN TBCHK2 BTFSS GPIO,4 ;ターボボタン=1 THEN SKIP GOTO OUT2 MOVLW 16H ;22 ターボ MOVWF SCODE RETURN OUT2 MOVLW 04H ;4 ボタン操作なし MOVWF SCODE RETURN ;****SUB ROUTINE**** ;ロング(HIGH 1500μS + LOW 500μS 4 回) LONG MOVLW 04H ; MOVWF GCNT LONGLP BSF GPIO,5 ;信号HIGH CALL TIM05M ;500μS CALL TIM05M ;500μS CALL TIM05M ;500μS BCF GPIO,5 ;信号LOW CALL TIM05M ;500μS DECFSZ GCNT,F ;(GCNT)-1=0 THEN SKIP GOTO LONGLP RETURN ;****SUB ROUTINE**** ;コード送信 ショート(HIGH 500μS + LOW 500μS ) SENDCODE MOVF SCODE,W MOVWF GCNT SENDCODELP BSF GPIO,5 ;信号HIGH CALL TIM05M ;500μS BCF GPIO,5 ;信号LOW CALL TIM05M ;500μS DECFSZ GCNT,F ;(GCNT)-1=0 THEN SKIP GOTO SENDCODELP RETURN ;****INITIAL ROUTINE**** ; INITIAL BSF STATUS,RP0 ;BANK=1 ;INTERNAL CLOCK AJUSUT DATA SET CALL 3FFH MOVWF OSCCAL ;OSC ADJUST VALUE SET ;OPTION SET MOVLW 80H MOVWF OPTION_REG ;GPPU=1,INTEDG=0,TOCS=0,TOSE=0, PSA=0,PS2=0,PS1=0,PS0=0 ;プルアップなし、立ち上がり、外部クロック、立ち上がり、 TIM0,プリスケーラなし ;I/O PORT SET CLRF GPIO MOVLW 1FH ; X, X, GP5=0,GP4=1, GP3=1,GP2=1,GP1=1,GP0=1 入力=1 MOVWF TRISIO ;WEAK PULL-UP SET ; MOVLW 00H ; X, X, WPU5=0,WPU4=0, X, WPU2=0,WPU1=0,WPU0=0 ; MOVWF WPU BCF STATUS,RP0 ;BANK=0 ;CMCON SET COMPARATOR不使用 MOVLW 07H ;X,X,X,X, X,CM2=1,CM1=1,CM0=1 MOVWF CMCON ;I/O、レジスタクリア、初期セット CLRF GPIO ;I/O OFF MOVLW 04H ;コード4 MOVWF ZENKAI ;前回コードに4をセット CLRF GCNT ;汎用カウンタ CLRF SCODE ;送信コード RETURN ;**** TIMER FOR 4MHz **** ; ;---- 500 μsec(1.0 μsec*500) ---- TIM05M MOVLW 0A5H ;A5H=165(=500 CYCLE) MOVWF T05M NOP NOP TIM05LP DECFSZ T05M,F ;(T05M)-1=0 THEN SKIP GOTO TIM05LP RETURN ;---- 5 msec(0.5 ms*10) ---- TIM5M MOVLW 0AH ;0AH=10(5.053 mS) MOVWF T5M TIM5LP CALL TIM05M DECFSZ T5M,F GOTO TIM5LP RETURN ;---- 10 msec(0.5 ms*20) ---- TIM10M MOVLW 014H ;014H=20 MOVWF T10M TIM10LP CALL TIM05M DECFSZ T10M,F GOTO TIM10LP RETURN ;---- 50 msec(0.5 ms*100) ---- TIM50M MOVLW 064H ;064H=100 MOVWF T50M TIM50LP CALL TIM05M DECFSZ T50M,F GOTO TIM50LP RETURN END