; ; ; ; ********************************************************* ; * 2000.07.27 * ; * * ; * CQ マシーン4型 * ; * * ; * BY Aki Matayoshi * ; ********************************************************* ; ; LIST P=PIC16F84 INCLUDE "P16F84.INC" ; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ; PORT RA ; PTT EQU 4 REC EQU 3 TX_OUT EQU 1 CH1 EQU 2 P_R EQU 0 INIT_A EQU 01H ; ; PORT RB ; PD EQU 7 TX_LED EQU 6 CE EQU 5 ;PLAYBACK ADDRESSU PB_ADD EQU 4 CH2 EQU 3 CH3 EQU 2 LOCK EQU 1 EOM_INT EQU 0 INIT_B EQU 0F0H PTT_OUT EQU 08H LOCK_OUT EQU 08H ; COUNTER_L EQU 00CH COUNTER_H EQU 00DH ; ; ; ORG 000H GOTO START ; ORG 004H ; GOTO INT_PRO ;INTERLAPT VECTOR ; START ; *********************** 初期化 ******************************* ; BSF STATUS,RP0 ;BANK=01; ; BCF STATUS,RP1 ;BANK=01; MOVLW 0FCH ;RA4のみIN_PORT MOVWF TRISA MOVLW 00FH MOVWF TRISB ; MOVLW 0A0H ;OPTION_REG INT_IN DOWN_EGGE SET MOVWF OPTION_REG ; BCF STATUS,RP0 ;BANK=00; ; MOVLW INIT_A MOVWF PORTA MOVLW INIT_B MOVWF PORTB ; CALL TIME_10 ;10msec TIMER MOVLW 090H ;INT/RB0 INTERLAPT ENABLE MOVWF INTCON BCF INTCON,INTF ;割り込み許可 ; MAIN BTFSS PORTB,LOCK ;IF LOCK ON THEN CALL REC_PRO CALL LOCK_PRO CALL NOP_10 ;I/OリカバリーNOP10回 BTFSS PORTA,PTT CALL PTT_PRO CALL NOP_10 BTFSS PORTA,CH1 CALL CH1_PRO CALL NOP_10 BTFSS PORTB,CH2 CALL CH2_PRO CALL NOP_10 BTFSS PORTB,CH3 CALL CH3_PRO CALL NOP_10 MOVLW INIT_B MOVWF PORTB MOVLW INIT_A MOVWF PORTA GOTO MAIN ; ; ;***************************** 再生、録音、チェック ********************* ; CH1_PRO BCF PORTB,PB_ADD ;30msec以前のPD、PB_ADDを出力 BCF PORTB,PD ; ; CALL TIME_10 CALL TIME_10 CALL TIME_10 BTFSC PORTA,CH1 RETURN BTFSS PORTA,REC GOTO CH1_REC ; CH1_PLAY MOVLW 003H MOVWF PORTA MOVLW 000H MOVWF PORTB GOTO PLAY_COMMON ; ; CH2_PRO BCF PORTB,PD ;30msec以前にPD、PB_ADDを出力 BSF PORTB,PB_ADD ;30msec以前のPD、PB_ADDを出力 ; CALL TIME_10 CALL TIME_10 CALL TIME_10 ; BTFSC PORTB,CH2 RETURN BTFSS PORTA,REC GOTO CH2_REC ; CH2_PLAY MOVLW 0003H MOVWF PORTA MOVLW 0010H MOVWF PORTB GOTO PLAY_COMMON ; ; CH3_PRO BCF PORTB,PD ;30msec以前のPD、PB_ADDを出力 BSF PORTB,PB_ADD ;30msec以前のPD、PB_ADDを出力 ; CALL TIME_10 CALL TIME_10 CALL TIME_10 ; BTFSC PORTB,CH3 RETURN BTFSS PORTA,REC GOTO CH3_REC ; CH3_PLAY MOVLW 03H MOVWF PORTA MOVLW 0010H MOVWF PORTB ; ; 再生プログラム共通ルーチン ; PLAY_COMMON ; CALL TIME_10 BTFSS PORTA,TX_OUT GOTO PLAY_END ;PTT ONまで待機 BTFSC PORTA,PTT GOTO PLAY_COMMON CALL TIME_10 BTFSC PORTA,PTT GOTO PLAY_COMMON MOVLW INIT_B MOVWF PORTB MOVLW INIT_A MOVWF PORTA ; PTT_OFF_CHK CALL TIME_10 ;ON確認後、OFFまで待機 BTFSC PORTA,PTT GOTO PTT_OFF_CHK CALL TIME_10 BTFSC PORTA,PTT GOTO PTT_OFF_CHK RETURN ; PLAY_END ; MOVLW INIT_B MOVWF PORTB MOVLW INIT_A MOVWF PORTA RETURN ; ;*************************** 録音 処理 ****************************** ; ; CH3_REC: CALL TIME_10 ;チャタリング防止 BTFSC PORTA,REC RETURN ;10mSEC後、RECボタンOFFなら何もしない ; MOVLW 00H MOVWF PORTA MOVLW 050H MOVWF PORTB ; CH3_REC2 CALL TIME_10 BTFSS PORTB,CH3 GOTO CH3_REC2 CALL TIME_10 BTFSS PORTB,CH3 GOTO CH3_REC2 MOVLW INIT_A MOVWF PORTA MOVLW INIT_B MOVWF PORTB RETURN ; CH2_REC: CALL TIME_10 ;チャタリング防止 BTFSC PORTA,REC RETURN ;10mSEC後、RECボタンOFFなら何もしない ; MOVLW 0000H MOVWF PORTA MOVLW 050H MOVWF PORTB ; CH2_REC2 CALL TIME_10 BTFSS PORTB,CH2 GOTO CH2_REC2 CALL TIME_10 BTFSS PORTB,CH2 GOTO CH2_REC2 MOVLW INIT_A MOVWF PORTA MOVLW INIT_B MOVWF PORTB RETURN ; CH1_REC: CALL TIME_10 ;チャタリング防止 BTFSC PORTA,REC RETURN ;10mSEC後、RECボタンOFFなら何もしない ; MOVLW 00H MOVWF PORTA MOVLW 040H MOVWF PORTB ; CH1_REC2 CALL TIME_10 BTFSS PORTA,CH1 GOTO CH1_REC2 CALL TIME_10 BTFSS PORTA,CH1 GOTO CH1_REC2 MOVLW INIT_A MOVWF PORTA MOVLW INIT_B MOVWF PORTB RETURN ; ; ;********************** PTT 処理 *********************** ; PTT_PRO CALL TIME_10 BTFSC PORTA,PTT RETURN ; BSF PORTA,TX_OUT BCF PORTB,TX_LED BCF PORTA,P_R BCF PORTB,PD PTT1 CALL TIME_10 ;PTT 0FFまで待機 BTFSS PORTA,PTT GOTO PTT1 CALL TIME_10 BTFSS PORTB,PTT GOTO PTT1 ; MOVLW INIT_A MOVWF PORTA MOVLW INIT_B MOVWF PORTB ; RETURN ; ;**************************** LOCK 処理 ************************ ; LOCK_PRO CALL TIME_10 ;信号の2度読み、チャタリング防止 BTFSC PORTA,LOCK RETURN ; ; BSF PORTA,TX_OUT BCF PORTB,TX_LED BCF PORTA,P_R BCF PORTB,PD LOCK1 CALL TIME_10 ;PTT ONまで待機 BTFSC PORTA,PTT GOTO LOCK1 CALL TIME_10 BTFSC PORTA,PTT GOTO LOCK1 ; LOCK2 MOVLW INIT_A MOVWF PORTA MOVLW INIT_B MOVWF PORTB ; RETURN ; ; ;**************************** 10msec タイマー サブルーチン **************** ; ; TIME_10 MOVLW D'100' MOVWF COUNTER_H TIME0 MOVLW D'124' MOVWF COUNTER_L TIME1 NOP DECFSZ COUNTER_L,F GOTO TIME1 DECFSZ COUNTER_H,F GOTO TIME0 RETURN ; ;**************************** 割り込み処理 **************** ; INT_PRO NOP ; BCF PORTA,TX_OUT MOVLW INIT_B MOVWF PORTB MOVLW INIT_A MOVWF PORTA INT_LOOP BTFSS PORTB,EOM_INT GOTO INT_LOOP BCF INTCON,INTF RETFIE ; ;********************** I/Oリカバリーの為の NOP10個 ********* ; NOP_10 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RETURN ; ; ;**************************** 処理 完了**************** ; ; END