;*****************************************
;
; ドレミファ オルガン
;
;*****************************************
LIST P=16F84A, R=DEC
INCLUDE P16F84A.INC
;*****************************************
CBLOCK H'0C'
CNT
CNT10
CNTM
ENDC
;*****************************************
; I/O 設定
;*****************************************
CLRF PORTB
BSF STATUS,RP0
CLRF TRISA
BCF OPTION_REG,7
MOVLW H'FF'
MOVWF TRISB
BCF STATUS,RP0
;*******************************************
; KEY
;*******************************************
KEY
BTFSC PORTB,0 ;KEY ON?
GOTO K1 ;KEY OFF
CALL DEL10M ;
BTFSC PORTB,0 ;チャタリング
GOTO KEY ;KEY OFF
CALL DO_ ;ド
K1 BTFSC PORTB,1 ;KEY ON?
GOTO K2 ;KEY OFF
CALL DEL10M
BTFSC PORTB,1 ;チャタリング
GOTO K1
CALL RE ;レ
K2 BTFSC PORTB,2 ;KEY ON?
GOTO K3 ;KEY OFF
CALL DEL10M
BTFSC PORTB,2
GOTO K2
CALL MI ;ミ
K3 BTFSC PORTB,3 ;KEY ON?
GOTO K4 ;KEY OFF
CALL DEL10M
BTFSC PORTB,3
GOTO K3
CALL FA ;ファ
K4 BTFSC PORTB,4 ;KEY ON?
GOTO K5 ;KEY OFF
CALL DEL10M
BTFSC PORTB,4
GOTO K4
CALL SO ;ソ
K5 BTFSC PORTB,5 ;KEY ON?
GOTO K6 ;KEY OFF
CALL DEL10M
BTFSC PORTB,5
GOTO K5
CALL RA ;ラ
K6 BTFSC PORTB,6 ;KEY ON?
GOTO K7 ;KEY OFF
CALL DEL10M
BTFSC PORTB,6
GOTO K6
CALL SI ;シ
K7 BTFSC PORTB,7 ;KEY ON?
GOTO KEY ;KEY OFF
CALL DEL10M
BTFSC PORTB,7
GOTO K7
CALL DO ;ド
GOTO KEY
;***********************************************
; 10MSEC ループタイマー
;
;***********************************************
DEL10M MOVLW 10
MOVWF CNT10
DLY10 MOVLW 142
MOVWF CNTM
DLYU GOTO $+1
GOTO $+1
DECFSZ CNTM,1
GOTO DLYU
DECFSZ CNT10,1
GOTO DLY10
RETURN
;**********************************************
DO_ BSF PORTA,3
MOVLW 67
MOVWF CNT
CALL DLY
GOTO $+1
GOTO $+1
NOP
BCF PORTA,3
MOVLW 67
MOVWF CNT
CALL DLY
GOTO $+1
BTFSS PORTB,0
GOTO DO_
RETURN
RE BSF PORTA,3
MOVLW 60
MOVWF CNT
CALL DLY
GOTO $+1
BCF PORTA,3
MOVLW 59
MOVWF CNT
CALL DLY
GOTO $+1
GOTO $+1
GOTO $+1
BTFSS PORTB,1
GOTO RE
RETURN
MI BSF PORTA,3
MOVLW 53
MOVWF CNT
CALL DLY
GOTO $+1
GOTO $+1
GOTO $+1
NOP
BCF PORTA,3
MOVLW 53
MOVWF CNT
CALL DLY
GOTO $+1
BTFSS PORTB,2
GOTO MI
RETURN
FA BSF PORTA,3
MOVLW 50
MOVWF CNT
CALL DLY
GOTO $+1
GOTO $+1
BCF PORTA,3
MOVLW 50
MOVWF CNT
CALL DLY
NOP
BTFSS PORTB,3
GOTO FA
RETURN
SO BSF PORTA,3
MOVLW 45
MOVWF CNT
CALL DLY
NOP
BCF PORTA,3
MOVLW 44
MOVWF CNT
CALL DLY
GOTO $+1
GOTO $+1
BTFSS PORTB,4
GOTO SO
RETURN
RA BSF PORTA,3
MOVLW 40
MOVWF CNT
CALL DLY
BCF PORTA,3
MOVLW 39
MOVWF CNT
CALL DLY
GOTO $+1
NOP
BTFSS PORTB,5
GOTO RA
RETURN
SI BSF PORTA,3
MOVLW 35
MOVWF CNT
CALL DLY
GOTO $+1
GOTO $+1
BCF PORTA,3
MOVLW 35
MOVWF CNT
CALL DLY
BTFSS PORTB,6
GOTO SI
RETURN
DO BSF PORTA,3
MOVLW 33
MOVWF CNT
CALL DLY
GOTO $+1
NOP
BCF PORTA,3
MOVLW 33
MOVWF CNT
CALL DLY
NOP
BTFSS PORTB,7
GOTO DO
RETURN
;*************************************************
; ループタイマー
;************************************************
DLY GOTO $+1
GOTO $+1
DECFSZ CNT,1
GOTO DLY
RETURN
;*************************************************
; END
;*************************************************
END
|