LIST P=PIC16F628 ; INCLUDE "P16F628.inc" ;標準ヘッダ定義ファイル __config _HS_OSC & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _MCLRE_OFF ;--------------------------------------------* W_TEMP EQU 070H ; STATUS_TEMP EQU 071H ; PCLATH_TEMP EQU 072H ; FSR_TEMP EQU 073H ; PORTB_TEMP EQU 020H ;ポートB信号保存 G_FLG EQU 021H ;ゲートフラグ PARUSUL EQU 022H ;ポートA信号計算用保存 PARUSUH EQU 023H ;ポートA信号計算用保存 PARUSU_H_T EQU 024H ;割り込み内の減算用カウンタ PARUSUL_O EQU 026H ; PARUSUH_O EQU 027H ; P_110L EQU 030H ;比較用110Kmパルス 1F54 P_110H EQU 031H ;比較用110Kmパルス P_130L EQU 030H ;比較用130Kmパルス 1A82 P_130H EQU 031H ;比較用130Kmパルス P_140L EQU 030H ;計算用変数 P_140H EQU 031H ;計算用変数 P_40L EQU 032H ;設定用40Kmパルス 562B P_40H EQU 033H ;設定用40Kmパルス S_P_130L EQU 034H ;設定用130Kmパルス 0D82 S_P_130H EQU 035H ;設定用130Kmパルス P_MAKE_L EQU 040H ; P_MAKE_H EQU 041H ; TIMCNT EQU 043H ;タイマ用カウンタ TIM2CNT EQU 044H ; TIM5CNT EQU 045H ; TIM1SCNT EQU 046H ; ;******************************************** ORG 0 GOTO INIT ORG 04H GOTO INTER INTER MOVWF W_TEMP ;コンテキスト保存 SWAPF STATUS,W CLRF STATUS MOVWF STATUS_TEMP MOVF PCLATH,W MOVWF PCLATH_TEMP CLRF PCLATH MOVF FSR,W MOVWF FSR_TEMP INT_MAIN ;-------------------- BTFSC INTCON,2 ;タイマー0オーバーフローフラグ CALL CALL_TMR0 ; BTFSC PIR1,0 ;タイマー1オーバーフローフラグ CALL CALL_TMR1_OV ;1 BTFSC INTCON,1 ;RB0割り込みフラグ CALL CALL_RB0 ;1 GOTO POP CALL_TMR1_OV ;1 MOVLW 0F0H ;ダミー信号保存 MOVWF PARUSUL_O ;ダミー信号保存 MOVLW 0F0H ;ダミー信号保存 MOVWF PARUSUH_O ;ダミー信号保存 CALL WARIKOMI_OFF BCF PIR1,0 ;割り込みフラグクリア BCF INTCON,2 ;例外ためタイマー0割込フラグクリア RETURN CALL_RB0 ;RB0割り込みの開始 MOVF TMR1L,W ;パルスの保存 MOVWF PARUSUL_O ;元信号 CLRF TMR1L ; MOVF TMR1H,W ; MOVWF PARUSUH_O ;元信号 MOVLW 0F6H ADDWF PARUSUH_O,W ;元信号が小さすぎる時の処理 BTFSC STATUS,C GOTO JPNN MOVLW 0DH MOVWF PARUSUH_O JPNN CLRF TMR1H ; BCF INTCON,1 ;フラグのクリア RETURN CALL_TMR0 ;----オーバーフロー割り込み--------- BCF INTCON,2 ;タイマー0フラグクリア ;パルス幅を方波形で出力する MOVF PARUSU_H_T,W BTFSS STATUS,Z DECFSZ PARUSU_H_T,F ;内部カウンターの減算 RETURN ;----------------------------------- COMF P_MAKE_L,W MOVWF TMR0 MOVF P_MAKE_H,W MOVWF PARUSU_H_T ;------------------------------------- BTFSS G_FLG,7 ;**内部信号発生 フラグ1の時下を実行*** GOTO H_OUT GOTO L_OUT H_OUT BSF PORTA,2 ;固定パルス発生1 BSF G_FLG,7 ;内部フラグ1 RETURN L_OUT BCF PORTA,2 ;固定パルス発生0 BCF G_FLG,7 ;内部フラグ0 RETURN POP BCF INTCON,2 CLRF STATUS MOVF FSR_TEMP,W MOVWF FSR MOVF PCLATH_TEMP,W MOVWF PCLATH SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W RETFIE ;********************************************************* INIT MOVLW B'00100001' ;5,4がプリースケール,0がON,OFF,タイマー1設定 MOVWF T1CON ;1:8 ;-------------------------- CLRF PORTA ;マニュアル初期化 MOVLW B'00000111' ; MOVWF CMCON BCF STATUS,RP1 BSF STATUS,RP0 MOVLW B'11111011' MOVWF TRISA ;----------------------------- BSF STATUS,RP0 ;バンク1へ切替 BCF INTCON,GIE ;割り込み禁止 BSF PIE1,0 ;タイマー1割り込み許可 MOVLW B'01000001' ;タイマー0を1/4 MOVWF OPTION_REG ;内部クロック、プリスケーラ1:4 MOVLW B'11111011' ;1をセットすると入力 MOVWF TRISA ;ポートA,04を出力 ,123入力、 MOVLW B'11111111' ;1をセットすると入力 MOVWF TRISB ;ポートB,23457を出力0.1.6を入力に設定 BCF STATUS,RP0 ;バンク0に戻す MOVLW B'01010000' ;割り込み許可 MOVWF INTCON ;タイマー0,RB0.立ち上がり MOVLW 015H ;40Kmパルス初期値 MOVWF P_40L ;562B 1/2 2B15 MOVLW 02BH ;40Kmパルス初期値 MOVWF P_40H MOVLW 054H ;出口比較用パルス初期値 MOVWF P_110L ; MOVLW 01FH ;出口比較用パルス初期値 MOVWF P_110H ; MOVLW 082H ;入り口比較用パルス初期値 MOVWF P_130L ; MOVLW 01AH ;入り口比較用パルス初期値 MOVWF P_130H ; MOVLW 041H ;割り込み設定用パルス初期値 MOVWF S_P_130L ; MOVLW 0DH ;割り込み設定用パルス初期値 MOVWF S_P_130H ; MOVLW 020H ;パルス初期値 MOVWF PARUSUH_O MOVLW 0F0H ;パルス初期値 MOVWF TMR1L MOVLW 0F0H ;パルス初期値 MOVWF TMR1H MOVLW B'00000000' ;ゲートフラグの初期値 MOVWF G_FLG ;******************************************************************* CALL TEST_H MAIN BTFSS PORTB,4 ;ポートB`の信号状態確認 GOTO TEST_P ;0 CALL P_HIKAKU ;135Km比較計算 MAIN2 BSF INTCON,7 MOVF PORTB,W ;ポートB`の信号の読み取り MOVWF PORTB_TEMP ;信号保存 BTFSC PORTB_TEMP,0 ;ポートAの信号状態確認 GOTO P_ON ;1 入力パルス 5V on GOTO P_OFF ;0 入力パルス 0V off P_ON ;5Vの時 BTFSS G_FLG,3 ;分岐135Km以上、以下 BSF PORTA,2 ;0 以下のBTFSS G_FLG,1 GOTO S_END ;信号が反転しない P_OFF ;0Vの時 BTFSS G_FLG,3 ;135Km以上、以下 BCF PORTA,2 ;0 以下の時ポートBの0 GOTO S_END ; S_END GOTO MAIN P_HIKAKU MOVF PARUSUL_O,W ;計算用 MOVWF PARUSUL ;元信号 MOVF PARUSUH_O,W ;元信号 MOVWF PARUSUH ;計算用 BTFSS G_FLG,3 GOTO IN_130 GOTO OUT_110 IN_130 MOVF P_130L,W MOVWF P_140L MOVF P_130H,W MOVWF P_140H GOTO KEISANN OUT_110 MOVF P_110L,W MOVWF P_140L MOVF P_110H,W MOVWF P_140H GOTO KEISANN MOVF PARUSUH,W BTFSC STATUS,Z INCF PARUSUH,F KEISANN MOVF P_140L,W SUBWF PARUSUL,F BTFSS STATUS,0 DECF PARUSUH,F MOVF P_140H,W SUBWF PARUSUH,F BTFSS STATUS,0 GOTO WARIKOMI_ON_1 GOTO WARIKOMI_OFF WARIKOMI_ON_1 MOVF S_P_130L,W MOVWF P_MAKE_L MOVF S_P_130H,W MOVWF P_MAKE_H GOTO WARIKOMI_ON MOVF PARUSUL_O,W MOVWF P_MAKE_L MOVF PARUSUH_O,W MOVWF P_MAKE_H GOTO WARIKOMI_ON WARIKOMI_OFF BCF PIR1,0 ;TIMER1 OVER FIOW フラグクリア BCF G_FLG,3 ;内部パルス作成モードオン0から BCF INTCON,5 ;TMR0割り込み禁止 RETURN WARIKOMI_ON BTFSC G_FLG,3 ;130Km比較結果フラグ RETURN ; BSF PORTA,2 ;------------------------------------ COMF P_MAKE_L,W ; MOVWF TMR0 ; MOVF P_MAKE_H,W ; MOVWF PARUSU_H_T ; ;-------------------------------------- BCF INTCON,2 ;TMR0割り込みフラグのクリア BSF INTCON,5 ;TMR0割り込み許可 BSF G_FLG,3 ;内部パルス作成モードオン0から BCF G_FLG,7 ;割り込み内のポート管理フラグ 0から RETURN TEST_P ;テストパルス中は、外部に出さないで処理する。 ;--------------------------------------- MOVF P_40L,W ;40Km初期値設定 MOVWF P_MAKE_L ; MOVF P_40H,W MOVWF P_MAKE_H ;-------------------------------------- CALL WARIKOMI_ON ; BTFSS PORTB,4 ;ポートRB4信号状態確認 GOTO TEST_P ;内部ルーチン CALL WARIKOMI_OFF GOTO MAIN2 ;メインに戻る ;--------------------------------- TEST_H BCF T1CON,0 ;タイマー1の停止 BCF INTCON,1 ;RB0不可 BCF INTCON,4 ;RB0不可 BSF INTCON,7 ;--------------------------------------------- MOVF P_40L,W ;40Km初期値設定 MOVWF P_MAKE_L ; MOVF P_40H,W MOVWF P_MAKE_H ;-------------------------------------- CALL WARIKOMI_ON ; CALL TIM1S CALL TIM1S CALL TIM1S BSF T1CON,0 ;タイマー1の動作 BCF INTCON,1 ;RB0不可 BSF INTCON,4 ;RB0不可 ;-------------------------- CALL WARIKOMI_OFF RETURN TIM1S CALL TIM025S CALL TIM025S CALL TIM025S CALL TIM025S RETURN TIM20 ;約20μSEC 22.8タイマ MOVLW 012H MOVWF TIMCNT TIMLP DECFSZ TIMCNT,F GOTO TIMLP RETURN TIM02 ;約0.2mSECタイマ MOVLW 0FFH MOVWF TIM2CNT TIM2LP NOP DECFSZ TIM2CNT,F GOTO TIM2LP RETURN TIM5 ;約5msecタイマ MOVLW 01AH MOVWF TIM5CNT TIM5LP CALL TIM02 DECFSZ TIM5CNT,F GOTO TIM5LP RETURN TIM025S ;約025Secタイマ MOVLW 014H ; MOVWF TIM1SCNT TIM1SLP CALL TIM5 DECFSZ TIM1SCNT,F GOTO TIM1SLP RETURN END