;****************************************************************************************** ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H23.05.10 ; History : ; Laungage : MPLAB MPASM ;****************************************************************************************** ; (1)Description ; ;****************************************************************************************** LIST P=PIC12F683,ST=OFF,R=DEC INCLUDE "P12F683.inc" __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF ; SUP_LED EQU H'0005' R_LED EQU H'0004' R_SW EQU H'0002' W_LMP EQU H'0001' ; WAT1M1 EQU 20H WAT1S2 EQU 21H WAT1S1 EQU 22H WAT01S1 EQU 23H STAT1 EQU 24H STAT2 EQU 25H ORG 0 GOTO START ORG 4 GOTO START START ;********************************** ; 1.初期化処理 ;********************************** ; (1)オシレータの設定(内部8MHzにする) BSF STATUS,RP0 ; BANK1を選択 BSF OSCCON,6 ; 8MHzを設定 BSF OSCCON,5 ; 8MHzを設定 BSF OSCCON,4 ; 8MHzを設定 NOP NOP BCF STATUS,RP0 ; BANK0を選択 ; (2)ポートの設定1(アナログ/デジタル設定) BSF STATUS,RP0 ; BANK1を選択 BCF ANSEL,0 ; GP0(AN0)をデジタルにする BCF ANSEL,1 ; GP1(AN1)をデジタルにする BCF ANSEL,2 ; GP2(AN2)をデジタルにする BCF ANSEL,3 ; GP4(AN3)をデジタルにする BCF STATUS,RP0 ; BANK0を選択 ; (3)ポートの設定2(ディレクション設定) BSF STATUS,RP0 ; BANK1を選択 MOVLW B'11011101' ; PORT設定 MOVWF TRISIO ; PORT設定 BCF STATUS,RP0 ; BANK0を選択 ; (4)ポートの設定3(プルアップ設定) BSF STATUS,RP0 ; BANK1を選択 BSF WPU,2 ; GPIO(2)をプルアップする BCF STATUS,RP0 ; BANK0を選択 ; (5)初期値の設定 BCF GPIO,SUP_LED BCF GPIO,W_LMP MAIN ;********************************** ; 2.メインプログラム ;********************************** ; (1)振動センサーの状態チェック1 BTFSS GPIO,R_SW GOTO MAIN1B BCF STAT1,0 GOTO MAIN2 MAIN1B BSF STAT1,0 ; (2)少し待つ MAIN2 CALL TIMER ; (3)振動センサーの状態チェック2 BTFSS GPIO,R_SW GOTO MAIN2B BCF STAT2,0 GOTO MAIN3 MAIN2B BSF STAT2,0 ; (4)状態1と状態2が異なるなら処理実行 MAIN3 BTFSS STAT1,0 GOTO MAIN3B BTFSC STAT2,0 GOTO MAIN GOTO MAIN4 MAIN3B BTFSS STAT2,0 GOTO MAIN GOTO MAIN4 MAIN4 CALL CHKLED GOTO MAIN ;************************************************************************************ ; Function Name : CHKLED ; Title : 明暗をチェックし、暗ならランプを点灯する ; Input : ; Output : ;************************************************************************************ CHKLED ; 1.LED回路に電源を供給する BSF GPIO,SUP_LED CALL WAT01S ; 2.チェックする BTFSS GPIO,R_LED GOTO CHKLED2 ; 3-1.明の場合の処理 CHKLED1 ; a)LED回路の電源供給を停止する BCF GPIO,SUP_LED CALL WAT01S RETURN ; 3-2.暗の場合の処理 CHKLED2 ; a)LED回路の電源供給を停止する BCF GPIO,SUP_LED CALL WAT01S ; b)ランプを点灯する BSF GPIO,W_LMP CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S CALL WAT1S BCF GPIO,W_LMP RETURN ;************************************************************************************ ; Function Name : WAT1M ; Title : Wait 1[M] ; Input : ; Output : ;************************************************************************************ WAT1M MOVLW H'64' MOVWF WAT1M1 WAT1MA CALL WAT1S DECFSZ WAT1M1,F GOTO WAT1MA RETURN ;************************************************************************************ ; Function Name : WAT1S ; Title : Wait 1[S] ; Input : ; Output : ;************************************************************************************ WAT1S MOVLW H'0A' MOVWF WAT1S2 WAT1SB MOVLW H'64' MOVWF WAT1S1 WAT1SA CALL TIMER DECFSZ WAT1S1,F GOTO WAT1SA DECFSZ WAT1S2,F GOTO WAT1SB RETURN ;************************************************************************************ ; Function Name : WAT01S ; Title : Wait 0.1[S] ; Input : ; Output : ;************************************************************************************ WAT01S MOVLW H'64' MOVWF WAT01S1 WAT01SA CALL TIMER DECFSZ WAT01S1 GOTO WAT01SA RETURN ;************************************************************************************ ; Function Name : TIMER ; Title : Wait 0.001[S] ; Input : ; Output : ;************************************************************************************ TIMER ; ; 1.Set Register ; (1)T1CON Register ; T1CON[7] T1GINV: Timer1 Gate Invert bit(1) ; 1 = Timer1 gate is inverted ; 0 = Timer1 gate is not inverted ; T1CON[6] TMR1GE: Timer1 Gate Enable bit(2) ; If TMR1ON = 0: This bit is ignored. ; If TMR1ON = 1: ; 1 = Timer1 is on if Timer1 gate is not active ; 0 = Timer1 is on ; T1CON[5-4] T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits ; 11 = 1:8 Prescale Value ; 10 = 1:4 Prescale Value ; 01 = 1:2 Prescale Value ; 00 = 1:1 Prescale Value ; T1CON[3] T1OSCEN: LP Oscillator Enable Control bit ; If INTOSC without CLKOUT oscillator is active: ; 1 = LP oscillator is enabled for Timer1 clock ; 0 = LP oscillator is off ; Else: This bit is ignored. ; T1CON[2] T1SYNC: Timer1 External Clock Input Synchronization Control bit ; TMR1CS = 1: ; 1 = Do not synchronize external clock input ; 0 = Synchronize external clock input ; TMR1CS = 0: ; This bit is ignored. Timer1 uses the internal clock. ; T1CON[1] TMR1CS: Timer1 Clock Source Select bit ; 1 = External clock from T1CKI pin (on the rising edge) ; 0 = Internal clock (FOSC/4) ; T1CON[0] TMR1ON: Timer1 On bit ; 1 = Enables Timer1 ; 0 = Stops Timer1 ; MOVLW B'00000101' MOVWF T1CON ; (2)Set TMR1 Value ; 8000000Hz(Int_OSC)/4/8(Prescale)/10(0.1[S]) => 0d25000(0x61A8) ; 0xFFFF(-)0xF424 => 0d40535(0x9E57) ; 8000000Hz(Int_OSC)/4/1(Prescale)/1000(0.001[S]) => 0d2000(0x7D0) ; 0xFFFF(-)0x07D0 => 0d63535(0xF82F) ; MOVLW H'F8' ; *TMR1 MOVWF TMR1H ; *TMR1 MOVLW H'2F' ; *TMR1 MOVWF TMR1L ; *TMR1 ; 2.Timer BCF PIR1,TMR1IF BTFSS PIR1,TMR1IF GOTO $-1 RETURN END