Skip to content

Instantly share code, notes, and snippets.

@xiupos
Created February 6, 2018 01:34
Show Gist options
  • Save xiupos/c1dec1d97346c81cb67e6b92d18dd158 to your computer and use it in GitHub Desktop.
Save xiupos/c1dec1d97346c81cb67e6b92d18dd158 to your computer and use it in GitHub Desktop.
16F84A+YMZ294(ドラム風)
; ドラム風
; ha2zakura
list p=16F84A ; 使用するPICの種類の定義
#include <p16F84A.inc> ; 設定ファイルの指定
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
; _CP_OFF プログラムコードプロテクト無効
; _WDT_OFF ウォッチドドック・タイマ無効
; _PWRTE_ON パワーアップタイム有効
; _HS_OSC 外部クロック(4MHz-20MHz)
;***** 定数の定義 **
TIM1 EQU 0x0C ; タイマー用
TIM2 EQU 0x0D ; タイマー用
ADR EQU 0x0E ; 書き込みアドレス
DAT EQU 0x0F ; 書き込みデータ
NP EQU 0x10
;**********************************************************************
ORG 0x000 ; リセット
BSF STATUS, RP0
CLRF TRISA ; 0 : 出力, 1 : 入力
CLRF TRISB ; bit0 -> RA0(RB0)
BCF STATUS, RP0
call TIMTIM ; YMZ294が起動するまで待つ
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
goto MAIN ; MAINへ移動
;**********************************************************************
; メイン
MAIN call MIXVOL ; 音量の設定
LOOP movlw B'00011111'
movwf NP
call NOISE
call TIMTIM
call Q
call TIMTIM
call TIMTIM
call TIMTIM
movlw B'00000001'
movwf NP
call NOISE
call TIMTIM
call Q
call TIMTIM
call TIMTIM
call TIMTIM
movlw B'00011111'
movwf NP
call NOISE
call TIMTIM
call Q
call TIMTIM
movlw B'00011111'
movwf NP
call NOISE
call TIMTIM
call Q
call TIMTIM
movlw B'00000001'
movwf NP
call NOISE
call TIMTIM
call Q
call TIMTIM
call TIMTIM
call TIMTIM
goto LOOP
MIXVOL movlw B'00000111' ; $07(ミキサーの設定)
movwf ADR
movlw B'00110111' ; C B A C B A
movwf DAT ; ノイズ トーン
call SUB1 ; 0 = 出力
return
NOISE movlw B'00000110' ; $06(ミキサーの設定)
movwf ADR
movf NP, w ; 下位5bitが周波数
movwf DAT
call SUB1
movlw B'00001000' ; $08(チャンネルAの音量)
movwf ADR
movlw B'00001111' ; 下位4bitが音量
movwf DAT
call SUB1
return
Q movlw B'00001000' ; $08(チャンネルAの音量)
movwf ADR
movlw B'00000000' ; 下位4bitが音量
movwf DAT
call SUB1
return
; 書き込み ; WR CS AC Data
SUB1 movlw B'00001000' ; 0 0 0
movwf PORTA
movf ADR, W ; 0 0 0 ADR
movwf PORTB
movlw B'00001011' ; 1 1 0
movwf PORTA ; ADRを書き込む
movlw B'00001100' ; 0 0 1
movwf PORTA
movf DAT, W ; 0 0 1 DAT
movwf PORTB
movlw B'00001111' ; 1 1 1
movwf PORTA ; DATを書き込む
return
; タイマー
TIM movlw 0x0FF
movwf TIM1
TIMLP nop
decfsz TIM1, F
goto TIMLP
return
TIMTIM movlw 0x066
movwf TIM2
TIMLP2 call TIM
decfsz TIM2, F
goto TIMLP2
return
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment