
No.1ベストアンサー
- 回答日時:
圧電ブザーは他励式だと仮定して書かせてもらいます。
音は、圧電ブザーのON/OFFで出すことが可能ですが、周波数(音階)は1秒間に何回ON/OFFを繰り返せるかで周波数が決まります。例えば、周波数800Hzは、1秒にONとOFFを1組として800組繰り返します。
ようは、ONとOFFの時間が可変長な関数を作ってやれば色々な周波数を出すことができます。
[参考関数]
void sound( int time, int count )
{
int loop;
// 残り時間だけループを繰り返す。
for( ; time>0 ; time-=(count*2) ) {
// 圧電ブザーをONにする。ON時間はcountで決まる。
for( loop=0 ; loop<count ; loop++ ) {
圧電ブサーのポートをONに。
}
// 圧電ブザーをOFFにする。OFF時間はcountで決まる。
for( loop=0 ; loop<count ; loop++ ) {
圧電ブサーのポートをOFFに。
}
}
}
[説明]
timeでなり続ける時間を指定します。
countでON/OFFの周期を指定します。大きな数字ほど周波数が低くなります。0は音が鳴りません。
C言語だとアセンブラほど高速にON/OFFを繰り返せないので、アセンブラに比べると出せる周波数は低めになるかと思います。いろんな値を入れて実際にどんな音するか試してみてください。
それとこのプログラムはCPUを占有しますので、音を鳴らしながら平行して処理をしたい場合は、タイマー割り込みでブザーをON/OFFする方式に変更しないと実用性が低いかもしれません。
この回答への補足
対応ありがとうございます。
この記述は、CCS社のCコンパイラーに対応しているのでしょうか?
PIC用に動かしたいのですが、上記の記述は音を鳴らすことが出来ますか?
No.2
- 回答日時:
実はPICはアセンブラ専門でC言語もフリーの物しか使ったことがありません。
CCS社のCコンパイラが使ったことが無いので断言は出来ませんが一般のC言語としては問題ない書き方をしました。不安があるとすれば、intの値の範囲で十分に音階を制御できるかどうかですね。intで足りなければlongにする必要があります。
それとmain関数や圧電ブサーのポートをON/OFFの部分は書いてありませんので付け加えをお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アセンブラからC言語に変換する...
-
プログラム言語
-
PICのアセンブラからC言語へ変...
-
アセンブラ言語がわかりません。
-
[C言語→アセンブリ言語]はどう...
-
MPLAB IDE v8.92アセンブラにつ...
-
ライン数とステップ数の違いは?
-
アセンブラでWindowsAPI
-
アセンブラについて
-
組み込み系C言語の学習法
-
IBM system/360
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
一般のソフトで画像を扱う場合...
-
コンピュータが処理できるビッ...
-
スロースキャンコンピュータ 加...
-
C言語「K&R」の演習2-9について
-
ビットシフトってどんな時使うの?
-
C言語によるウェイト
-
レジストってなんですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
アセンブラ言語がわかりません。
-
このアセンブラの意味を教えて...
-
実行ファイルからソースはみれる?
-
高級言語がアセンブリ言語に比...
-
アセンブラのコードについて質...
-
MASMの擬似命令「ASSUME」について
-
PICに書き込むプログラムや変数...
-
アセンブラwordという単位
-
【H8マイコン】HEWで埋め込みア...
-
アセンブリ言語について。
-
アセンブリ言語について
-
アセンブラの配列処理
-
PICC(HI-TECH SoftWare)によるI...
-
アセンブラで割り算
-
アセンブラのLA
-
アセンブラ言語で質問です。
-
Cとアセンブラ
-
PICはアセンブラとC言語のどち...
おすすめ情報