【お題】引っかけ問題(締め切り10月27日(日)23時)

PIC16F84Aを使い、アセンブリ言語でプログラミングした音をスピーカから流す、というような回路を
作っています。
http://homepage3.nifty.com/mitt/pic/pic5_11.html
こちらが参考にしているページです。
こちらのページの真ん中あたり、『追加実験2 「ドレミファソラシド」を演奏』 のアセンブリプログラムをつかわさせていただいてます。
実際にこのプログラムを実行すると、「ドーレーミーファーソーラーシードー」という単調なメロディがスピーカから流れてきます。
この「ドレミファソラシド」を変えて、自分の好きなようにプログラミングしたいです。
そのためには音階も変えてディレイもかけないとだめなんですが、説明を読んでもあまり理解できません。
どなたか例を出して説明してくれませんか? 宜しくお願い致します。

A 回答 (2件)

PIC16F84のアセンブラはしばらく使ってなかったので、細かいところは忘れてしまいました。


もしかして間違っていたらご容赦を。

とりあえず判ることは
1)メロディを変えるには
----------------------
doremi
ADDWFPCL,f

RETLWd'75';ド┐
RETLWd'67';レ|
RETLWd'59';ミ|
RETLWd'56';ファ|
RETLWd'50';ソ├─ ←※このデータの並び方を変える
RETLWd'44';ラ|
RETLWd'40';シ|
RETLWd'37';ド┘
----------------------

2)一音毎の長さを変えるには
----------------------
intr
BCFINTCON,T0IF;割込みフラグクリア
:
:
BSFtimer,T500mS;500mSフラグセット
MOVLWd'100'  ←※d'***'の数値を変える
----------------------

……で良いと思います。

なお個々の音ごとに演奏時間を変えるのは、プログラムの大幅な改良が必要でしょう。
次善の策としては、基準音符を8分音符相当の長さに設定して、例えば4分音符なら「ドド」2分音符なら「ドドドド」のように基準音符の倍数でデータ指定してやる方法上がると思います。

なおサンプルプログラムでは1オクターブ8音分を出力すると繰り返しに戻ってしまいますが、これをもっと長く演奏させるにはどうしたら良いかは、ざっと見たところでは私には判りませんでした。
もっと詳しい方のご回答を待ちたいと思います。
なお言うまでもないことですが、クソの役にも立たない無意味な1行回答は平然と無視するのがよいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
わかりやすい説明、とても助かりました。一音毎の長さは設定できても、個々の音の長さを変えるのは難しそうですね。それができれば幅が広がると思って色々と考えてたのですが・・
もう少し自分で考えてみて、なにもできなければ締め切らせていただきます。

ありがとうございました。

お礼日時:2012/01/15 13:51

工学系の質問ですな。

スピーカは工学系の表記なのでよいとして,メロディーはメロディとは書きません。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2012/01/15 13:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報