|
;---------------------------------------------------------------
; Relay Power down Logic for PIC10F222
;---------------------------------------------------------------
LIST P=10F222,R=DEC,C=128,N=90
#include ; processor specific variable definitions
errorlevel -302 ; suppress message 302 from list file
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _MCPU_OFF & _IOSCFS_8MHZ
;===============================================================
; RYPD (Relay Power down Logic)
;
; V00.50 Test Version PWM(50%,33%) Test 2014/08/04
; V00.40 Test Version PWM(33%,25%) Test 2014/07/16
; V00.30 Test Version PWM(33%) Test 2014/07/16
; V00.20 Test Version On Delay Test 2014/07/15
; V00.10 Test Version Int:416uS 2014/07/15
;===============================================================
; Hardware Connection
; (I/O) GP3(6) GP2(4) GP1(3) GP0(1) Vss(2) Vdd(5)
; (DI) In --- --- --- Digital
; (DO) --- Out LED Debug Digital
; (ICSP) Vpp --- CLK DAT To PICkit3
;
; GP0 On delay デバッグ用出力
; GP1 LED (Run Lamp) CPU作動監視用LED
; GP2 Out put リレー駆動出力
; GP3 In put リレー駆動入力
;===============================================================
; Work Area (counter/timer/flag/buffer tempolary work)
;===============================================================
WSWSTS EQU 0x09 ;
; WSWSTS,0 ;GP3 (N)
; WSWSTS,1 ;GP3 (N-1)
; WSWSTS,2 ;GP3 Delay
; WSWSTS,3 ;
; WSWSTS,4 ;
; WSWSTS,5 ;
; WSWSTS,6 ;
; WSWSTS,7 ;Start Up Control
;---------------------------------------------------------------
;WADSTS EQU 0x0A ;
;WADR0L EQU 0x0B ;
;WADR0H EQU 0x0C ;
;WADR1L EQU 0x0D ;
;WADR1H EQU 0x0E ;
;WADR0_ EQU 0x0F ;
;WADR1_ EQU 0x10 ;
;WADAVC EQU 0x11 ;
; EQU 0x12 ;
; EQU 0x13 ;
; EQU 0x14 ;
; EQU 0x15 ;
; EQU 0x16 ;
; EQU 0x17 ;
; EQU 0x18 ;
WDTYCT EQU 0x19 ;
WDELAY EQU 0x1A ;
WT_02S EQU 0x1B ;Timer count 20 mS 416uSx48=20mS
WT_SEC EQU 0x1C ; // // 1 Sec x50=1Sec
;WT_MIN EQU 0x1D ; // // 1 Min x60=1Min■■■未使用■■■
;WT_HUR EQU 0x1E ; // // 1 Hur x60=1Hur■■■未使用■■■
;W_SUT1 EQU 0x1F ;
;---------------------------------------------------------------
;[416μS タイマの設定]
; TMR0 割込の場合(初期値→$FF→$00)
; T=416uS, F=OSC/4=2MHz, OSC=8MHz, P=4(1/4), a=?(ソフトによる割込処理時間)
; 256-(T*F/P)=256-(416*2/4)=256-208(+a)=48+a ;TMR0 Pre Set Value
;_TMR0 EQU 53 ;0x35
;---------------------------------------------------------------
; 今回の場合(初期値:$00→比較値)
; T=416uS, F=OSC/4=2MHz, OSC=8MHz, P=4(1/4), a=?(ソフトによる判定時間)
; T*F/P=416*2/4=208(-a)=203 ;TMR0 Comper Value
; a: 5 or 6cycles 5*(4/f)=2.5uS or 6*(4/f)=3uS (F=8MHz)
;
;_TMR0 EQU 203 ;0xCB ;T*F/P-a=416*2/4-5=203 407uS
;_TMR0 EQU 204 ;0xCC ; =416*2/4-4=204 410uS
;_TMR0 EQU 205 ;0xCD ; =416*2/4-3=205 413uS
_TMR0 EQU 206 ;0xCE ; =416*2/4-2=206 416uS■
;_TMR0 EQU 207 ;0xCF ; =416*2/4-1=207 417uS
;_TMR0 EQU 208 ;0xCF ; =416*2/4-0=208 419uS
;---------------------------------------------------------------
; Delay time T=20mS*50=1Sec _DELAY=50
_DELAY EQU 50 ;T=20mS*50=1Sec
;---------------------------------------------------------------
;
;
;===============================================================
; Reset Process
;===============================================================
;; ORG 0x1FF ;
;; MOVLW XX ;internal oscillator calibration val.
;===============================================================
; Program Start
;===============================================================
ORG 0x000 ;Reset vector
MOVWF OSCCAL ;oscillator calibration
;
MOVLW B'10010001' ;
; :::::+++------;PS2:PS0=0001(1/4) 8MHz
; ::::+---------;PSA=0(Timer0)
; :::+----------;T0SE=1(Hi-->Lo transition)
; ::+-----------;T0CS=0(internal Fosc/4)
; :+------------;/GPPU=0(Enabled)
; +-------------:/GPWU=1(Disabled)
OPTION ;Load OPTION Register
;
MOVLW B'00000000' ;
MOVWF GPIO
;
MOVLW B'00000000' ;GP0,GP1:DIO A/Dは使用しない
; MOVLW B'11000001' ;GP0:AN0,GP1:AN1
; :: :::+------;ADON=1
; :: ::+-------;GO/DONE
; :: :+--------;CHS=0, 1
; :: +---------:"0"
; ++------------;ANS1, 0
MOVWF ADCON0
;
; MOVLW B'00001000' ;
; ::++------;GP1,GP0=AN1,AN0
MOVLW B'00001001' ;
; :::+------;GP0=IN
; ::+-------;GP1=OUT
; :+--------;GP2=OUT
; +---------;GP3=IN
TRIS GPIO ;Load TRIS Register
;
;-------------------------------;Work Init
; Startup timer Value
MOVLW 100 ;50:1Sec, 100:2Sec, 150:3Sec ...
MOVWF WT_SEC
;
CLRF WSWSTS ;
CLRF WDTYCT ;カウンタセット
;
; CLRF WT_SEC ;256=0:5.12Sec(max)
; MOVLW 60
; MOVWF WT_MIN
; MOVLW 60
; MOVWF WT_HUR
;
;===============================================================
LOOP CLRF TMR0 ;TMR0 Service
;===============================================================
; 416uS Timer Service ;416uS 毎処理
;===============================================================
BTFSC WSWSTS,7 ;Start up control
GOTO TM04MS ;goto Nomal process
;-------------------------------;Start up process --------------
;
;
;
GOTO TM20MS
;-------------------------------;Nomal process -----------------
TM04MS
;-------------------------------;
; WSWSTS,0 ;GP3 (N)
; WSWSTS,1 ;GP3 (N-1)
; WSWSTS,2 ;GP3 Delay
;-------------------------------;
BTFSC WSWSTS,0
GOTO GP2CK1
BCF GPIO,GP2 ;GP2:OFF(0)
GOTO GP2END
;
GP2CK1
BTFSC WSWSTS,2
GOTO POWDWN ;オンディレー後
; ;オンディレー前
BSF GPIO,GP2 ;GP2:-->ON(1)
GOTO GP2END
;
POWDWN BTFSC GPIO,GP2 ;パワーダウン(PWM)処理
GOTO GP2ON ;現在:ON
; ;現在:OFF
MOVF WDTYCT,W
BTFSC STATUS,Z
GOTO GP2ON ;既に 0
DECFSZ WDTYCT ;デクリメント
GOTO GP2END ;カウント中
; ;カウンタ=0
BSF GPIO,GP2 ;GP2:-->ON(1)
GOTO GP2END
;
GP2ON BCF GPIO,GP2 ;GP2:ON-->OFF(0)
;---------------------------------------------------------------
; T= 416 208
; P1 P0 n PWM F F
;***** 0 0 1 50% 1.2kHz 2.4kHz
;***** 0 1 2 33% 800Hz 1.6kHz
;***** 1 0 3 25% 600Hz 1.2kHz
;***** 1 1 4 20% 480Hz 0.96kHz
;
; x 0 1 50% 1.2kHz 2.4kHz V00.50
; x 1 2 33% 800Hz 1.6kHz V00.50
;---------------------------------------------------------------
;
BTFSC GPIO,GP0
GOTO GP2ST3
;GP2ST2
MOVLW 1 ;
GOTO GP2ST
;
GP2ST3 MOVLW 2 ;
GP2ST MOVWF WDTYCT ;カウンタセット
;
GP2END
;
;-------------------------------;DEBUG On Delay Output
; BTFSS WSWSTS,2
; GOTO GP0OFF
;GP0ON BSF GPIO,GP0 ;GP0:ON(1)
; GOTO GP0END
;GP0OFF BCF GPIO,GP0 ;GP0:OFF(0)
;;
;GP0END
;;
;===============================================================
TM20MS DECFSZ WT_02S,F ;20mS Timer
GOTO CKTMR0 ;not 0
MOVLW 48 ;TM0=416uS
MOVWF WT_02S
;---------------------------------------------------------------
; 20mS Timer Service ;20mS 毎処理
;===============================================================
BTFSC WSWSTS,7 ;Start up control
GOTO TM20NP ;goto Nomal process
;-------------------------------;Start up process --------------
;
;
;
GOTO TM1SEC
;-------------------------------;Nomal process -----------------
TM20NP
;-------------------------------;
; WSWSTS,0 ;GP3 (N)
; WSWSTS,1 ;GP3 (N-1)
; WSWSTS,2 ;GP3 Delay
;-------------------------------;
;
MOVF WDELAY,W
BTFSC STATUS,Z
GOTO GP3CK1 ; =0 既にタイムアップ
DECFSZ WDELAY,F ; >0 タイマー減算
GOTO GP3CK1 ; >0 まだ減算中
BSF WSWSTS,2 ;GP3 Delay タイムアップ
;
;-------------------------------;
GP3CK1 BCF WSWSTS,1 ;GP3(N) ---> GP3(N-1)
BTFSC WSWSTS,0
BSF WSWSTS,1 ;GP3(N-1)=1
; ;GP3(N-1)=0
BCF WSWSTS,0 ;GP3 ---> GP3(N)
BTFSC GPIO,GP3
BSF WSWSTS,0 ;GP3(N)=1
; ;GP3(N)=0
BTFSS WSWSTS,0
BCF WSWSTS,2 ;GP3 Delay リセット
;
;-------------------------------;
BTFSC WSWSTS,1 ;GP3 立ち上りエッジチェック
GOTO GP3END
; ;GP3(N-1)=0
BTFSC WSWSTS,0
GOTO GP3END
; ;GP3(N)=1 立ち上り
BCF WSWSTS,2 ;GP3 Delay リセット
MOVLW _DELAY
MOVWF WDELAY ;タイマーセット
;
;-------------------------------;
GP3END
;
;
;
;===============================================================
TM1SEC DECFSZ WT_SEC,F ;1Sec Timer
GOTO CKTMR0
MOVLW 50
MOVWF WT_SEC
;
BSF WSWSTS,7 ;Start up control
;---------------------------------------------------------------
; 1Sec Timer Service ;1Sec 毎処理
;===============================================================
BTFSS GPIO,GP1
GOTO GP1ON
BCF GPIO,GP1 ;LED:OFF(消灯)
GOTO GP1END
GP1ON BSF GPIO,GP1 ;LED:ON(点灯)
GP1END
;***** ;LED点滅テスト
;***** BCF GPIO,GP2 ;LED:ON(点灯)
;***** BTFSC WSWSTS,6
;***** BSF GPIO,GP2 ;LED:OFF(消灯)
;---------------------------------------------------------------
;
;
;===============================================================
;TM1MIN DECFSZ WT_MIN,F ;1Min Timer
; GOTO CKTMR0
; MOVLW 60
; MOVWF WT_MIN
;---------------------------------------------------------------
; 1Minute Timer Service ;1Min 毎処理
;===============================================================
; ここに処理を書く
;===============================================================
;TM1HUR DECFSZ WT_HUR,F ;1Hour Timer
; GOTO CKTMR0
; MOVLW 60
; MOVWF WT_HUR
;---------------------------------------------------------------
; 1Hour Timer Service ;1Hour 毎処理
;===============================================================
; ここに処理を書く
;===============================================================
CKTMR0 MOVLW _TMR0 ; 1
SUBWF TMR0,W ;TMR0 - _TMR0 1
BTFSS STATUS,C ; 1 or 2
GOTO CKTMR0 ;TMR0 < _TMR0 2
GOTO LOOP ;TMR0 >= _TMR0 2
;===============================================================
;
END
|