; //////////////////////////////////////////////////////////////////// ; //////////////////////////////////////////////////////////////////// ; msオーダーのウェイト ; //////////////////////////////////////////////////////////////////// wait_ms wait_ms0 clrf calc_cn2 wait_ms1 nop nop nop nop nop nop nop decfsz calc_cn2,F goto wait_ms1 decfsz calc_cn,F goto wait_ms0 return ; //////////////////////////////////////////////////////////////////// ; μsオーダーのウェイト ; //////////////////////////////////////////////////////////////////// wait_us wait_us0 decfsz calc_cn,F goto wait_us0 return ; //////////////////////////////////////////////////////////////////// ; PIC 初期化 ; //////////////////////////////////////////////////////////////////// init_pic bsf STATUS,RP0 ;セレクトページ1 ;[OPTIONレジスタの設定] ;7 RBPU   0 :PORTBのPullUp = 0:あり 1:なし ;6 INTEDGE  1 :INT割込み信号のエッジ = 0:立ち下がり 1:立ち上がり ;5 TOCS 0 :TMR0ソース選択 = 0:RA4ピン 1:内部 ;4 TOSE 0 :TMR0のカウントエッジ = 0:立ち上がり 1:立ち下がり ;3 PSA 0 :プリスケーラ割当 = 0:TMR0 1:WDT ;2 PS0〜2 5 :プリスケーラ値 = (TMR0)0:2 1:4 2:8 3:16 4:32 5:64 6:128 7:256 ; PS0〜2 :プリスケーラ値 = (WDT )0:1 1:2 2:4 3:8 4:16 5:32 6:64 7:128 movlw B'01000101' movwf OPTION_REG-0x80 ;OPTION REG に書き込み movlw B'00000000' ; RA? は全部OUT movwf TRISA-0x80 movlw B'11110001' ; RB1-RB3ピンをOUT movwf TRISB-0x80 bcf STATUS,RP0 ;セレクトページ0 clrf PORTA clrf PORTB ; RAM初期化 ; 0c 〜 3f クリア movlw 0x0c movwf FSR ram_init_loop1 clrf INDF incf FSR,F btfss FSR,6 goto ram_init_loop1 ; 続いて 40 〜 4f クリア ram_init_loop2 clrf INDF incf FSR,F btfss FSR,4 goto ram_init_loop2 movlw 0xff movwf rb_save return