PIC マイクロコントローラー プログラマーの初心者。 無線エレクトロニクスと電気工学の百科事典
無線電子工学と電気工学の百科事典 / アマチュア無線初心者
記事へのコメント
[この指令を処理中にエラーが発生しました]
マイコンプログラミングの勉強を始めた私自身の経験をもとに、アセンブラでプログラムを書く際の実践的なアドバイスをしていきたいと思います。 以下のすべてのプログラミング例は、比較的単純なアーキテクチャと単純なアセンブラ コマンド システムにより、開発を開始するのに最適なものとして、中型の Microchip ファミリの Pic コントローラに関連して示されています。
提案されたプログラムは、既製のマクロ (完全なサブルーチン) の形式で使用できますが、特定のコントローラーに関連付けられていないため、適用する際にはデータシートのデータを考慮する必要があります。
1. タイマオーバフロー割り込みTMR0(RTCC)の応用
クロック周波数 - Ftact を考えてみましょう。 = 4,096 MHz (標準クォーツ)。 この場合、サイクルタイムは tc = 1 / Ftact となります。 * 4 = 0,97656 μs
INI_TMR ; RTCCからの割り込みモードの初期化
bsf ステータス、RP0 ; バンク1を選択してください
movlw b'00000100'
movwf オプション ; RTCC用プリスケーラ 1:32
bcf ステータス、RP0 ; バンク0
movlw b'10100000'
movwf INTCON ; RTCC割り込み有効
movlw .96 ; 暫定番号 96 を RTCC にアップロードしています
movwf TMR0
割り込み時間を取得します。
ti = tc * 32 * (256 - 96 = 160)
ti = 0,97656 * 32 * 160 = 5 マイクロ秒 = 000 ミリ秒
ここで、任意のプログラムに無限ループ (いわゆる割り込み待機ループ) を入力し、プログラムの終わりをこのループに変換すると、5 ミリ秒の時間基準が得られます。そして、割り込みの後、プログラムは割り込みベクトルによって示されるアドレスに戻ります (多くの場合、 04h です)。これが使用できる用途 - 以下を参照してください。
だから:
;
組織0
始める ; プログラム開始後
; 電源オン
組織04h; これは割り込みベクトルのアドレスです。
主要 ; メインプログラムが実行されます
;
始める ; 通常、これは必須の初期設定が行われる場所です。
INI_TMR ; ポート、モード、レジスタなどの設定。
INI_ポート
ループ
gotoループ; そしてこれは無限ループです
;---------------------------------------------- -
メイン
; 次にメインプログラムの本体が来ます。
; RTCCから割り込みサービスプログラムを作成する必要がある場合、
; CALL コマンドによって呼び出されます。
サーブTMR
btfsc INTCON、RTIF ; RTCCからの割り込みフラグをチェックし、
SET_TMR を呼び出します。 「はい」の場合、TMR0 を再度初期化します。
戻る; 「いいえ」の場合 - ServTMR 呼び出しの場所に戻ります。
; メインプログラム メイン
;
SET_TMR movlw .96
movwf TMR0 ; 番号96を再度アップロードします
bcf INTCON、RTIF ; トリガーフラグをリセットする
再確認; 割り込みイネーブルで ServTMR に戻り、そして
; それからメインプログラムへ main
RTCC 割り込みを使用して、出力の 0 つ (ポート B - RBXNUMX) で XNUMX 番目のパルスを受信する例: Rsec レジスタを使用します。これは、作業レジスタのアドレス フィールドで事前に宣言する必要があります。
したがって、RB0 ポートの出力では、信号レベルが 0 秒ごとに「1」から「XNUMX」に変化します。
コントローラのレジスタ内の情報は通常、バイナリ形式 (バイナリ コード) です。 しかし、たとえば XNUMX 桁の XNUMX セグメント インジケータを制御するには、XNUMX 進数 - XNUMX 進数形式 (BCD - コード) で情報を取得する必要があることがよくあります。
バイナリ コード b2 から XNUMX 進 XNUMX 進数 BCD への変換、およびその逆の変換の例を考えてみましょう。
8 ビット レジスタには、0 ~ 255 ( b'00000000' ~ b'11111111' ) の XNUMX 進数を書き込むことができます。 XNUMX 進数を XNUMX 進数の XNUMX 進数コード「百」、「十」、「一」の XNUMX 桁に変換してみましょう。 これを行うには、次のレジスタを使用します。これらのレジスタは、作業レジスタのアドレス フィールドで事前に宣言する必要があります。
Rbin - 数値をバイナリ コードで格納するためのレジスタ b2
Rhan - 「数百」の BCD コードを登録する
Rdec - BCD コードの「十」を登録します。
Rsim - BCDコード「XNUMX」レジスタ
変換は、数値 100 を減算し、次に 10 を減算し、正の減算の数をカウントする操作を使用して実行されます。
FORM_1S ; 各サイクルで、RTCC 割り込みの間持続します。
incf Rsec,w ; 5 ミリ秒、Rsec レジスタを 1 ずつ増やして数値 200 にします
xorlw .200 ; (5ms * 200 = 1秒)
btfsc ステータス、z
OUT_PORT に移動します。 Rsec = 200 フラグ z = '1' で制御に移行
; ポートBのピンRB0
戻る; メインプログラムに戻る main
;
OUT_PORT btfss PORTB,0 ; 出力RB0のステータスを確認します
OUT_ON に移動します。 RB0 =「0」の場合は「1」に設定されます
bcf ポートB,0 ; それ以外の場合 - 「0」に設定します
メインに移動します。 メインプログラムに戻る
;
OUT_ON bsf PORTB,0 ; RB0 = '1'を設定します
メインに移動
CON_100 movlw .100 ; Rbin から 100 を引いて確認します。
subwf Rbin,w ; 結果はマイナスではありません。 フラグ 'c' = 1 の場合
btfss ステータス、c ; 結果 > or = 0、および < 0 の場合は 'c' = 0
CON_10に移動
incf ラン、f ; 「百」を数える
movwf Rbin ; 減算の結果は最初にレジスタに格納されます
CON_100 ;バッテリーに移動し、その後のみ Rbin に戻ります
; 余りをマイナスで失わないように
; 引き算の結果。
CON_10 movlw .10 ; 同様に「XNUMX」を定義します
サブwf Rbin、w
btfss ステータス、c
end_con に移動
incf Rdec,f
movwf Rbin
CON_10 に移動します。
エンドコン
movf Rbin、w
movwf Rsim ; 減算後、余りを「単位」で入力します。
;プログラムの実行を継続します
BCDコードをb2に逆変換します。 同じレジスタ Rhan、Rdec、Rsim を使用します。数値は BCD コード内にあり、レジスタ RbinH は上位、RbinL - b255 コードの数値 (> 2) の下位、および補助レジスタ RM1 - 「乗数」を使用します。 "、RM2 - "乗数" 。BCD を b2 に変換するには、「百」に 100、「十」に 10 を掛け、すべてを「単位」で加算し、必要に応じて上位への転送を考慮する必要があります。乗算には加算演算を使用します。
B2X_100 movlw .99 ; 「百」を変換する
movwf RM2 ; 乗数 = 加算数 (100) マイナス XNUMX
movf ラン、w
movwf RM1 ; 被乗数 = "百"
ループX100 addwf RM1,w btfsc ステータス,c ; 最上位桁への転送を確認する
incf RbinH,f ; 転送がある場合
decfsz RM2,f ; 加算数を制御する
ループX100へ移動
movwf RbinL ; 加算の結果は ml レジスタに入力されます。 放電
;
B2X_10 movlw .9 ; 「十」を変換する
movwf RM2 ; 乗数 = 加算数 (10) マイナス XNUMX
movf Rdec,w
movwf RM1 ; 被乗数 = "XNUMX"
ループX10 addwf RM1,w ; ここでは転送を省略できます。 結果
decfsz RM2,f ; 常に < 255
ループX10へ移動
addwf RbinL,f ; 「十」を変換した結果を追加します
btfsc ステータス、c ; 数字での転送の可能性を考慮して
incf
RbinH,f
movf Rsim,w
addwf Rbin,f ; 転送の可能性を考慮して「ユニット」を追加します
btfsc ステータス、c
incf RbinH,f
変換の終了とプログラムのさらなる実行。 レジスタ RbinL と RbinH は、b16 コードで 2 ビットの数値を取得します。
除算の算術演算を実行するには、上で説明した乗算と同様に、減算演算が使用されます。 レジスタ RHsum (上位桁) と RLsum (下位桁) にある数値を、Rdel レジスタにある除数 (255 を超えない除数を考えましょう) で割る必要があるとします。
結果はレジスタ RHrez と RLrez (それぞれ上位桁と下位桁) に入力されます。
OP_DEL
movf Rdel、w
subwf Rlsum、w
btfss ステータス、c ; 結果が陰性かどうかを確認しますか?
DEF_carry に移動します。 「はい」の場合は、アートから借用します。 放電
incf RLrez,f ; を考慮して減算の回数を数えます
btfsc ステータス、c ; 上級レベルへの昇進の可能性
incf RHRez,f
movwf RLsum ; 残りを失わないように復元します
OP_DEL に移動します。 減算の結果が負の場合
;
DEF_キャリー
movlw 0h
xorwf RHsum,w ; みんなはシニアカテゴリーからジュニアカテゴリーに進みましたか?
btfsc ステータス、z ; 「はい」の場合、つまりRHdel = 0、OP_DEL で否定される
OUT_DEL に移動します。 猫。 結果 - 除算の終了と終了
decf RHsum,f ; 「いいえ」の場合 - シニアカテゴリーおよびプロからのローン
incf RLrez,f ; 私たちは続けなければなりません
btfsc ステータス、c ; シニアカテゴリーへの移行の必要性を確認する
incf RHRez,f
OP_DEL に移動
著者: ウラジミール D., degvv@mail.ru; 出版物: cxem.net
他の記事も見る セクション アマチュア無線初心者.
読み書き 有用な この記事へのコメント.
<<戻る
科学技術の最新ニュース、新しい電子機器:
庭の花の間引き機
02.05.2024
現代の農業では、植物の世話プロセスの効率を高めることを目的とした技術進歩が進んでいます。収穫段階を最適化するように設計された革新的な Florix 摘花機がイタリアで発表されました。このツールには可動アームが装備されているため、庭のニーズに簡単に適応できます。オペレーターは、ジョイスティックを使用してトラクターの運転台から細いワイヤーを制御することで、細いワイヤーの速度を調整できます。このアプローチにより、花の間引きプロセスの効率が大幅に向上し、庭の特定の条件や、そこで栽培される果物の種類や種類に合わせて個別に調整できる可能性が得られます。 2 年間にわたりさまざまな種類の果物で Florix マシンをテストした結果、非常に有望な結果が得られました。フロリックス機械を数年間使用しているフィリベルト・モンタナリ氏のような農家は、花を摘むのに必要な時間と労力が大幅に削減されたと報告しています。
... >>
最先端の赤外線顕微鏡
02.05.2024
顕微鏡は科学研究において重要な役割を果たしており、科学者は目に見えない構造やプロセスを詳しく調べることができます。ただし、さまざまな顕微鏡法には限界があり、その中には赤外領域を使用する場合の解像度の限界がありました。しかし、東京大学の日本人研究者らの最新の成果は、ミクロ世界の研究に新たな展望をもたらした。東京大学の科学者らは、赤外顕微鏡の機能に革命をもたらす新しい顕微鏡を発表した。この高度な機器を使用すると、生きた細菌の内部構造をナノメートルスケールで驚くほど鮮明に見ることができます。通常、中赤外顕微鏡は解像度が低いという制限がありますが、日本の研究者による最新の開発はこれらの制限を克服します。科学者によると、開発された顕微鏡では、従来の顕微鏡の解像度の 120 倍である最大 30 ナノメートルの解像度の画像を作成できます。 ... >>
昆虫用エアトラップ
01.05.2024
農業は経済の重要な分野の 1 つであり、害虫駆除はこのプロセスに不可欠な部分です。インド農業研究評議会 - 中央ジャガイモ研究所 (ICAR-CPRI) シムラーの科学者チームは、この問題に対する革新的な解決策、つまり風力発電の昆虫エアトラップを考案しました。このデバイスは、リアルタイムの昆虫個体数データを提供することで、従来の害虫駆除方法の欠点に対処します。このトラップは風力エネルギーのみで駆動されるため、電力を必要としない環境に優しいソリューションです。そのユニークな設計により、有害な昆虫と有益な昆虫の両方を監視することができ、あらゆる農業地域の個体群の完全な概要を提供します。 「対象となる害虫を適切なタイミングで評価することで、害虫と病気の両方を制御するために必要な措置を講じることができます」とカピル氏は言います。 ... >>
アーカイブからのランダムなニュース ドローン - ヘリウム気球
20.11.2021
使いやすさにもかかわらず、マルチコプター ドローンは操作中に非常に多くの騒音を発し、多くのエネルギーを消費します。さらに、ブレードが回転するため潜在的に危険です。 日本企業のNTTドコモは、非常に静かに動く気球のようなドローンを発表しました。
回転するブレードを備えた従来のドローンは、人間、動物、さらには他のドローンにさえも脅威をもたらします。 それらの多くは、障害物を回避するためにセンサーと高度なアルゴリズムを使用しています。一部のメーカーは、衝突の結果から保護するための特別なケーシングや、インシデントの後でも機能を維持するためのその他のソリューションを作成しています。
ドコモの考えはもっと単純です - ブレードを完全に取り除きます。 新しい無人機は、本質的にヘリウムで満たされた風船です。 下部に取り付けられたカメラを使用すると、写真やビデオを撮影できます。ドローンには、必要に応じてオンにできるマルチカラーの LED バックライトもあります。
目新しさの主な利点は、飛行中に実際に音がしないことです。 さらに、設計に膨張式ボールを使用しているため、デバイスを常に空中に維持する必要がなく、長時間の自律飛行が保証されます。
Docomo ドローンの唯一のコンポーネントは推進システムです。 小型の超音波モジュールが軽量のフレームに取り付けられており、空中に微振動を発生させます。ドローンはあらゆる方向に動くことができます。
気球ドローンはかなり前から存在していますが、まだプロペラを使用しているものもあれば、高高度で動作するように設計された気球と凧のハイブリッド型のものもあります。 Docomo は、そのソリューションは、屋内または屋外のあらゆる種類のイベントでの使用に最適であると述べています (このための天気は、理想的には穏やかに近いはずです)。
|
その他の興味深いニュース:
▪ レーザー光パルスによる磁石の書き込み・消去技術
▪ Appleは、新しいiPadの強力なバージョンのバッテリー容量を増やします
▪ 人工流星群
▪ テレビ画面付きワインボトル
▪ セルロースベースの複雑なオブジェクトを 3D プリントするための新技術
科学技術、新しいエレクトロニクスのニュースフィード
無料の技術ライブラリの興味深い資料:
▪ サイトの「低周波アンプ」セクション。 記事の選択
▪ フランツ・ヨーゼフ・ハイドンによる記事。 有名な格言
▪ 記事 アントニオ・ストラディヴァリの秘密とは? 詳細な回答
▪ 記事カラバル豆。 伝説、栽培、応用方法
▪ 記事 VHF 無線周波数シンセサイザー制御ユニット。 無線エレクトロニクスと電気工学の百科事典
▪ 記事 ケーブルラインは最大 220 kV。 工業用地内でのケーブル線の敷設。 無線エレクトロニクスと電気工学の百科事典
この記事にコメントを残してください:
このページのすべての言語
ホームページ | 図書館 | 物品 | サイトマップ | サイトレビュー
www.diagram.com.ua
2000-2024