ドレミファ オルガン







配線図



PIC入門電子工作、その2として16F84Aを使ってドレミファ オルガンを作ってみました。PORTBがちょうど8BITですのでOPTIONレジスターの7BITをクリアしてプルアップしタクトSW8個でドレミファの各音を出しています。先に作ったタイマーとプログラムも回路もほとんど同じです。





;*****************************************

;	

;	ドレミファ オルガン

;

;*****************************************

	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












アセンブラにかけると以下のようにhexファイルが出来ます




:100000008601831685018113FF308600831206184E

:100010000D28382006180728432086181328382072

:1000200086180D2852200619192838200619132879

:10003000612086191F283820861919287120061A70

:1000400025283820061A1F287F20861A2B283820BA

:10005000861A25288D20061B31283820061B2B28C0

:100060009A20861B07283820861B3128A7200728BE

:100070000A308D008E308E003D283E288E0B3C28A5

:100080008D0B3A280800851543308C00B520482890

:1000900049280000851143308C00B5204F28061CEC

:1000A0004328080085153C308C00B5205728851161

:1000B0003B308C00B5205C285D285E28861C5228C9

:1000C0000800851535308C00B5206628672868281B

:1000D0000000851135308C00B5206E28061D612882

:1000E0000800851532308C00B520762877288511D8

:1000F00032308C00B5200000861D7128080085155F

:100100002D308C00B520000085112C308C00B520DE

:1001100089288A28061E7F280800851528308C002B

:10012000B520851127308C00B52096280000861E4A

:100130008D280800851523308C00B5209F28A02825

:10014000851123308C00B520061F9A2808008515DC

:1001500021308C00B520AC280000851121308C00A6

:10016000B5200000861FA7280800B628B7288C0BEA

:04017000B5280800A6

:00000001FF










基板パターン





PIC電子工作 目次に戻る

-- トップペ-ジ -- アマチュア無線 -- 14MHzトランシーバー -- ホビー電子工作 -- ラジオ雑学クラブ -- PIC電子工作 -- DIARY -- プリント基板配布 -- リンクのページ --










トップペ-ジに戻る