忍者ブログ
ようこそ!JQ2RVNのブログです。 PICを使っていろいろな物を作ろうと画策中です。
[6] [5] [4] [3] [2] [1]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PIC TNCのアセンブラソースを解析してみました。


まずは、ピン変化割り込みです。
ソースでは493行目からの処理です


割り込みが発生すると、
その時点のTimer0のカウント値を読みます。(レジスタはTMR0)
このカウント値は前回の割り込みで0にセットされているので、
つまりは、前回の割り込みからの経過時間がわかります。

ここでTMR0とCENTER_FREQのどちらが大きいかをチェックします。
(アセンブラではTMR0 - CENTER_FREQを計算し、符号を検査します。)

・ もし、TMR0のほうが大きいなら・・・
CENTER_FREQよりも低い周波数(波長が長い)トーンと考えられる。
Bell202の場合は1200Hzですね。
そして、R_TONE=0とします。

・ もし、CENTER_FREQのほうが大きいなら・・・
CENTER_FREQよりも高い周波数と考えられます。
2200Hzですね。
そして、R_TONE=1とします。


最後に、次のトーンのためにTMR0をクリア(0にする)します。

これにて、割り込みルーチンは終了です。




なお、CENTER_FREQの値ですが、1700Hzの1/2波長にします。
(コンパレータが0→1から1→0になるのは、サインカーブの0V以上のときなので)

PICが20MHzで動作しているとき、
4クロックで1サイクルとなりますので、1サイクルは0.2μsec。
Timer0のプリスケラは1:32に設定されてますので、
Timer0がカウントアップするのは、6.4μsecになります。

一方、1700Hzの1/2波長は294μsecです。

よって、6.4 ÷ 294 = 45.955になります。

なのでアセンブラの341行目にあるCENTER_FREQ equ d'45'となるわけです。



なお、341行目にあるコメントでは、"(TMR0/8)(10mhz and PS of 16)"
とありますが、20mhz動作のアセンブラなのに、なぜこう書かれているのかしら??
多分、以前の設計のまま、コメントをなおし忘れたのかもしれません。
プリスケラの設定などチェックしましたが、
20mhzにて、1:32、CENTER_FREQ=45という設定になってました。
PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
02 2024/03 04
S M T W T F S
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
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。
まずは、本家を解析しています。
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
バーコード
ブログ内検索
アクセス解析