;*************************************** ;鬼襲試合用送信側プログラム ; RA0 IN スピコン ; RA1 IN 持ち上げ左逆転 ; RA2 IN 持ち上げ左正転 ; RA3 IN N/A ; RA4 IN N/A ; RA5 IN 車輪両方逆転 ; RB0 IN 持ち上げ右正転 ; RB1 IN 持ち上げ右逆転 ; RB2 IN ローラー正転 ; RB3 IN ローラー逆転 ; RB4 IN 持ち上げ両方正転 ; RB5 IN 持ち上げ両方逆転 ; RB6 IN 車輪右正転 ; RB7 IN 車輪右逆転 ; RC0 IN Option1逆転 ; RC1 IN Option1正転 ; RC2 IN Option2逆転 ; RC3 IN Option2正転 ; RC4 IN N/A ; RC5 IN N/A ; RC6 IN N/A ; RC7 IN N/A ; RD0 IN Option3逆転 ; RD1 IN Option3正転 ; RD2 IN N/A ; RD3 OUT 赤外線LED ; RD4 IN N/A ; RD5 IN N/A ; RD6 IN N/A ; RD7 IN N/A ; RE0 IN N/A ; RE1 IN 車輪左正転 ; RE2 IN 車輪左逆転 ;*************************************** LIST P=PIC16F877 __CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF INCLUDE "P16F877.inc" ;*************************************** ; Define variables ;*************************************** CNT1 EQU 20H CNT2 EQU 21H CNT3 EQU 22H CNT4 EQU 23H CNT5 EQU 24H BDATA EQU 25H ADATA EQU 26H BITBOX EQU 27H FDATA EQU 28H ;*************************************** ; ;*************************************** ORG 0 CALL PORT_INI ;*************************************** ;MAIN ROUTINE ;*************************************** LOOP CALL GETBUTTON ;ボタン情報を入手(アナログ除く) CALL FDATACAL ;アナログ情報を入手 CALL SETLECOAD ;データの送信 GOTO LOOP ;*************************************** ;データの取得 ;*************************************** GETBUTTON MOVF PORTB,W ;PORTBのデータをBDATAに入れる MOVWF BDATA MOVF PORTA,W ;PORTAのデータをADATAに入れる MOVWF ADATA ;ちなみにADATAの0〜5BITまで RRF ADATA,F ;PORTAの0はアナログのため詰める BTFSC PORTE,2 ;PORTEの2BIT目をADATAの7ビット目に入れる BSF ADATA,7 BTFSC PORTE,1 ;PORTEの1BIT目をADATAの6ビット目に入れる BSF ADATA,6 BTFSC PORTE,0 ;PORTEの0BIT目をADATAの5ビット目に入れる BSF ADATA,5 RETURN ;*************************************** ;FETデータの取得と演算 ;*************************************** FDATACAL MOVLW H'81' ;アナログデータの蓄積開始 MOVWF ADCON0 CALL T20us ;20us待つ BSF ADCON0,GO ;データの読み取りを始める ANYWAIT BTFSC ADCON0,GO ;データは読み取り終えたか? GOTO ANYWAIT ;まだ。戻る MOVF ADRESH,W ;アナログデータ10BITの内の上位8BITをFDATAに入れる MOVWF FDATA RETURN ;*************************************** ;データ送信部 ;*************************************** SETLECOAD CALL STARTBIT ;スタートビットを送る CALL KUTCCODE ;KUTCコードを送る CALL DATEBIT ;ボタンデータ1を送る CALL ADATEBIT ;ボタンデータ2を送る CALL FETCIRKIT ;アナログデータを送る CALL DATEBIT ;ボタンデータ1を送る(再送) CALL ADATEBIT ;ボタンデータ2を送る(再送) CALL FETCIRKIT ;ボタンデータ3を送る(再送) CALL ENDBIT ;エンドビットを送る CALL T20us ;安定のため20us待つ RETURN STARTBIT ;スタートビット"10001"を送る CALL BITUP CALL BITDOWN CALL BITDOWN CALL BITDOWN CALL BITUP RETURN KUTCCODE ;KUTCコード"11010101"を送る CALL BITUP CALL BITUP CALL BITDOWN CALL BITUP CALL BITDOWN CALL BITUP CALL BITDOWN CALL BITUP RETURN DATEBIT ;ボタンデータBDATAを送る MOVLW 8 MOVWF BITBOX ;8BIT分を送る FOREST BTFSS BDATA,7 ;BDATAの7BIT目は1か? CALL BITUP ;違う。1を送る(ボタン取得時に反転しているため) BTFSC BDATA,7 ;BDATAの7BIT目は0か? CALL BITDOWN ;違う。0を送る(ボタン取得時に反転しているため) RLF BDATA,F ;1BIT左にシフトする DECFSZ BITBOX,F ;8BIT送ったか? GOTO FOREST ;まだ。次を送る RLF BDATA,F ;終わったので元通りにするため左に1BITシフトする RETURN ADATEBIT ;ボタンデータADATAを送る MOVLW 8 MOVWF BITBOX ;8BIT分を送る FOREST2 BTFSS ADATA,7 ;ADATAの7BIT目は1か? CALL BITUP ;違う。1を送る(ボタン取得時に反転しているため) BTFSC ADATA,7 ;ADATAの7BIT目は0か? CALL BITDOWN ;違う。0を送る(ボタン取得時に反転しているため) RLF ADATA,F ;1BIT左にシフトする DECFSZ BITBOX,F ;8BIT送ったか? GOTO FOREST2 ;まだ。次を送る RLF ADATA,F ;終わったので元通りにするため左に1BITシフトする RETURN FETCIRKIT ;アナログデータを送る MOVLW 8 MOVWF BITBOX ;8BIT分を送る FOREST3 BTFSS FDATA,7 ;FDATAの7BIT目は1か? CALL BITUP ;違う。1を送る(ボタン取得時に反転しているため) BTFSC FDATA,7 ;FDATAの7BIT目は0か? CALL BITDOWN ;違う。0を送る(ボタン取得時に反転しているため) RLF FDATA,F ;1BIT左にシフトする DECFSZ BITBOX,F ;8BIT送ったか? GOTO FOREST3 ;まだ。次を送る RLF FDATA,F ;終わったので元通りにするため左に1BITシフトする RETURN ENDBIT ;エンドビット"10000"を取得する CALL BITUP CALL BITDOWN CALL BITDOWN CALL BITDOWN CALL BITDOWN RETURN ;*************************************** ;以下データ送信用サブルーチン ;*************************************** BITUP ; GOTO ANOTHER_BITUP ;38KHzVr. MOVLW 019H ;BITUP MOVWF CNT3 ;............................... BTLOOP BSF PORTD,3 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;............................... BCF PORTD,3 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ CNT3,F GOTO BTLOOP RETURN ANOTHER_BITUP MOVLW 017H ;BITUP MOVWF CNT3 ;............................... BTLOOP2 BSF PORTD,3 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;............................... BCF PORTD,3 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ CNT3,F GOTO BTLOOP2 RETURN ;*************************************** BITDOWN ; GOTO ANOTHER_BITDOWN ;38KHzVr MOVLW 019H ;BITDOWN MOVWF CNT3 ;............................... BTLOOP3 BCF PORTD,3 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ CNT3,F GOTO BTLOOP3 RETURN ANOTHER_BITDOWN MOVLW 017H ;BITDOWN MOVWF CNT3 ;............................... BTLOOP4 BCF PORTD,3 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DECFSZ CNT3,F GOTO BTLOOP4 RETURN ;********** UNDER THE LINE IS TIMER *********** T10us MOVLW 6 MOVWF CNT5 LP661 DECFSZ CNT5,F GOTO LP661 NOP NOP RETURN T20us MOVLW 10 MOVWF CNT5 LP662 DECFSZ CNT5,F GOTO LP662 RETURN T40us MOVLW 31 MOVWF CNT5 LP663 DECFSZ CNT5,F GOTO LP663 NOP NOP RETURN T80us MOVLW 65 MOVWF CNT5 LP664 DECFSZ CNT5,F GOTO LP664 RETURN T100us MOVLW H'6C' MOVWF CNT5 LP665 DECFSZ CNT5,F GOTO LP661 NOP NOP RETURN T300us MOVLW 23 MOVWF CNT2 T_LP11 CALL T10us DECFSZ CNT2,F GOTO T_LP11 RETURN T600us MOVLW 45 MOVWF CNT2 T_LP12 CALL T10us NOP DECFSZ CNT2,F GOTO T_LP12 RETURN ;*************************************** ; ;*************************************** PORT_INI BSF STATUS,RP0 ;バンク1へ切替 BCF INTCON,GIE ;割込み禁止 MOVLW H'0E' MOVWF ADCON1 MOVLW H'3F' MOVWF TRISA MOVLW H'FF' MOVWF TRISB CLRF TRISC CLRF TRISD MOVLW H'07' MOVWF TRISE BCF OPTION_REG,NOT_RBPU BCF STATUS,RP0 MOVLW H'80' MOVWF ADCON0 CLRF PORTA CLRF PORTB RETURN END