PICでCの練習 2007.05.03(木)〜 LessonC_07。 for文を使って遅延関数を作成。
著作者名: 中野 良知 作成開始: 2007.05.03(木) 更新 : 2007.05.03(木) : 2007.05.14(月) ソースコードでconfigのXTALをHSに変更。 : 実験回路図に電源パスコンを追加。 : 発振子のGNDと5PIN(GND)を直近に変更。
目次 1. 目的 2. フローチャート 3. プログラムソースコード 4. キーワード 4.1. for文 5. 実行結果 6. 実験回路 1. 目的 引数付ソフト遅延関数の繰り返しをfor文で作ります。 2. フローチャート (main) ↓ ポートの初期化 ↓ ├←────────────┐ ↓ │ ポートBのビット0に1を出力 │ ↓ │ 引数付遅延関数呼出 │ // 引数で遅延時間を設定 ↓ │ ポートBのビット0に0を出力 │ ↓ │ 引数付遅延関数呼出 │ // 引数で遅延時間を設定 ↓ │ └─────────────┘ 3. プログラムソースコード //***************************************************************************** // タイトル: LesssonC_07 // 作者 : ioio // 目的 : 遅延関数にfor文を使い、LEDを0.5sec間隔で点滅させます。 // マイコン: PIC16F84A // クロック: 20MHz // Config : PROTECT=OFF, WDTE=OFF, XTAL // Compiler: PICC Lite(V9.6)。 HI-TEC software製。 // : >picl -16f84a lesson.c //***************************************************************************** // 変更履歴 // 2007.05.03(木) 作成 // 2007.05.14(月) configでXTALをHS_OSILLATORに変更 //***************************************************************************** #include "pic.h" // デバイス関連の定義を展開 #define DLY_TIME 500 // 500msecソフト遅延カウント __CONFIG(0x3FFA); // PROTECT=OFF, WDTE=OFF, HS_OSILLATOR void delay_msec(unsigned int); // 関数を宣言 void main(void) { TRISB = 0xFE; // PortB b0=Out. b1,b2,b3,b4,b5,b6,b7=In // 繰り返し実行 while(1){ // 繰り返し // LED ON RB0 = 1; // Port b0=1 // ソフト遅延 delay_msec(DLY_TIME); // LED OFF RB0 = 0; // Port b0=0 // ソフト遅延 delay_msec(DLY_TIME); } } //----------------------------------------------------------------------------- // 機能 : for文を使ってソフト遅延 // 引数 : unsigned int。 遅延時間をmsecで設定。 // 戻値 : なし // 作成 : 2007.05.03(木) //----------------------------------------------------------------------------- #define T1MS 500 // 1msecソフト遅延カウント void delay_msec(unsigned int time) { unsigned int cnt1; unsigned int cnt2; // cnt1がtimeより小さい間、{}の中を繰り返します for(cnt1 = 0; cnt1 < time; cnt1++){ cnt2 = T1MS; while(cnt2--); // 1msecの遅延 } } //***************************************************************************** //***************************************************************************** 4. キーワード 4.1. for文 書式: for(変数初期化; 変数判定; 変数更新) { 処理A } 例: for( n = 0; n < 10; n++) { ... } n = 0; 変数nを0で初期化します。 n < 10; 変数nが10未満なら{}内を繰返します。 n++; {}を一回実行する毎に、nをインクリメントします。 例では{...}の中を10回繰り返します。 (for文スタート) │ n = 0 ├←─────┐ │ no │ < n < 10? > ──│─→ (for文終了) │yes │ {...}実行 │ │ │ n++ │ └──────┘ 変数の判定には、 n < 10 未満 n <= 10 以下 n >= 10 以上 n > 10 越える などを使います。 5. 実行結果 DLY_TIME=500 -------------+------------------- Hの幅 504msec Lの幅 496msec 出力の周期 1000msec 6. 実験回路 PIC16F84A ┌────┐14 │ VDD├──────●──────●────●──── +5V │ │ │ │0.1u │ │ │ R10K ┴ /50V │┴│100u/16V │ │4 │ 0.1u/50V ┬ └┬┘ │ -MCLR├──────●─┤├───●────┘ │ │ │ │ │16 ┌ ─ ─ ─ ┐ │ │ OSC1├───●─┤├──┐ │ │ │ │┴ ││ │ │ │ □ 20MHz │ │ │ │15 │┬ ││ │ │ OSC2├───●─┤├──● │ │ │ └ ─ ─ ─│┘ │ │ │5 ┌───────┘ │ │ Vss├─●───────────● │ │ │ │ │ LED │ │ │6 ┌─┬┐K │ │ RB0├──┤ │├─R220──● │ │ └─┴┘ │ │ │ │ └────┘ ┴ GND 0.1u/50VのコンデンサーはVDDとVssの近くに接続します。 発振子のGNDはVssの直ぐ近くに接続します。
LessonCのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。
inserted by FC2 system