; PIC10F200 LED lighting ON/OFF by double NiH battery ; 04/17/2010 revised ; GP2に1.2k経由2SC2458を接続、TRのCにはインダクタを接続 ; インダクタは100μHとし、1μS駆動、20μSあるいは200μSオフ list p=PIC10F200 #include <P10F200.inc> ;CONFIGULATION GP3/MCLR 使う __CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC count1 EQU 0x10 ;inducter on/off counter count2 EQU 0x11 ; LED ON/OFF 1st counter count3 EQU 0x12 ; LED ON/OFF 2nd counter onoff EQU 0x13 ; LED ON/OFF FLAG ODD=on ; org 0x0 nop movwf OSCCAL ;OSCCAlにセットする nop clrf GPIO ;GPIOをクリア nop movlw b'00001010' ;WORK<-00001010 GP0,2出力、GP1、3入力 movwf GPIO ;GPIOレジスタへ0000 1010を設定 TRIS GPIO ;GPIO制御レジスタのGP0,2をアクティブに movlw b'10000110' ;ウェイクアップ無効、弱プルアップ有効 option ;弱プルアップ設定 ビット6が0 bcf GPIO,2 ;GP2 OFF bsf onoff,0 ;LED ON/OFF FLAG を1に MAIN movlw 0xFF ;255回LOOP movwf count2 ;1st counter set incf onoff,1 ; LED ON/OFF 1加算して MAIN2 movlw 0x8 ;8*255 8回 movwf count3 ;2nd counter set LOOP1 movlw 0x0FF ;255回LOOP movwf count1 ;work -> count1レジスタにループカウントを設定 LOOP2 decfsz count1,1 ;decrement count1レジスタ1減算 goto LOOP2 ;結果がゼロになるまでループ btfsc onoff,0 ;onoffが0ならば次命令スキップ=消灯 bsf GPIO,2 ;Inducter current ON インダクタに充電電流流す bcf GPIO,2 ;Inducter current OFF 電流を切る movlw 0x10 ;50μs set 切る時間50μs設定値 btfsc GPIO,1 ;Bright/Dark SW check GP1暗明スイッチの状態を見る movlw 0x02 ;10μs set スイッチが入っていると0なのでこの命令スキップ movwf count1 ;work -> count1レジスタにループカウントを設定 decfsz count3 ;ON/OFF 2nd counter 1減算 goto LOOP2 ;結果がゼロで無ければループ decfsz count2 ;ON/OFF 1st counter 減算 goto MAIN2 ;2nd counter goto MAIN ;1st counter
org 0xff retlw 02 ;チップのOSCCAL固有値をもってもどる end