;************************************************************************* ; Copyright 2004 Hata Akihiro ; ;  第5章 PICアイデア集 ; 5−6 トリマで調整可能なウェイト時間を作る。 ;------------------------------------------------------------------------- ;プログラムの説明 ;<概要> ; 簡易のこぎり波発振器を利用した調整可能ウェイトのテストプログラム。 ; ;<動作> ; 1秒の固定ウェイトと可変ウェイトを交互にくり返す。 ; 可変ウェイト中はRA1をHにする。(LED点灯) ; ;------------------------------------------------------------------------- ; ; 2004/08/23 V1.00 初回リリース ; ; ; ; ;------------------------------------------------------------------------- ; CONFIGRATION FUSE ; WDT:Disable OSC:Int RC Code Protect:OFF Power up timer:ON ; OSCILLATOR ; 4MHz ;************************************************************************* ; LIST P=PIC16F628A, R=DEC ;Target Processor INCLUDE P16F628A.INC ; __CONFIG _BODEN_OFF & _WDT_OFF & _INTOSC_OSC_NOCLKOUT & _CP_OFF & _PWRTE_ON & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF __idlocs H'0100' ;V1.00 2004/08/23 ; ;------------------------------------------------------------------------- ; DEFINE I/O Port ;------------------------------------------------------------------------- ; PortA ; RA0 input ; RA1 LED output ; RA2 input ; RA3 input ; RA4 input ; RA5 input ; ; PortB ; RB0 CR osc output/input ; RB1 input ; RB2 input ; RB3 input ; RB4 input ; RB5 input ; RB6 input ; RB7 input ; ;------------------------------------------------------------------------- ; Variables ;------------------------------------------------------------------------- ; ; ; ;------------------------------------------------------------------------- ; Registers ;------------------------------------------------------------------------- ; CNT0 EQU H'20' ; Counter for Wait Time CNT1 EQU H'21' ; Counter for Wait Time CNT2 EQU H'22' ; Counter for Wait Time ;------------------------------------------------------------------------- ; Program code ;------------------------------------------------------------------------- ; ORG H'00' ; Power ON GOTO INITIALIZE ; ; ;------------------------------------------------------------------------- ; Initialize ;------------------------------------------------------------------------- INITIALIZE BSF STATUS,RP0 MOVLW B'11111111' ; EXT INT Rising Edge MOVWF OPTION_REG MOVLW B'11111101' ; Set I/O Port INPUT/OUTPUT MOVWF TRISA MOVLW B'11111110' MOVWF TRISB BCF STATUS,RP0 MOVLW H'FF' MOVWF CMCON ; Set CMCON ;---------------------- ; OUTPUT Initialize ;---------------------- MOVLW B'00000000' MOVWF PORTA MOVLW B'00000000' MOVWF PORTB CALL WAIT1M ; WAIT 1msec ;******************************************************* ; MAIN PROGRAM ;******************************************************* MAIN CALL WAIT1S ; Fix Wait Call BSF PORTA,1 ; LED On CALL WAIT_VARI ; Variable Wait Call BCF PORTA,1 ; LED Off GOTO MAIN ; ;******************************************************* ; SUBROUTINES ;******************************************************* WAIT_VARI ; Variable Wait BSF STATUS,RP0 ; BANK1 BSF TRISB,0 ; Set RB0 INPUT BCF STATUS,RP0 ; BANK0 BTFSS PORTB,0 GOTO $-1 BSF STATUS,RP0 ; BANK1 BCF TRISB,0 ; Set RB0 OUTPUT BCF STATUS,RP0 ; BANK0 RETURN ; WAIT1M ; 1msec Wait MOVLW 100 MOVWF CNT0 NOP GOTO $+1 GOTO $+1 GOTO $+1 DECFSZ CNT0,F GOTO $-5 RETURN WAIT100M ; 100msec Wait MOVLW 100 MOVWF CNT1 CALL WAIT1M DECFSZ CNT1,F GOTO $-2 RETURN WAIT1S ; 1sec Wait MOVLW 10 MOVWF CNT2 CALL WAIT100M DECFSZ CNT2,F GOTO $-2 RETURN ; END