Comments
Description
Transcript
Title シングルチップマイクロコンピュータを用いたボイスレコーダの開発
Title シングルチップマイクロコンピュータを用いたボイスレコーダの開発 Author(s) 秋葉, 治克 Citation 北海道教育大学紀要. 自然科学編, 66(1): 1-17 Issue Date 2015-08 URL http://s-ir.sap.hokkyodai.ac.jp/dspace/handle/123456789/7832 Rights Hokkaido University of Education 北海道教育大学紀要(自然科学編)第66巻 第1号 Journal of Hokkaido University of Education(Natural Sciences)Vol. 66, No.1 平 成 27 年 8 月 August, 2015 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 秋 葉 治 克 北海道教育大学旭川校電気研究室 Development of a Voice Recorder using a Single Chip Microcomputer AKIBA Haruyoshi Electric Laboratory, Asahikawa Campus, Hokkaido University of Education, Asahikawa 070-8621 ABSTRACT This paper describes the development of a voice recorder which used a single chip microcomputer. The outline is as follows. When recording, a sound is changed into an analog electric signal with a microphone, and The signal is amplified with an amplifier. ―Then, it changes into digital data with the A-D converter contained in the single chip microcomputer, and it is saved in an external random access memory. When reproducing, the digital data is changed into an analog electric signal with the D-A converter contained in the single chip microcomputer, and it is amplified with an amplifier. ―Then, a sound is generated from a loudspeaker. This sound can be reproduced by pushing the button equipped on the surface of equipment. Moreover, it can also be made to reproduce when a human body is detected using an infrared sensor. 1.まえがき レ コ ー ダ の よ う に 携 帯 し て 持 ち 運 び, イ ン タ ビュー録音などの用途に使用することを想定した 部屋などを不在にするとき,来客に対してホワ ものではなく,一定の場所に固定して,人体検出 イトボードや貼り紙を活用してメッセージを伝え 赤外線センサを使って人体を検出し留守中の来訪 ることがよく行われている。本研究ではこの代用 者にメッセージを伝えることを目的としている。 に音声をディジタル化し記憶媒体であるランダム その概要は,録音時に音声をマイクでアナログ アクセスメモリに記録する録音機器として,シン 電気信号に変換し増幅器で増幅した後,シングル グルチップマイクロコンピュータを用いたボイス チップマイクロコンピュータに内蔵されている レコーダの開発を行った。本装置は,市販のIC A/D変換器でディジタルデータに変換し外部の 1 秋 葉 治 克 ランダムアクセスメモリに保存する。再生時には, 2.準備および操作 そのディジタルデータをシングルチップマイクロ コンピュータに内蔵されているD/A変換器でア 図1および図2にボイスレコーダ本体表面およ ナログ電気信号に変換し増幅器で増幅した後,ス び裏面の外観を示す。また,図3にマイク,図4 ピーカから音声を発生させる。さらに,人体検出 にスピーカ,図5にMPモーションセンサの外観 赤外線センサを使って人体が検出されると自動的 を示す。 に音声を再生させる機能を持たせた。これにより, 準 備 は 設 置 作 業 か ら 始 ま る。 本 体 を 蛍 光 灯 留守中でも人にメッセージを伝えることが可能と チェーン(真鍮メッキ,#16×1M)を使って壁 なった。 掛けとし,マイクは本体底部に取り付けた金具(真 使用したシングルチップマイクロコンピュータ 中よーと,サイズ25mm)に引っ掛ける。MPモー はシステム構成に必要な周辺機能を集積した日立 ションセンサは木ねじを使ってメッセージを伝え H8/3048である。このH8/3048は,内部32ビット ようとする人が通る廊下の天井にねじ止めする。 構成で16ビット×16本の汎用レジスタと高速動作 スピーカはメッセージが聞こえやすい高所に任意 を指向した簡潔で最適化された命令セットを備え の方法で取り付ける。設置作業が終了したら電源 ており,16Mバイトのアドレス空間を扱うことが プラグをコンセント(AC100V)に差込み,本体 できる。システム構成に必要な周辺機能としては 表面のRESETボタンを押せば準備完了である。 128kバイトROM,4kバイトRAM,I/Oポート, 操作は全て本体表面で行い,録音モードを選ぶ A/D変 換 器,D/A変 換 器,16ビ ッ ト イ ン テ グ ことから始まる。スライドスイッチを「20秒」側 レーテッドタイマユニット(ITU) ,プログラマ にするとメッセージを20秒間録音し再生できる。 ブルタイミングパターンコントローラ(TPC), 「各10秒」側にするとチャネルCH1とCH2の二つ ウオッチドックタイマ(WDT),シリアルコミュ に分割し,別々に10秒間録音し再生できる。この ニケーションインタフェース(SCI) ,DMAコン 場合,チャネルの選択は,スライドスイッチの右 トローラ(DMAC) ,リフレッシュコントローラ 手にあるタンブラスイッチを「CH1」側か「CH2」 などを内蔵している。アドレス空間は8つのエリ 側にすることによって行う。 アに分割されており,エリアごとにデータバス幅, 録音を始めるには,押しボタン「録音」を押す。 アクセスステートを選択でき,各種のメモリを容 すると,録音開始を知らせるブザーが鳴り,押し 易に接続することができる。MCU動作モードは, ボタン「録音」の上にあるLEDが赤く点灯し録 モード1~7(シングルチップモード1種類,拡 音中であることを知らせる。マイクに向かって 張モード6種類)があり,データバス幅とアドレ メッセージを録音し,録音終了時間に達すると ス空間を選択することができる1)。 LEDが消灯する。 教育的には,本研究の内容は平成11年度からそ 再生を始めるには,押しボタン「再生」を押す。 の開発段階に応じて学部学生を対象とした卒業研 すると,再生開始を知らせるブザーが鳴り,押し 究(4単位,4年生)のテーマとして取り上げ実 ボタン「再生」の上にあるLEDが赤く点灯し再 践してきた。開発当初はポケットコンピュータ 生中であることを知らせる。録音されたメッセー (Z-1GR, カ シ オ ),A/D変 換 器(ADC0809), ジが再生され,再生終了時間に達するとLEDが D/A変換器(AD558)など一体化されていない 消灯する。 電子部品を使い録音時間8秒のものであったが 赤外線で人体を検出して自動再生を始めるに A/D変換,D/A変換のしくみを学習する教材と は,押しボタン「センサ」を押す。すると,MPモー して役立った。 ションセンサの検出距離の範囲内を人が通るたび に再生開始を知らせるブザーが鳴り,押しボタン 2 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 「センサ」の上にあるLEDが赤く点灯し再生中 する。 であることを知らせる。録音されたメッセージが なお,録音,再生,センサによる自動再生を途 再生され,再生終了時間に達するとLEDが消灯 中で中止したいときはRESETボタンを押す。 図1 本体(表面) 図2 本体(裏面) 3 秋 葉 治 克 図3 マイク 図4 スピーカ 図5 MPモーションセンサ 4 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 3.ハードウェア A/D変換器(10ビット分解能,8チャネル,変 換時間最小7.4μs,サンプル&ホールド機能内蔵) 図6にマイコン周辺部の回路図を示す。回路は の入力端子であり,メッセージ録音中に限りアナ AKI-H8/3048F超高性能マイコンボード(秋月電 ログ電気信号が入力され内部でディジタルデータ 子通商) ,メモリHM628128BLP-8(1M CMOS に変換される。このディジタルデータは,チップ Static RAM,日立),ブザー(TMB-05-01C), セレクトCS1(外部アドレス空間の当該エリアが ダイオード(1S1588),トランジスタ(2SC1815), 選択されたときLowレベルを出力する),HWR LED(TLR123),押しボタンスイッチ(DPI-120, (ライト時にLowレベルを出力する),RD(リー 12mm×12mm,赤,青,橙),タンブラスイッチ ド時にLowレベルを出力する),アドレスバスA0 (ATEID-2M3-10), ス ラ イ ド ス イ ッ チ(SS- ~ A16,データバスD8~ D15(8ビットアクセ 22SDP2,NKK),RESETボタン(B3W-1000), ス空間ではデータバスの上位側を使用する)によ カーボン被膜抵抗器(2k,5.1k,各1/4W),抵 りメモリHM628128BLP-8に書き込み/読み込み 抗アレー(10k,M9-1-103J)で構成する。これ が行われる。RESはリセット端子である。VCCは らの電子部品はすべてプリント基板(ICB-96, 電源(+5V),VSSは電源(0V,GND)である。 サンハヤト)にはんだ付けした。動作は,AKI- 図7にマイクおよび増幅部の回路図を示す。回 H8/3048FにおいてI/OポートP4-3(出力)はト 路は2線式コンデンサマイク (KUC2123-040245) , ランジスタを駆動してブザーのON/OFFを行う。 オーディオ電力増幅器(TA7368P,東芝),電解 P4-0,P4-1,P4-2(出力)はLEDを駆動してそ コンデンサ(1μ,50Vおよび100μ,25V),セラ の点灯/消灯を行う。P6-0,P6-1,P6-2(入力) ミックコンデンサ(4700p,50V),カーボン被膜 は録音ボタン,再生ボタン,センサボタンが押さ 抵 抗 器(1k,1/4W), 可 変 抵 抗 器(30k,CT- れたかどうかを検出する。P4-4(入力)はスラ 6P)で構成する。このうち2線式コンデンサマ イドスイッチが「20秒」側(スイッチOFF,+5 イクはプリント基板(ICB-86,サンハヤト)に V)か「各10秒」側(スイッチON,0V)どちら はんだ付けした。それ以外の電子部品はすべてマ を選択しているかを検出する。P4-5(入力)は イコン周辺部のプリント基板に一緒にはんだ付け タンブラスイッチが「CH1」側(スイッチON, した。動作は,音声を2線式コンデンサマイクで 0V) か「CH2」 側( ス イ ッ チOFF,+5V) ど アナログ電気信号に変換した後,オーディオ電力 ちらを選択しているかを検出する。P4-6(出力) 増幅器で増幅してAKI-H8/3048FのA/D変換器入 はメッセージ再生中に限りD/A変換器のデータ 力端子AN0に与える。 書き込み周期に等しい周波数の矩形波を出力す 図8にスピーカおよび増幅部の回路図を示す。 る。P4-7(出力)はメッセージ録音中に限りA/ 回路はスピーカ(8Ω,0.5W,TS-150,MARK- D変換器のサンプリング周期に等しい周波数の矩 IT) ,オーディオ電力増幅器(TA7368P,東芝), 形波を出力する。この二つの矩形波はオシロス 電解コンデンサ(470μ,100μ,各25V),セラミッ コープ観測用として用いる。MD1はCPUモード クコンデンサ(4700p,50V),可変抵抗器(5k, をモード5(内蔵ROM有効拡張1Mバイトモー CT-6P)で構成する。スピーカ以外の電子部品 ド)に設定するためGNDに接続する。IRQ0は外 はすべてマイコン周辺部のプリント基板に一緒に 部割込み端子であり,人体が検出されると割込み はんだ付けした。動作は,AKI-H8/3048FのD/A 処理ルーチンの実行が開始される。DA0はD/A変 変換器出力端子DA0から与えられるアナログ電気 換器(8ビット分解能,2チャンネル,変換時間 信号をオーディオ電力増幅器で増幅してスピーカ 最大10μs)の出力端子であり,メッセージ再生 から音声を発生させる。 中に限りアナログ電気信号が出力される。AN0は 図9にMPモーションセンサおよび増幅部の回 5 秋 葉 治 克 路図を示す。回路はMPモーションセンサ (NaPiOn, リッジ(1B4B41,400V,1A),3端子電圧安定 AMN11111, 松下電工),トランジスタ(2SC1815), 器(78M05),電解コンデンサ(4700μ,47μ,各 カーボン被膜抵抗器(1k,4.3k,10k,各1/4W) 16V),セラミックコンデンサ(0.1μ,50V)で構 で構成する。これらの電子部品はすべて2線式コ 成する。変圧器とヒューズを除く電子部品はプリ ンデンサマイクとは別のプリント基板(ICB-86, ント基板(ICB-93S-2,サンハヤト)にはんだ付 サンハヤト)にはんだ付けした。なお,MPモー けした。動作は,AC100Vを変圧器によってAC ションセンサの性能等は動作電圧DC3~6V, 9Vに降圧し,ダイオードブリッジで整流した後, 標準タイプ,レンズ色は黒,検出距離は最大5m, 3端子電圧安定器と電解コンデンサおよびセラ 検出範囲は水平方向100°,垂直方向82°である。 ミックコンデンサにより安定化しDC5V電源と 動作は,人体から発せられる赤外線の変化をMP し た。 こ のDC5V電 源 の 消 費 電 流 は 待 機 時 モーションセンサでアナログ電気信号に変換した 75mA,録音時120mA,再生時およびセンサによ 後,トランジスタで増幅してAKI-H8/3048Fの外 る自動再生時214mA,センサによる自動再生時 部割込み端子IRQ0に与える。このIRQ0信号は人 であって,かつ人体が検出されず待機中のとき 体を検出すると0V,検出しないと+5Vになる。 75mAである。 図10に電源部の回路図を示す。回路は変圧器(一 なお,本装置の乾電池駆動は消費電流が常時 次 側AC100V, 二 次 側AC9V,0.3A,SP-903, 75mA以上となるため,乾電池の早期消耗や音質 S.E.L) ,ガラス管ヒューズ(1A),ダイオードブ 劣化をきたすので実用的ではない。 AKI-H8/3048F超高性能マイコンボード +5V ブザー TMB-05-01C 5.1k×3 録音 LED TLR123 再生 センサ トランジスタ Vcc ダイオード 1S1588 2k CN1-34 2SC1815 CN1-33 CN1-32 CN1-31 抵抗アレ― センサボタン 10k×5 CN3-37 CN3-36 CN3-35 再生ボタン 録音ボタン CN3-6 CN3-5 P4-3 P4-2 P4-1 P4-0 P6-2 P6-1 P6-0 P4-7 P4-6 タンブラスイッチ CN3-4 スライドスイッチ +5V CN3-3 CN2-4 RESET ボタン CN1-37 or 38 CN5-4 P4-5 P4-4 RES VSS MD1 IRQ0 DA0 AN0 CS1 HWR RD A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 D15 D14 D13 D12 D11 D10 D9 D8 CN1-35 CN2-18 D/A OUT A/D IN CN2-12 メモリ HM628128BLP-8 CN1-6 22 CN2-8 29 CN2-7 24 CN3-31 2 CN3-30 31 CN3-29 3 CN3-28 28 CN3-27 CN3-26 4 25 CN3-25 23 CN3-24 26 CN3-23 CN3-22 27 5 CN3-21 6 7 CN3-20 CN3-19 CN3-18 CN3-17 CN3-16 CN3-15 CN3-14 CN3-13 CN3-12 CN3-11 CN3-10 CN3-9 CN3-8 CN3-7 図6 回路図(マイコン周辺部) 6 +5V IRQ0 CN1-3 8 9 10 11 12 21 20 19 18 17 15 14 13 +5V CS1 WE OE A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 I/O7 I/O6 I/O5 I/O4 I/O3 I/O2 I/O1 I/O0 VDD CS2 VSS 32 30 16 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 オーディオ電力増幅器 TA7368P +5V 2線式 コンデンサ マイク +5V 1k 1 8 6 5 1μ 3 7 9 1 A/D IN 2 30k 4700p 1回転式 100μ 100μ 図7 回路図(マイクおよび増幅部) オーディオ電力増幅器 TA7368P スピーカ 8Ω,0.5W 470μ 7 8 6 5 3 9 +5V 47μ 1 D/A OUT 5k 1回転式 100μ 100μ 4700p 図8 回路図(スピーカおよび増幅部) +5V +5V 10k MPモーションセンサ NaPiOn Vdd OUT GND IRQ0 4.3k トランジスタ 2SC1815 1k 図9 回路図(MPモーションセンサおよび増幅部) ヒューズ 1A AC100V 変圧器 SP-903 S.E.L ダイオードブリッジ 1B4B41 ~ + - 9V 0.3A 3端子電圧安定器 78M05 IN OUT +5V COMM ~ 4700μ 47μ 0.1μ GND 図10 回路図(電源部) 7 秋 葉 治 克 4.ソフトウェア 図11~図13にフローチャートを示す。付録にプ ログラムリストを示す2)。 [主プログラム] [録音サブルーチン] 始 め 始 め シンボルの定義 IRQ0割込み禁止 ベクタアドレスの設定 レジスタの待避 スタックポインタの設定 録音モード の検出 マニュアル(秋月電子通商)に従 い,シリアルコミュニケーショ ンインタフェース(SCI)を使用 しないので,ポート9のP9-0, P9-1を出力に,P9-2,P9-3を 入力に設定 各10秒 チャネル の検出 20秒 外部RAMの保存開始アドレスを #H'20000,保存終了アドレスを #H'3FFFFに設定 ポート4のP4-0,P4-1,P4-2,P4-3, P4-6,P4-7を出力に, P4-4,P4-5を入力に設定 三つのLEDを消灯,ブザーをOFF ポート6のP6-0,P6-1,P6-2を 入力に設定 ブザーをON チップセレクトCS1を,外部アドレス 空間H'20000~H'3FFFFのエリアに設定 時間待ち ブザーをOFF A/D変換器を単一モード,チャネルAN0使用, 変換時間134ステートに設定 ブザーの残響が消えるまで 時間待ち 録音LEDを点灯 D/A変換器のチャネル0のD/A変換のみ許可 三つのLEDを消灯,ブザーをOFF A/D変換を開始 P4-7を論理反転 録音ボタンが 押されたか? YES サブルーチンROKUONを呼び出す NO 再生ボタンが 押されたか? NO A/D変換 終了か YES YES 時間待ち サブルーチンSAISEIを呼び出す NO A/D変換データを入力 A/D変換終了フラグをクリア センサボタンが 押されたか? YES A/D変換データの上位8ビット を外部RAMに保存 サブルーチンSENSAを呼び出す NO 外部RAMのアドレスをカウント するためのレジスタER5の内容 を+1 NO 外部RAMの 保存終了アドレス に達したか YES 録音LEDを消灯 レジスタの復帰 RTS 図11 フローチャート(その1) 8 CH1 外部RAMの保存開始アドレスを #H'20000,保存終了アドレスを #H'2FFFFに設定 ポート1,2,5をアドレスバス A0~A19に設定 外部トリガ入力によるA/D変換を禁止 CH2 外部RAMの保存開始アドレスを #H'30000,保存終了アドレスを #H'3FFFFに設定 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 [再生サブルーチン] [センササブルーチン] 始 め 始 め IRQ0割込み禁止 IRQ0割込み禁止 レジスタの待避 レジスタの待避 録音モード の検出 三つのLEDを消灯,ブザーをOFF 各10秒 ブザーをON チャネル の検出 20秒 外部RAMの保存開始アドレスを #H'20000,保存終了アドレスを #H'3FFFFに設定 CH2 時間待ち CH1 外部RAMの保存開始アドレスを #H'20000,保存終了アドレスを #H'2FFFFに設定 ブザーをOFF 外部RAMの保存開始アドレスを #H'30000,保存終了アドレスを #H'3FFFFに設定 センサLEDを点灯 レジスタの復帰 コンディションコードレジスタ (CCR)の割込みマスクビット(I) をクリアして割込み受付け可能 三つのLEDを消灯,ブザーをOFF ブザーをON IRQ0割込みのプライオリティ レベルを1に設定 時間待ち IRQ0割込みをLowレベルセンス に設定 ブザーをOFF IRQ0割込み禁止状態の時ラッチ された新たなIRQ0割込み要求信号 やIRQ0サービスルーチン実行時に ラッチされた新たなIRQ0割込み要 求信号をクリアして2重割込みが かからないようにする 再生LEDを点灯 外部RAMから保存して いたディジタルデータ を読み込む IRQ0割込み許可 D/A変換器にディジタル データを書き込んで D/A変換を開始 RTS P4-6を論理反転 時間待ち 外部RAMのアドレスをカウント するためのレジスタER5の内容 を+1 NO 外部RAMの 保存終了アドレス に達したか YES 再生LEDを消灯 レジスタの復帰 RTS 図12 フローチャート(その2) 9 秋 葉 治 克 [IRQ0サブルーチン] 始 め IRQ0割込み禁止 レジスタの待避 録音モード の検出 10各秒 チャネル の検出 20秒 外部RAMの保存開始アドレスを #H'20000,保存終了アドレスを #H'3FFFFに設定 CH2 CH1 外部RAMの保存開始アドレスを #H'20000,保存終了アドレスを #H'2FFFFに設定 外部RAMから保存して いたディジタルデータ を読み込む D/A変換器にディジタル データを書き込んで D/A変換を開始 P4-6を論理反転 時間待ち 外部RAMのアドレスをカウント するためのレジスタER5の内容 を+1 NO 外部RAMの 保存終了アドレス に達したか YES レジスタの復帰 IRQ0割込み禁止状態の時ラッチ された新たなIRQ0割込み要求信号 やIRQ0サービスルーチン実行時に ラッチされた新たなIRQ0割込み要 求信号をクリアして2重割込みが かからないようにする IRQ0割込み許可 RTE 図13 フローチャート(その3) 10 外部RAMの保存開始アドレスを #H'30000,保存終了アドレスを #H'3FFFFに設定 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 5.本装置のサンプリング周波数 人の耳に聞こえる音の周波数は人によって多少 異なるが,最低20Hzから最高20kHz程度の範囲 である。人の会話は100Hzから8kHz程度の範囲 で,しかも300Hzから3.4kHzくらいの周波数成分 の音が大部分であり,電話では主としてこの周波 数を伝送している。 そこで, 本装置では音質を電話の音質(3.4kHz) 程度にするため,A/D変換器のサンプリング周 波数をその約2倍の6.6kHz(サンプリング周期 でいうと150μs)にした。それに合わせてD/A変 換器へのディジタルデータ書き込み周波数も 6.6kHz(書き込み周期でいうと150μs)とした。 これにより,本装置の音質は誰の声か,何と言っ ているのかきちんと判別できる程度となった。 6.おわりに 本装置の実用例として,大学の研究室出入り口 に設置し研究室不在中に訪れる学生諸君等の来客 へのメッセージ伝達に使用した。本体とマイクは 研究室内に設置し,MPモーションセンサは出入 り口付近の廊下の天井に設置し,ドアをノックし た人だけに反応するようにレンズ部にφ10mm× 長さ40mmの円筒状の黒ゴムをかぶせた。スピー カは廊下の高所に設置した。本体とMPモーショ ンセンサおよびスピーカをつなぐ電線は換気口を 通した。最後に,本装置は昼間だけでなく夜の暗 がりの中でも人体検出赤外線センサで人体を検出 しメッセージを伝えることができるので,例えば 自宅敷地内への不審者の侵入,盗難防止対策にも 応用できるのではないかと考える。 参考文献 1)H8/3048シリーズ,H8/3048F-ZTAT TMハードウェ アマニュアル,日立製作所(1994) 2)H8/3048シリーズプログラミングマニュアル,日立 製作所(1999) 11 秋 葉 治 克 付 録 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 ;-------------------------------------------------------------------; 主プログラム ;-------------------------------------------------------------------.CPU 300HA .SECTION A,DATA,LOCATE=H'00000 ; I/Oポートのシンボル定義 P1_DDR .EQU H'FFFC0 ;ポート1データディレクションレジスタ P2_DDR .EQU H'FFFC1 ;ポート2データディレクションレジスタ P4_DDR .EQU H'FFFC5 ;ポート4データディレクションレジスタ P4_DR .EQU H'FFFC7 ;ポート4データレジスタ P5_DDR .EQU H'FFFC8 ;ポート5データディレクションレジスタ P6_DDR .EQU H'FFFC9 ;ポート6データディレクションレジスタ P6_DR .EQU H'FFFCB ;ポート6データレジスタ P8_DDR .EQU H'FFFCD ;ポート8データディレクションレジスタ P9_DDR .EQU H'FFFD0 ;ポート9データディレクションレジスタ ; A/D変換器のシンボル定義 ADDRAH .EQU H'FFFE0 ;A/Dデータレジスタ上位8bit(AH) ADDRAL .EQU H'FFFE1 ;A/Dデータレジスタ下位8bit(AL) ADCSR .EQU H'FFFE8 ;A/Dコントロール/ステータスレジスタ ADCR .EQU H'FFFE9 ;A/Dコントロールレジスタ ; D/A変換器のシンボル定義 DADR0 .EQU H'FFFDC ;D/Aデータレジスタ0 DACR .EQU H'FFFDE ;D/Aコントロールレジスタ ; 割込みコントローラのシンボル定義 ISCR .EQU H'FFFF4 ;IRQセンスコントロールレジスタ IER .EQU H'FFFF5 ;IRQイネーブルレジスタ IPRA .EQU H'FFFF8 ;インタラップトプライオリティレジスタA ISR .EQU H'FFFF6 ;IRQステータスレジスタ ; リセットのベクタアドレスの設定 .DATA.LINIT ; 外部割込みIRQ0のベクタアドレスの設定 .ORG H'00030 .DATA.LIRQ0 ; スタックとI/Oポートの設定 .ORG H'00100 INIT: MOV.L #H'FFF10,ER7 ;スタックポインタの設定 MOV.B #H'C3,R0L MOV.B R0L,@P9_DDR ;ポートP9-0とP9-1を出力に,P9-2とP9-3を入力に設定 MOV.B #H'FF,R0L MOV.B R0L,@P1_DDR ;ポート1をアドレスバスA0~A7として使用 MOV.B R0L,@P2_DDR ;ポート2をアドレスバスA8~A15として使用 MOV.B R0L,@P5_DDR ;ポート5をアドレスバスA16~A19として使用 MOV.B #H'CF,R0L MOV.B R0L,@P4_DDR ;ポートP4-0,P4-1,P4-2,P4-3,P4-6,P4-7を出力に, ;P4-4,P4-5を入力に設定 MOV.B #H'F8,R0L MOV.B R0L,@P6_DDR ;ポートP6-0,P6-1,P6-2を入力に設定 MOV.B #H'08,R0L MOV.B R0L,@P8_DDR ;外部アドレス空間H'20000~H'3FFFFアクセス時CS1出力 50 51 52 53 54 ; A/D変換器の設定 MOV.B #H'08,R0L MOV.B R0L,@ADCSR MOV.B #H'7F,R0L MOV.B R0L,@ADCR ;単一モード,AN0使用,変換時間134ステートに設定 ;外部トリガ入力によるA/D変換を禁止 プログラムリスト(その1) 12 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 ; D/A変換器の設定 MOV.B #H'5F,R0L MOV.B R0L,@DACR ;チャンネル0のみD/A変換を許可 ; 録音・再生・センサボタンが押されたか検出 MOV.B #H'37,R0L MOV.B R0L,@P4_DR ;三つのLEDを消灯,ブザーをOFF LOOP: BTST #H'00,@P6_DR ;録音ボタンの検出 BNE JMP1 ;ボタンを押していないときはJMP1へ飛ぶ BSR ROKUON ;ボタンを押しているときはサブルーチンROKUONを呼ぶ JMP1: BTST #H'01,@P6_DR ;再生ボタンの検出 BNE JMP2 ;ボタンを押していないときはJMP2へ飛ぶ BSR SAISEI ;ボタンを押しているときはサブルーチンSAISEIを呼ぶ JMP2: BTST #H'02,@P6_DR ;センサボタンの検出 BNE LOOP ;ボタンを押していないときはLOOPへ飛ぶ BSR SENSA ;ボタンを押しているときはサブルーチンSENSAを呼ぶ BRA LOOP ;LOOPへ飛ぶ ;-------------------------------------------------------------------; 録音サブルーチン ;-------------------------------------------------------------------ROKUON: MOV.B #H'00,R0L MOV.B R0L,@IER ;IRQ0割込みを禁止 PUSH.L ER0 ;レジスタER0を待避 PUSH.L ER1 ;レジスタER1を待避 PUSH.L ER2 ;レジスタER2を待避 PUSH.L ER3 ;レジスタER3を待避 PUSH.L ER4 ;レジスタER4を待避 PUSH.L ER5 ;レジスタER5を待避 PUSH.L ER6 ;レジスタER6を待避 BTST #H'04,@P4_DR ;録音モードの検出 BEQ JMP3 ;2チャンネル各10秒モードならJMP3へ飛ぶ MOV.L #H'20000,ER5 ;外部RAMの保存開始アドレスの設定 MOV.L #H'40000,ER6 ;外部RAMの保存終了アドレス+1の設定 BRA JMP5 ;JMP5へ飛ぶ JMP3: BTST #H'05,@P4_DR ;チャネルの検出 BEQ JMP4 ;CH1ならJMP4へ飛ぶ MOV.L #H'30000,ER5 ;外部RAMの保存開始アドレスの設定 ;外部RAMの保存終了アドレス+1の設定 MOV.L #H'40000,ER6 BRA JMP5 ;JMP5へ飛ぶ JMP4: MOV.L #H'20000,ER5 ;外部RAMの保存開始アドレスの設定 MOV.L #H'30000,ER6 ;外部RAMの保存終了アドレス+1の設定 JMP5: MOV.B #H'37,R0L MOV.B R0L,@P4_DR ;三つのLEDを消灯,ブザーをOFF BSET #H'03,@P4_DR ;ブザーをON BSR WAIT1 ;時間待ち BCLR #H'03,@P4_DR ;ブザーをOFF 100 BSR 101 BCLR 102 ADMAIN: BSET 103 BNOT 104 ADEND: BTST 105 BEQ 106 BSR 107 MOV.L 108 MOV.B WAIT2 #H'00,@P4_DR #H'05,@ADCSR #H'07,@P4_DR #H'07,@ADCSR ADEND WAIT3 #0,ER1 @ADDRAH,R1H ;時間待ち ;録音LEDを点灯 ;A/D変換開始 ;ポートP4-7を論理反転 ;A/D変換が終了したか検出 ;終了していないならADENDへ戻る ;150μs時間待ち ;レジスタER1をクリア ;A/D変換データの上位8bitをR1Hレジスタに保存 プログラムリスト(その2) 13 秋 葉 治 克 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 MOV.B @ADDRAL,R1L ;A/D変換データの下位8bitをR1Lレジスタに保存 BCLR #H'07,@ADCSR ;A/D変換終了フラッグをクリア MOV.B R1H,@ER5 ;A/D変換データを外部RAMに保存 INC.L #1,ER5 ;レジスタER5の内容を+1 CMP.L ER5,ER6 ;外部RAMの保存終了アドレスに達したか検出 BNE ADMAIN ;達していないならばADMAINに戻る BSET #H'00,@P4_DR ;録音LEDを消灯 POP.L ER6 ;レジスタER6を復帰 POP.L ER5 ;レジスタER5を復帰 POP.L ER4 ;レジスタER4を復帰 POP.L ER3 ;レジスタER3を復帰 POP.L ER2 ;レジスタER2を復帰 POP.L ER1 ;レジスタER1を復帰 POP.L ER0 ;レジスタER0を復帰 RTS ;リターン ;-------------------------------------------------------------------; ブザーのON時間待ちサブルーチン ;-------------------------------------------------------------------WAIT1: MOV.L #H'0000FFFF,ER2 T1: DEC.L #1,ER2 CMP.L #H'00000000,ER2 BNE T1 RTS ;リターン ;-------------------------------------------------------------------; ブザーの残響が消えるまでの時間待ちサブルーチン ;-------------------------------------------------------------------WAIT2: MOV.L #H'000A0000,ER2 T2: DEC.L #1,ER2 CMP.L #H'00000000,ER2 BNE T2 RTS ;リターン ;------------------------------------------------------------------------------; A/D変換器のサンプリング周期を150μsにするための時間待ちサブルーチン ;------------------------------------------------------------------------------WAIT3: MOV.L #H'000000B5,ER2 T3: DEC.L #1,ER2 CMP.L #H'00000000,ER2 BNE T3 RTS ;リターン ;-------------------------------------------------------------------; 再生サブルーチン 150 ;-------------------------------------------------------------------151 SAISEI: MOV.B #H'00,R0L 152 MOV.B R0L,@IER ;IRQ0割込みを禁止 153 PUSH.L ER0 ;レジスタER0を待避 154 PUSH.L ER1 ;レジスタER1を待避 155 PUSH.L ER2 ;レジスタER2を待避 156 PUSH.L ER3 ;レジスタER3を待避 157 PUSH.L ER4 ;レジスタER4を待避 158 159 160 161 162 PUSH.L PUSH.L BTST BEQ MOV.L ER5 ER6 #H'04,@P4_DR JMP6 #H'20000,ER5 ;レジスタER5を待避 ;レジスタER6を待避 ;録音モードの検出 ;2チャンネル各10秒モードならJMP6へ飛ぶ ;外部RAMの保存開始アドレスの設定 プログラムリスト(その3) 14 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 MOV.L #H'40000,ER6 ;外部RAMの保存終了アドレス+1の設定 BRA JMP8 ;JMP8へ飛ぶ JMP6: BTST #H'05,@P4_DR ;チャネルの検出 BEQ JMP7 ;CH1ならJMP7へ飛ぶ MOV.L #H'30000,ER5 ;外部RAMの保存開始アドレスの設定 MOV.L #H'40000,ER6 ;外部RAMの保存終了アドレス+1の設定 BRA JMP8 ;JMP8へ飛ぶ JMP7: MOV.L #H'20000,ER5 ;外部RAMの保存開始アドレスの設定 MOV.L #H'30000,ER6 ;外部RAMの保存終了アドレ+1の設定 JMP8: MOV.B #H'37,R0L MOV.B R0L,@P4_DR ;三つのLEDを消灯,ブザーをOFF BSET #H'03,@P4_DR ;ブザーをON BSR WAIT1 ;時間待ち BCLR #H'03,@P4_DR ;ブザーをOFF BCLR #H'01,@P4_DR ;再生LEDを点灯 DAMAIN: MOV.B @ER5,R1H ;保存していたA/D変換データを読み込む MOV.B R1H,@DADR0 ;D/A変換を開始 BNOT #H'06,@P4_DR ;ポートP4-6を論理反転 BSR WAIT4 ;150μs時間待ち INC.L #1,ER5 ;レジスタER5の内容を+1 CMP.L ER5,ER6 ;外部RAMの保存終了アドレスに達したか検出 BNE DAMAIN ;達していないならばDAMAINに戻る BSET #H'01,@P4_DR ;再生LEDを消灯 POP.L ER6 ;レジスタER6を復帰 POP.L ER5 ;レジスタER5を復帰 POP.L ER4 ;レジスタER4を復帰 POP.L ER3 ;レジスタER3を復帰 POP.L ER2 ;レジスタER2を復帰 POP.L ER1 ;レジスタER1を復帰 POP.L ER0 ;レジスタER0を復帰 RTS ;リターン ;------------------------------------------------------------------------------; D/A変換器の書き込み周期を150μsにするための時間待ちサブルーチン ;------------------------------------------------------------------------------WAIT4: MOV.L #H'000000C3,ER2 T4: DEC.L #1,ER2 CMP.L #H'00000000,ER2 BNE T4 RTS ;リターン ;-------------------------------------------------------------------; IRQ0サブルーチン ;-------------------------------------------------------------------IRQ0: MOV.B #H'00,R0L MOV.B R0L,@IER ;IRQ0割込みを禁止 PUSH.L ER0 ;レジスタER0を待避 PUSH.L PUSH.L PUSH.L PUSH.L PUSH.L PUSH.L BTST BEQ MOV.L ER1 ER2 ER3 ER4 ER5 ER6 #H'04,@P4_DR JMP9 #H'20000,ER5 ;レジスタER1を待避 ;レジスタER2を待避 ;レジスタER3を待避 ;レジスタER4を待避 ;レジスタER5を待避 ;レジスタER6を待避 ;録音モード検出 ;2チャンネル各10秒モードならJMP9へ飛ぶ ;外部RAMの保存開始アドレスの設定 プログラムリスト(その4) 15 秋 葉 治 克 217 MOV.L 218 BRA 219 JMP9: BTST 220 BEQ 221 MOV.L #H'40000,ER6 IMAIN #H'05,@P4_DR JMP10 #H'30000,ER5 ;外部RAMの保存終了アドレス+1の設定 ;IMAINへ飛ぶ ;チャネルの検出 ;CH1ならJMP10へ飛ぶ ;外部RAMの保存開始アドレスの設定 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 MOV.L #H'40000,ER6 ;外部RAMの保存終了アドレス+1の設定 BRA IMAIN ;IMAINへ飛ぶ JMP10: MOV.L #H'20000,ER5 ;外部RAMの保存開始アドレスの設定 MOV.L #H'30000,ER6 ;外部RAMの保存終了アドレス+1の設定 IMAIN: MOV.B @ER5,R1H ;保存していたA/D変換データを読み込む MOV.B R1H,@DADR0 ;D/A変換を開始 BNOT #H'06,@P4_DR ;ポートP4-6を論理反転 BSR WAIT5 ;150μs時間待ち INC.L #1,ER5 ;レジスタER5の内容を+1 CMP.L ER5,ER6 ;外部RAMの保存終了アドレスに達したか検出 BNE IMAIN ;達していないならばIMAINに戻る POP.L ER6 ;レジスタER6を復帰 POP.L ER5 ;レジスタER5を復帰 POP.L ER4 ;レジスタER4を復帰 POP.L ER3 ;レジスタER3を復帰 POP.L ER2 ;レジスタER2を復帰 POP.L ER1 ;レジスタER1を復帰 POP.L ER0 ;レジスタER0を復帰 MOV.B @ISR,R0L ;IRQ0の2重割込みを禁止 MOV.B #H'00,R0L MOV.B R0L,@ISR MOV.B #H'01,R0L MOV.B R0L,@IER ;IRQ0割込みを許可 RTE ;リターン ;------------------------------------------------------------------------------; IRQ0割込みにおけるD/A変換器の書き込み周期を150μsにするための ; 時間待ちサブルーチン ;------------------------------------------------------------------------------- 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 WAIT5: MOV.L #H'000000C3,ER2 T5: DEC.L #1,ER2 CMP.L #H'00000000,ER2 BNE T5 RTS ;リターン ;-------------------------------------------------------------------; センササブルーチン ;-------------------------------------------------------------------SENSA: MOV.B #H'00,R0L MOV.B R0L,@IER ;IRQ0割込みを禁止 PUSH.L ER0 ;レジスタER0を待避 PUSH.L ER1 ;レジスタER1を待避 PUSH.L ER2 ;レジスタER2を待避 PUSH.L ER3 ;レジスタER3を待避 PUSH.L ER4 ;レジスタER4を待避 PUSH.L ER5 ;レジスタER5を待避 PUSH.L ER6 ;レジスタER6を待避 MOV.B #H'37,R0L MOV.B R0L,@P4_DR ;三つのLEDを消灯,ブザーをOFF BSET #H'03,@P4_DR ;ブザーをON BSR WAIT1 ;時間待ち プログラムリスト(その5) 16 シングルチップマイクロコンピュータを用いたボイスレコーダの開発 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 BCLR BCLR POP.L POP.L POP.L POP.L POP.L POP.L POP.L STC.B AND.B LDC.B MOV.B MOV.B MOV.B MOV.B MOV.B MOV.B MOV.B MOV.B MOV.B RTS 293 .END #H'03,@P4_DR #H'02,@P4_DR ER6 ER5 ER4 ER3 ER2 ER1 ER0 CCR,R0L #H'7F,R0L R0L,CCR #H'80,R0L R0L,@IPRA #H'00,R0L R0L,@ISCR @ISR,R0L #H'00,R0L R0L,@ISR #H'01,R0L R0L,@IER ;ブザーをOFF ;センサLEDを点灯 ;レジスタER6を復帰 ;レジスタER5を復帰 ;レジスタER4を復帰 ;レジスタER3を復帰 ;レジスタER2を復帰 ;レジスタER1を復帰 ;レジスタER0を復帰 ;レジスタCCRの内容を読み込む ;レジスタCCRのマスクビット(I)をクリアして割込み受付け可能 ;IRQ0割込みのプライオリティレベルを1に設定 ;IRQ0割込みをLowレベルセンスに設定 ;IRQ0の2重割込みを禁止 ;IRQ0割込みを許可 ;リターン プログラムリスト(その6) (旭川校准教授) 17