C言語でのPIC16 / PIC18マイクロコントローラーのプログラミング第2条。 基本的なプラットフォーム情報。 最初のプログラム

最初の記事ですべてがうまくいけば、継続教育のための基本的なプログラミング環境が手に入りました。



さらに進んでいます。



先ほど言ったように、今のところはMK PIC16F628Aに基づいて説明します。

必ずドキュメントをダウンロードしてください。 検索に推奨-alldatasheet.com

DataSheet-MKに基づいた開発のメインドキュメント。

使いやすいように、メインの表とセクションを印刷することをお勧めします。



LHを開きます。



クリスタルに関する最も重要な情報:

-最大動作周波数-20 MHz;

-2048x14ビットフラッシュROM;

-224バイトの静的RAM。

-128バイトの不揮発性ROM。

-16の利用可能な結論。

-トランシーバーモジュール;

-3つのタイマー。



このクリスタルは、いわゆるミッドレンジMK PICファミリーの代表です。



理解する必要があるものについて簡単に説明します







デバイスデータメモリは 4つのバンクに分割されます

バンクには、特殊目的レジスタ(SFR)と汎用レジスタ(GPR)が含まれています。

SFR-デバイスとそのモジュールを制御するために使用されます。

汎用レジスターは、変数を保存できる静的RAMの形式で提供されます。

特殊レジスターは、各バンクで32の初期位置を占有します。

LHでは、18〜21ページにすべての特殊用途レジスタが示されています。 それらを印刷してください-それは複数回便利になります。



これはかなり膨大なトピックであり、見逃すことは不可能です。

しかし、一方で、退屈で面白くない。

自分自身を圧倒して、学校とShpakのメモリと特殊用途のレジスタの構成について読んでみてください(最初の記事で説明)。



入出力ポート



このデバイスには、PORTAとPORTBの2つのポートがあります。

各ポートピンは、単純なピンとして、または他のMKモジュールからのピンとして直接使用できます。

DSの最初の段階で、RB1などのメイン名に加えて、各結論に別の名前RXおよびDTが含まれていることに注意してください。

ここで、RXはトランシーバーの入力としてのセカンダリ出力機能です。

ただし、当面は、デバイスの周辺モジュールには触れません。



各ポートピンは、入力または出力として機能できます。

たとえば、LEDを点灯する必要がある場合、LEDを接続する出力を出力として設定し、適切なレベルを設定します。

しかし、ボタンをポートに接続し、押すという事実を読む必要がある場合、この出力を入力として設定する必要があります。

入力/出力構成は、 TRISレジスタを使用して行われます。

TRISレジスタの対応するビットに1を書き込むと、この出力は、0の場合は入力になります-出力(1と入力、および0と出力の類似性によるものと思われます)

例:

TRISA = 0; // -

TRISB = 0xff; // B -

TRISA5 = 1; // 5 - .






レジスタの名前は、対応するコントローラーのフォルダー「HT-PICC \ include folder」にあります。



出力で特定のレベルを確立するには、PORTレジスタを使用します。

例:

PORTA = 0; //

PORTB = 0xff; // B

RB5 = 1; // B







だから Cで実際に余談をする必要がある瞬間に到達します。

おそらくここに小さな例を書きます。 コンパイルします。 Proteusで実行し、次の記事でベース言語Cについて書きます。



小さなプログラムを書きましょう。 LEDを点滅させます。

最初の記事のスキームに従って、以前に作成したプロジェクトを使用するか、新しいプロジェクトを作成します。



開始するには、ヘッダーファイルを含めます



#include <pic.h>





特定のモデルを選択するのではなく、pic.hを指定します。 開くと、プロジェクトを作成するときに、選択したデバイスに基づいて特定のファイルを選択するためのスクリプトが表示されます。



次に、ポートを初期化する必要があります。

プログラムの主な機能を作成します。

void main(void)

{

while(1);

}






私たちは最初に書いています:

TRISA = 0; // -

PORTA = 0; //

TRISB = 0; // B -

PORTB = 0; //






HT-PICC \ samples \ delayフォルダに行きましょう。

そこからdelay.cとdelay.hをコピーして、プロジェクトフォルダーに貼り付けます。



先頭に行を追加します。

#include "delay.c"

DelayMs(x)関数を使用して、LEDの切り替えの間に一時停止を作成します。



LEDがRB0に接続されているとします。

論理的に排他的な「OR」を使用して切り替えます。

RB0 ^= 1;





その結果、コードは次の形式を取ります。



#include <pic.h>

#include "delay.c"



void main(void)

{

TRISA = 0;

PORTA = 0;

TRISB = 0;

PORTB = 0;



while(1)

{

DelayMs(250); //

DelayMs(250);

RB0 ^= 1; //

}

}






画像



ファームウェアの準備ができました。

次に、構成ビットを構成します。

[ 構成]-> [構成ビット]をクリックします

コードに何も設定していないため、 「コードに設定された構成ビット」チェックボックスを削除します。



いくつかのポイントがあります。

画面のように公開します。

発振器-HS-高周波水晶振動子がクロックジェネレータとして使用されます。

WatchDogタイマー -オフの場合、有効にすると、フリーズを防ぐためにマイクロコントローラーが定期的にリセットされます。 まだそのような機会は必要ありません

Power Up Timer-有効にすると、MCは電源電圧が必要なしきい値レベルに達するまでリセット状態になります。

電圧低下検出 -オン、電源電圧が特定のレベルを下回った場合にMCをリセットします。

低電圧プログラム -無効、 低電圧インサーキットプログラミングMKの使用を禁止します。 すでにプログラマーに依存しています。

データEE読み取り保護 -オフ、データおよびEEPROMメモリMKの読み取りを許可します。

コード保護 -オフ、MKでコード保護を無効にします。 Onに設定すると、MKからプログラムを読み取ることができなくなります。 まだそのような機会は必要ありません。



画像



もう一度F10を押します。

閉じます。



Proteusでプログラムを実行します。

Proteus ISISを起動します。

[ コンポーネントモード ]セクションで、[ ライブラリから選択 ]をクリックし、検索を使用して、コンポーネントをフォームに追加します。

-PIC16F628A;

-LED-RED;

-RES;



それぞれをダブルクリックして、パラメーターを設定します。

MKの場合-プロジェクトフォルダーから* .hexファームウェアファイルを選択し、周波数を4 MHzに設定します。

LED-REDの場合、モデルタイプ-デジタルを選択します。

抵抗器には、300オームの抵抗を選択します。

ターミナルモードセクションのグラウンドフォームに追加し、画面のように接続します。

画像

[再生]をクリックします-LEDが点滅します。



次の記事では、C言語について説明します。

それに続いて、コントローラーの周辺に関する記事とそのサンプルコードがあります。

そしてその背後で、USBとPIC 18について話す予定です。

これが今の計画です:-)



All Articles