;*************************************************************************** ; 標準フレーム 16F873 USE ; 目的 CCP TEST ; ;*************************************************************************** ; CCP TEST ; OSC=4MHz 2009.01.30 作製 最終改良 2009.01.31 ;--------------------------------------------------------------------------- LIST P=16F873,F=INHX8M,R=DEC #include "P16F873.INC" ;--------------------------------------------------------------------------- ORG 0 GOTO START ORG 4 GOTO PUSHU ;--------------------------------------------------------------------------- START W EQU 0 F EQU 1 SELF EQU 1 W_TEMP EQU H'20' ;割込用 STATUS_TEMP EQU H'21' ;割込用 COUNT1 EQU H'24' ;タイマー用 COUNT2 EQU H'25' ;タイマー用 COUNT3 EQU H'27' ;タイマー用 ;--------------------------------------------------------------------------- ;PORTA,5 DOUT ; ;PORTA,4 OUT ; ;PORTA,3 DOUT : ;PORTA,2 DOUT ; ;PORTA,1 DOUT ; ;PORTA,0 DOUT ;TEST OUT ;PORTB,7 OUT ; ;PORTB,6 OUT ; ;PORTB,5 OUT ; ;PORTB,4 OUT ; ;PORTB,3 OUT : ;PORTB,2 OUT ; ;PORTB,1 OUT ; ;PORTB,0 OUT ; ;PORTC,7 OUT ; ;PORTC,6 OUT ; ;PORTC,5 OUT ; ;PORTC,4 OUT ; ;PORTC,3 OUT : ;PORTC,2 OUT ; ;PORTC,1 OUT ; ;PORTC,0 OUT ; ;--------------------------------------------------------------------------- ; PORT INZ ;--------------------------------------------------------------------------- BCF STATUS,RP1 ;BANK <1;0> BCF STATUS,RP0 ;BANK 0 CLRF PORTA ; BSF STATUS,RP0 ;BANK 1 MOVLW B'00000111' ;ALL D MOVWF ADCON1 MOVLW B'00000000' MOVWF TRISA ;PORTA SET BCF STATUS,RP0 ;BANK 0 CLRF PORTA CLRF PORTB BSF STATUS,RP0 ;BANK 1 MOVLW B'00000000' MOVWF TRISB ;PORTB SET BCF STATUS,RP0 ;BANK 0 CLRF PORTB CLRF PORTC BSF STATUS,RP0 ;BANK 1 MOVLW B'00000000' MOVWF TRISC ;PORTC SET BCF STATUS,RP0 ;BANK 0 CLRF PORTC ;--------------------------------------------------------------------------- ; 関連機能の設定 ;--------------------------------------------------------------------------- ;----- TMR1 SET ----------------------------------------------------------- MOVLW B'00000000' ;PRI SCALE 1:1 ;内部クロック使用 MOVWF T1CON ;TMR1 を停止しておきます ;----- CCP1CON SET -------------------------------------------------------- MOVLW B'00001011' ;スペシャル、コンペアモードを設定 MOVWF CCP1CON ;設定をレジスタに書込 ;----- CCPR1H,CCPR1L SET -------------------------------------------------- MOVLW D'0' ;上位のコンペア数を MOVWF CCPR1H ;上位コンペアレジスタに設定 MOVLW D'200' ;下位のコンペア数を MOVWF CCPR1L ;下位コンペアレジスタに設定 ;----- 割込設定 ---------------------------------------------------------- CLRF INTCON ;INTCON のクリア BSF INTCON,PEIE ;周辺割込の許可 BCF STATUS,RP1 ;BANK 0:1 を選択 BSF STATUS,RP0 ;BANK 1 を選択 BSF PIE1,CCP1IE ;CCP1 割込の許可 BCF STATUS,RP0 ;BANK 0 に戻す BCF PIR1,CCP1IF ;CCP1 割込発生フラグのクリア BSF INTCON,GIE ;全割込の許可 ;*************************************************************************** ; MAIN ;*************************************************************************** MAIN CLRF TMR1H ;TMR1 H のカウンターをクリアします CLRF TMR1L ;TMR1 L のカウンターをクリアします BSF T1CON,TMR1ON ;TMR1 START MAIN2 NOP GOTO MAIN2 ;************************************************************************** ; SUB ;************************************************************************** US50 MOVLW D'15' MOVWF COUNT1 LOOP1 DECFSZ COUNT1,F GOTO LOOP1 RETURN ;*************************************************************************** ; INT ;*************************************************************************** PUSHU MOVWF W_TEMP ;レジスタ類の退避 SWAPF STATUS,W BCF STATUS,RP0 MOVWF STATUS_TEMP BSF PORTA,0 CALL US50 ;50μS の遅延 BCF PORTA,0 BCF PIR1,CCP1IF ;割込発生フラグのクリア POP BCF STATUS,RP0 ;レジスタ類の復帰 SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,SELF SWAPF W_TEMP,W RETFIE ;割込みを許可したリターン ;*************************************************************************** ; END ;*************************************************************************** END ;***************************************************************************