;****************************************************************************************** ; タイマーサンプル ; Program Name : ; Programer : ; Create date : Version 1.0 H17.08.01 ; History : ;****************************************************************************************** ; LIST P=PIC16F88,ST=OFF,R=DEC INCLUDE "P16F88.inc" ; __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC __CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF ; NUM1 EQU 0x20 NUM2 EQU 0x21 NUM3 EQU 0x22 NUM4 EQU 0x23 DEC7IN EQU 0x24 TIM EQU 0x25 TIM1 EQU 0x26 TIM001 EQU 0x27 LP EQU 0x28 LP1 EQU 0x29 LP2 EQU 0x2A ORG 0 GOTO START ORG 4 GOTO START START ; Bank0での設定 BANKSEL PORTA ; PortAのBankを選択する CLRF PORTA ; PortAの初期化(Bank0) MOVLW B'01111111' MOVWF PORTB ; Bank1での設定 BANKSEL ANSEL ; ANSELのBankを選択する(Bank1) MOVLW B'00000000' ; 全てをDegitalに設定 MOVWF ANSEL ; Degital Inputに設定(Bank1) MOVLW B'00010000' MOVWF TRISA ; PortAのI/O設定(Bank1) MOVLW B'00000000' MOVWF TRISB ; PortBのI/O設定(Bank1) ; Bank0に戻す BANKSEL PORTA ; PortAのBankを選択する CLRF NUM1 CLRF NUM2 CLRF NUM3 CLRF NUM4 MAIN CALL DWSW GOTO MAIN ;****************************************************************************************** ; Function Name : DINIT ; Disctiption : 初期メッセージ表示(PUSH) ; Input : ; Output : ;****************************************************************************************** DINIT ; P文字 MOVLW B'01111111' MOVWF PORTB MOVLW B'00000001' MOVWF PORTA MOVLW B'00010010' MOVWF PORTB CALL WAT001 ; U文字 MOVLW B'01111111' MOVWF PORTB MOVLW B'00000010' MOVWF PORTA MOVLW B'00001100' MOVWF PORTB CALL WAT001 ; S文字 MOVLW B'01111111' MOVWF PORTB MOVLW B'00000100' MOVWF PORTA MOVLW B'01000001' MOVWF PORTB CALL WAT001 ; H文字 MOVLW B'01111111' MOVWF PORTB MOVLW B'00001000' MOVWF PORTA MOVLW B'00010100' MOVWF PORTB CALL WAT001 RETURN ;****************************************************************************************** ; Function Name : UPSW ; Disctiption : UPカウント(時間設定) ; Input : ; Output : ;****************************************************************************************** UPSW CALL UPCNT MOVLW 060H MOVWF LP UPSW1 CALL OUTSUB4 DECFSZ LP,F GOTO UPSW1 RETURN ;****************************************************************************************** ; Function Name : UPCNT ; Disctiption : UPカウンタ(時計形式) ; Input : NUM1〜4 ; Output : NUM1〜4 ;****************************************************************************************** UPCNT MOVLW H'01' ADDWF NUM1,F ; 1桁目(1分)は10進カウンタ(0Aで桁上げ) MOVFW NUM1 SUBLW H'0A' BTFSS STATUS,Z RETURN CLRF NUM1 MOVLW H'01' ADDWF NUM2,F ; 2桁目(10分)は6進カウンタ(06で桁上げ) MOVFW NUM2 SUBLW H'06' BTFSS STATUS,Z RETURN CLRF NUM2 MOVLW H'01' ADDWF NUM3,F ; 3桁目(1時間)は10進カウンタ(0Aで桁上げ) MOVFW NUM3 SUBLW H'0A' BTFSS STATUS,Z RETURN CLRF NUM3 MOVLW H'01' ADDWF NUM4,F ; 4桁目(10時間)は3進カウンタ(03で桁上げ) MOVFW NUM4 SUBLW H'03' BTFSS STATUS,Z RETURN CLRF NUM1 CLRF NUM2 CLRF NUM3 CLRF NUM4 RETURN ;****************************************************************************************** ; Function Name : DWSW ; Disctiption : DOWNカウント(時間設定) ; Input : ; Output : ;****************************************************************************************** DWSW CALL DWCNT MOVFW NUM1 XORLW H'FF' BTFSS STATUS,Z GOTO DWSW0 DWSW0L CALL DINIT BTFSS PORTA,4 GOTO DWSW0L CLRF NUM1 DWSW0H CALL UPSW BTFSS PORTA,4 RETURN GOTO DWSW0H DWSW0 CALL WAIT1M RETURN ;****************************************************************************************** ; Function Name : WAIT1M ; Disctiption : 1分待つ ; ※このWAIT以外は一瞬なので、誤差として考えない ; Input : ; Output : ;****************************************************************************************** WAIT1M MOVLW 29 MOVWF LP2 WAIT1MC MOVLW 60 MOVWF LP1 WAIT1MB MOVLW 100 MOVWF LP WAIT1MA CALL OUTSUB4 ;1268 STEP DECFSZ LP,F GOTO WAIT1MA DECFSZ LP1,F GOTO WAIT1MB DECFSZ LP2,F GOTO WAIT1MC RETURN ;****************************************************************************************** ; Function Name : DWCNT ; Disctiption : DOWNカウンタ(時計形式) ; Input : NUM1〜4 ; Output : NUM1〜4 ;****************************************************************************************** DWCNT MOVFW NUM1 XORLW H'00' BTFSC STATUS,Z GOTO DWCNT2 DECF NUM1,F RETURN DWCNT2 MOVLW H'09' ; 1桁目(1分)は10進カウンタ(0=>9) MOVWF NUM1 MOVFW NUM2 XORLW H'00' BTFSC STATUS,Z GOTO DWCNT3 DECF NUM2,F RETURN DWCNT3 MOVLW H'05' ; 2桁目(10分)は6進カウンタ(0=>5) MOVWF NUM2 MOVFW NUM3 XORLW H'00' BTFSC STATUS,Z GOTO DWCNT4 DECF NUM3,F RETURN DWCNT4 MOVLW H'09' ; 3桁目(1時)は10進カウンタ(0=>9) MOVWF NUM3 MOVFW NUM4 XORLW H'00' BTFSC STATUS,Z GOTO DWCNT5 DECF NUM4,F RETURN DWCNT5 MOVLW H'FF' ; 4桁目(10時)は終了 MOVWF NUM1 CLRF NUM2 CLRF NUM3 CLRF NUM4 RETURN ;****************************************************************************************** ; Function Name : OUTSUB4 ; Disctiption : 7セグメント表示(NORMAL TYPE) ; Input : NUM1〜4 ; Output : PORTB ;****************************************************************************************** OUTSUB4 ; 1268 STEP MOVFW NUM1 MOVWF DEC7IN MOVLW B'11111111' MOVWF PORTB MOVLW B'00001000' MOVWF PORTA CALL DEC7SEG ; 7 STEP CALL WAT001 ; 304 STEP MOVFW NUM2 MOVWF DEC7IN MOVLW B'11111111' MOVWF PORTB MOVLW B'00000100' MOVWF PORTA CALL DEC7SEG CALL WAT001 MOVFW NUM3 MOVWF DEC7IN MOVLW B'11111111' MOVWF PORTB MOVLW B'00000010' MOVWF PORTA CALL DEC7SEG CALL WAT001 MOVFW NUM4 MOVWF DEC7IN MOVLW B'11111111' MOVWF PORTB MOVLW B'00000001' MOVWF PORTA CALL DEC7SEG CALL WAT001 RETURN ;****************************************************************************************** ; Function Name : DEC7SEG ; Disctiption : 7セグメントドライバー ; Input : DEC7IN(BINARY) ; Output : PORTB ;****************************************************************************************** DEC7SEG MOVFW DEC7IN CALL TABLE7 MOVWF PORTB RETURN TABLE7 ADDWF PCL,F RETLW B'10001000' ; 0 RETLW B'11111100' ; 1 RETLW B'10100010' ; 2 RETLW B'11100000' ; 3 RETLW B'11010100' ; 4 RETLW B'11000001' ; 5 RETLW B'10000001' ; 6 RETLW B'11111000' ; 7 RETLW B'10000000' ; 8 RETLW B'11000000' ; 9 RETLW B'10010000' ; A RETLW B'10000101' ; B RETLW B'10001011' ; C RETLW B'10100100' ; D RETLW B'10000011' ; E RETLW B'10010011' ; F ;****************************************************************************************** ; Function Name : WAT001 ; Disctiption : タイマー関数 ; Input : ; Output : ;****************************************************************************************** WAT001 MOVLW 100 MOVWF TIM001 WAT001A NOP DECFSZ TIM001,F GOTO WAT001A RETURN END