講座テキストdenshikan.com/pic_microcomputer_text.pdfpickit2 のインストール…18 5....

47
1 2013 7 19 らくらく PIC マイコンと mikro C PRO for PIC による C 言語プログラミング 講座テキスト 高見 豊

Upload: others

Post on 25-Jan-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • 1

    2013年 7月 19日

    らくらく PICマイコンとmikro C PRO for PICによる C言語プログラミング

    講座テキスト

    高見 豊

  • 2

    目次

    1. PIC-TK01基板の組立…3

    2. mikro C PRO for PICの概要…6

    3. mikro C PRO for PICのインストール…9

    4. PICkit2のインストール…18

    5. PICkit3のインストール…23

    6. 10進数、2進数、16進数…29

    7. プログラムの基本…31

    8. C言語の基本…33

    9. mikro C PRO for PICによるプログラム作成…37

    10. 既にあるプロジェクトを開く…42

    11. PICkit2または PICkit3によるプログラム書き込み…43

  • 3

    1. PIC-TK01基板の組立

    ※ハンダ付けした部品を取り外すのは非常に困難です。間違えないようにしましょう。

    一般的にプリント基板の組立は高さの低い部品から行います。

    (高さの高い部品を先に付けてしまうと裏返してハンダ付けする時に部品が落ちます。)

    1. ヘッダを付ける(1本だけハンダ付けして傾いていなければ残りを付ける)

    2. 抵抗の足の間隔を揃えて曲げてから差込み、裏で足を少し開いてハンダ付けする

    3. ICソケットのくぼみを合わせて対角の 2本だけを付ける

    4. ICソケットの残りのピンを付ける

    5. LEDの足が短い方を外側にして付ける

  • 4

    6. 積層セラミック・コンデンサを付ける

    7. スライドスイッチを付ける

    8. 電解コンデンサの足の長い方を基板の+側に合わせて付ける

    9. トランジスタを印刷の平らな向きに合わせて付ける

    10. 電池ボックスを付ける

    11. ICの足を平行に揃えてから窪みをソケットと合わせて足を曲げないように差し込む

  • 5

    12. パターンカット 1箇所(ごめんなさい)とジャンパー線を付ける

  • 6

    2. mikro C PRO for PICの概要

    mikro C PRO for PIC は、ヨーロッパのベオグラート共和国に本社を置く

    mikroElektronika 社の ANSI-C 準拠の PIC マイコン用 C コンパイラで、ライブラリ関数

    が充実しており、グラフィック液晶への表示や RS-232-Cシリアル通信などのプログラムを

    数行で簡単に書ける C言語プログラミングのためのソフトウェアです。

    また、コンパイル後のプログラム・サイズが 2kワードまでは機能制限なく無料で使える

    うえに、より大きなプログラムを作るために購入しても 249 ドルと手軽に使えるのが特徴

    です。

  • 7

    mikro C PRO for PICの価格

  • 8

    最新版は、www.mikroe.comからダウンロードできます。

    http://www.mikroe.com/

  • 9

    3. mikro C PRO for PICのインストール

    (1) mikro C PRO for PICをダウンロードまたは USBメモリーからコピー

    (必ず USBメモリーから直接でなくコピーしてインストールしてください)

    (2) セットアップ・プログラムを右クリックして(管理者として)実行

    (管理者としてインストールしないとプログラムの保存やコンパイルができません)

  • 10

    (3) Nextをクリック

    (4) I AcceptをチェックしてNextをクリック

  • 11

    (5) そのままNextをクリック

    (6) そのままNextをクリック

  • 12

    (7) (インストール場所を Browseで指定して)Installをクリック

    (8) インストールが始まる

  • 13

    (9) この画面が出たら Finishをクリック

    (10) 「いいえ」をクリック

  • 14

    (11) 「いいえ」をクリック

    (12) 「はい」をクリック

  • 15

    (13) この画面が表示されたら「Start Page」を閉じる

  • 16

    (14) 上のプルダウン・メニューから「Project→Close Project」を実行

  • 17

    (15) サンプル・プログラムのプロジェクトが閉じられる

  • 18

    4. PICkit2のインストール

    (1) インストーラをコピーしてから(右クリックして管理者として)実行

    (2) 「Next」をクリック

  • 19

    (3) (インストールする場所を指定して)「Next」をクリック

  • 20

    (4) そのまま「Next」をクリック

  • 21

    (5) 「I Agree」をチェックして「Next」をクリック

  • 22

    (6) インストールが完了したら「Close」をクリック

  • 23

    5. PICkit3のインストール

    (1) Microsoft .Net Frameworks 4を予めインストール

    (2) 標準インストーラーをクリック

    (3) 日本語を選択して「ダウンロード」をクリック

    (4) 「ダウンロードせずに続けます」をクリック

    (5) インストールが完了したら PICkit3をコピーして右クリックして「管理者として実行」

    (6) 「はい」をクリック

  • 24

    (7) 「実行する」をクリック

    (8) 「Next」をクリック

  • 25

    (9) 「I Accept」をチェックして「Next」をクリック

    (10) 「Complete」をチェックして「Next」をクリック

  • 26

    (11) (インストール場所を指定して)「Next」をクリック

    (12) 「I Accept」をチェックして「Next」をクリック

  • 27

    (13) そのまま「Next」をクリック

    (14) インストール中

  • 28

    (15) インストールが完了したら「Finish」をクリック

    (16) 右上の「×」をクリックして閉じる

  • 29

    6. 10進数、2進数、16進数

    コンピュータ(デジタル)は 2進数で動いています。2進数とは 2になると桁(けた)が

    進む数のことで 0と 1で表現します。

    つまり、2進数では、0→1→10→11→100のようになります。われわれの世界では 10進

    数が多く使われていて、10になると桁が進みます。

    つまり、0→1→2→3→4→5→6→7→8→9→10 のようになります。10 進数の起源は人間

    の指が 10本あるからだと言われています。

    ところで、10 進数の世界では、お金は 1 円、10 円、100 円、1000 円、10000 円のよう

    に、10倍ずつの額面が 9個ずつあれば、どんな金額でも払えますが、2進数の世界では、1

    円、2円、4円、8円、16円、32円、64円、128円と倍々の額面が 1個ずつあれば、どん

    な金額でも払えます。これらの 1つの桁の価値を重みと言います。

    10進数のお金:10000円 1000円 100円 10円 1円

    2進数のお金:128円 64円 32円 16円 8円 4円 2円 1円

    さて、どうしてデジタルが使われるのでしょうか?お金が存在しなくて金で取引をする

    ことを考えてみてください。たとえば 105 円払うときは、金相場の金額から 105 円分の重

    さの金を正確に削って払わなければなりません。払われた方も金粉で払われても困るでし

    ょうから、多分、100g、10g、1gにあらかじめ切り分けておいて払うことになるでしょ

    うが、金相場は常に変動しますから、その価値はいくらになるかわかりません。そこで、

    変動しない価値のものが必要になります。

    電子回路でも、部品に誤差がありますし、その誤差は一般的に温度で変動します。とこ

    ろが、2進数で 0と 1だけにしておけば、誤差は最大 50%未満まで許容されます。

    こんな話を聞いたことはないでしょうか?たとえばお札の一部が燃えてしまっても、半

    分以上残っていれば、日本銀行か代理店(普通の銀行)に持って行けば、元のお札に替え

    てくれると。これは、お札そのものには価値がなくて、日本銀行がその価値を保証して、

    いつでも同じ価値の硬貨(お金)と交換してくれるからなのです。そういった意味では紙

    幣はお金ではなくて、正確には日本銀行券と言います。

    16進数って何?

    金額を表すのに、たとえば百万円を 1000000 円と書くと、いくらだか、パッと見た目に

    わかりにくいですよね。そこで一般的には 3桁ずつに区切って、1,000,000円と書くとわか

    りやすくなります。4桁ごとに区切って欲しいと思う方もいらっしゃるでしょうが、3桁ご

    とに区切る習慣は米英の thousand(千),million(百万),billion(十億)に由来していて、キロ(k),

    メガ(M),ギガ(G),テラ(T)と同じく千倍ずつになっているからです。

    コンピュータの場合、世界初のマイクロコンピュータは 4 ビットで作られて、その後 8

    ビット、(12 ビット)、16 ビット、32ビット、64ビットと基本的に倍々に進化しましたの

    で、3桁ごとに区切ると中途半端で不便です。

  • 30

    そこで、2 進数の 4 桁ごとに区切って 1 桁の 16 進数に置き換え、見やすくしたのが 16

    進数で、C言語の場合は頭に 0xを付けて表します。

    2進数:0001001001001000(理解しにくい)

    4ビットごとに区切る:0001 0010 0100 1000(理解しやすくなったが桁数が多い)

    16進数:0x1248(桁数が少なくてスッキリ)

    2進数 16進数

    0000 0

    0001 1

    0010 2

    0011 3

    0100 4

    0101 5

    0110 6

    0111 7

    1000 8

    1001 9

    1010 a

    1011 b

    1100 c

    1101 d

    1110 e

    1111 f

  • 31

    7. プログラムの基本

    コンピュータを動かすプログラムは基本的に、入出力、演算(計算)、記憶、条件判断の

    4つの要素で表されます。厳密には条件判断が自動的にできるものがコンピュータで、でき

    ないのが電子計算機なのですが、日本ではコンピュータ=電子計算機とされてしまいまし

    た。

    コンピュータのプログラムを作る「命令」は、入出力、演算、記憶、条件分岐をそのコ

    ンピュータ特有の 2進数で表します。これを機械語あるいはマシン語あるいはバイナリ(直

    訳すると 2 進数)と言います。そのままでは人間に理解しにくいので、この機械語をアル

    ファベットの略号に置き換えたものが「ニーモニック」で、ニーモニックで書かれたプロ

    グラムを機械語に変換するソフトウェアを「アセンブラ」と呼びます。

    アセンブラは上手に作れば高速処理ができて、必要なメモリーが少なくて済みますが、

    何をするにも長いプログラムを書かなくてはならず、大変な労力を要しますし、そうして

    作ったプログラムはコンピュータが変われば全く流用できず、0から作り直しになります。

    たとえば PIC16 マイコンの場合は、割り算をするのにも数十行のプログラムを書かなく

    てはなりません。そこで、もっと人間にわかりやすくプログラムを楽に作れる方法が考え

    出され、それを「高級言語」と呼びます。

    高級言語には、コンピュータに処理させたい業務に適した方法がいくつか考え出され、

    過去には数多くの言語が使われていましたが、現在は、それらの良いとこ取をした C 言語

    あるいは BASIC言語が主流です。

    高級言語の例:COBOL(事務処理向き)

    FORTRAN(科学技術計算向き)

    BASIC(学習向き)

    PL/1(金融向き)

    ALGOL(見やすい構造化)

    PASCAL(数学向き)

    ada(究極の高級言語と言われるが…)

    C(電話交換機向き)

    当然、後から考えられた高級言語の方が、前からある高級言語の利点を取り込んで改良

    されているのですが、最近では C言語の良いところを BASIC言語が取り込んだり、BASIC

    言語の良いところを C 言語が取り込んだりして、これら 2 つは機能的にほとんど変わらな

    くなって来ました。

    しかし、BASIC 言語は元々は学習用なので甘く見られていますし、それほど効率の良い

    機械語を作り出してくれません。C言語は元々はメモリーが少なく処理能力が低い電話交換

    機用でしたので、処理の速いメモリー使用量の少ないマイコンにとって最善の(パーフェ

    クトではない)プログラム言語として広く普及し、ほとんどのコンピュータで使えるよう

    になっています。

  • 32

    プログラム言語は何を覚えれば良いの?

    これから覚えるのであれば、間違いなく C 言語です。C 言語はどのコンピュータでも使

    え、効率の良い機械語を生成してくれて、しかも C 言語のプログラムを機械語に変換して

    くれる「コンパイラ」が安く買えます。

    ただし、以前に BASICを使っていた方は C言語特有の癖に慣れるのに時間がかかります

    ので、とりあえず BASIC を使っても良いでしょう。

    C言語がわかれば、携帯電話やスマートフォンのアプリで使われる Javaなどの足がかり

    になります。

  • 33

    8. C言語の基本

    ラベル文

    ラベル: 文;

    if文(条件分岐)

    if (式) 文 1 [else 文 2]

    if (式 1) 文 1

    else if (式 2)

    if (式 3) 文 2

    else 文 3

    else 文 4

    switch文(多重条件分岐)

    switch (expression) {

    case constant-expression_1 : statement_1;

    .

    .

    .

    case constant-expression_n : statement_n;

    [default : statement;]

    }

    繰り返し

    while (式) 文

    do 文 while (式);

    for (初期値; 条件式; 増分) 文

    switch (state) {

    case 0: Lo(); break;

    case 1: Mid(); break;

    case 2: Hi(); break;

    default: Message("Invalid state!");

    }

  • 34

    while (..) {

    ...

    if (val>0) continue;

    ...

    // continue jumps here

    }

    for (...) {

    for (...) {

    ...

    if (disaster) goto Error;

    ...

    }

    }

    .

    .

    .

    Error: /* error handling code */

    return [式];

  • 35

    /* Structure defining a dot: */

    struct Dot {float x, y;};

    /* Structure defining a circle: */

    struct Circle {

    float r;

    struct Dot center;

    } o1, o2;

    /* declare variables o1 and o2 of Circle */

  • 36

    ポインタの定義

    int i; // I は整数 t

    int * pi; // pi はポインタ

    int * const cp = &i; // cp は整数 Iのポインタのアドレス

    const int ci = 7; // ci は整数の定数

    const int * pci; // pci は整数の定数のポインタ

    const int * const cpc = &ci; // cpc は定数の整数のポインタのアドレス

    正しい例:

    i = ci; // 変数に変数を代入

    *cp = ci; //ポインタに変数を代入

    ++pci; // ポインタをインクリメント

    pci = cpc; // ポインタのアドレスを代入

    間違った例:

    ci = 0; // 定数に値を代入

    ci--; // 定数をインクリメント(値は変化しない)

    *pci = 3; // 定数のポインタに値を代入

    cp = &ci; // 定数のポインタにアドレスを代入.

    cpc++; // 定数のポインタをインクリメント

    pi = pci; // ポインタのアドレスをアドレスで置き換える

  • 37

    9. mikro C PRO for PICによるプログラミング

    (1)mikroC PROを管理者権限で開く

    1. プルダウン・メニューの Project→New Project

  • 38

    2. プログラム名(日本語禁止)、マイコン機種(PIC16F88)、クロック周波数を設定

  • 39

    3. 何もしないで「Next」(追加で取り込むファイルを設定)

    4. 何もしないで「Next」(ライブラリを自動取り込み)

  • 40

    5. Open Edit Project…にチェックを入れて「Finish」をクリック

  • 41

    6. 発振回路(内部発振 I/O)、パワーアップ、MCLRを無効(Disable)に設定

  • 42

    7. { }の間に自分のプログラムを書いて Build→Buildで機械語(hexファイル)生成

    10. 既にあるプロジェクトを開く

    ウインドウ上部のプルダウン・メニューの Projectから Open Projectを実行

  • 43

    11. PICkit2による書き込み

    (1) PICkit2を起動

  • 44

    (2) マイコンの型番を選択

  • 45

    (3) 書き込むHexファイルを選択して開く(またはダブル・クリック)

  • 46

    (4) Hexファイルが読み込まれて書き込みの準備ができる(右中央の Onに注意)

  • 47

    (5) 「Write」をクリックして書き込み(完了すると緑色になる)