1. 割り込み処理とは


演習 5-1 (個人PC): INT 割り込みを使ってみましょう。プログラムの仕様は以下の通りです。

仕様:

  1. RA2 をINT ピンとしてタクトスイッチを接続する
  2. プログラムを実行すると int 型変数 count の値を表示し続ける
  3. タクトスイッチを押すと INT 割り込みが生じて count の値が 1 増える
  4. INT 割り込みを行うタイミングは「立ち下がり」とする(※)

※ タクトスイッチはプルアップされてるので、押すと「High → Low」と変化する事に注意

プロジェクト「IO_4_2」を「IO_5_1」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_4_2 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
main.c を開いて例6を有効にします。
回路を作成します。

以下の設定に従って回路を作成して下さい。
(*) が前の演習からの変更箇所です。

ピン配置設定・回路接続方法:

01: VDD(3.3V)
02: RA5
03: (*)RA4/PWM2 -- 圧電スピーカ ※ 配線済
04: MCLR/VPP -- PICKit の 1: NMCLR ※ プルアップ抵抗不要
05: RC5
06: RC4
07: RC3
08: RC6
09: RC7
10: RB7/PWM1 -- オシロスコープ

11: RB6
12: RB5/Tx -- RN-42 の J2-7 : Rx
13: RB4/Rx -- RN-42 の J2-6 : Tx
14: RC2
15: RC1/ANC1 -- 可変抵抗の中央ピン
16: RC0 (GPIO出力) -- LED
(*)17: RA2/INT -- タクトスイッチ ※ 実際には回路に変更はありません
18: ICSPCLK(PGC) -- PICKit の 5: PGC
19: ICSPDAT(PGD  -- PICKit の 4: PGD
20: VSS(GND)

書き込みボタンを押して正常に動作する事を確認して下さい。
提出物はありません。


演習 5-2 (個人PC): タイマー割り込みを使ってみましょう。プログラムの仕様は以下の通りです。

仕様:

  1. タイマー1と3を使う
  2. プログラムを実行すると count1 と count3 の値を表示し続ける
  3. 100 ミリ秒毎にタイマー1の割り込みが生じて count1 の値が 1 増える
  4. 500 ミリ秒毎にタイマー3の割り込みが生じて count3 の値が 1 増える

プロジェクト「IO_5_1」を「IO_5_2」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_5_1 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
main.c を開いて例7を有効にします。
回路には変更ありません。
書き込みボタンを押して正常に動作する事を確認して下さい。
提出物はありません。



演習 5-3 (個人PC): タイマー割り込みを使ってLEDを点灯させてみましょう。

仕様:

  1. タイマー1だけを使う(タイマー3の設定をコメントアウトする)
  2. RC0に接続されているLEDを使用する
  3. 500 ミリ秒点灯 → 500ミリ秒消灯を繰り返す

プロジェクト「IO_5_2」を「IO_5_3」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_5_2 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
main.c を開きます。
仕様に従って main.c の内容を書き換えます。run関数の内容は以下の内容としてください。

void run(void) 
{
    while(1);   
    return;
}
回路には変更ありません。
書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「作成したソースコード」を記入してください。



演習 5-4 (個人PC): INT割り込みとタイマー割り込みを組み合わせてみましょう。

仕様:

  1. タイマー3を使う(タイマー1の処理部はそのまま)
  2. プログラムを実行すると count3 の値を表示し続ける
  3. 100 ミリ秒毎にタイマー3の割り込みが生じて count3 の値が 1 増える
  4. タクトスイッチを押すと INT 割り込みが生じて count3 の値が 0 にリセットされる

プロジェクト「IO_5_3」を「IO_5_4」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_5_3 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
main.c を開きます。
仕様に従って main.c の内容を書き換えます。run関数の内容は以下の内容としてください。

void run(void) 
{
    while(1){
        printf("count3= %d\r\n",count3);
        __delay_ms(1000);        
    }  
    return;
}
回路には変更ありません。
書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「作成したソースコード」を記入してください。



演習 5-5 (個人PC): アラームを作ってみましょう。

仕様:

  1. PWM2につながっている圧電スピーカーを使う
  2. アラームがOFFのときにタクトスイッチを押すとINT割り込みが生じてアラームがONになる
  3. アラームがONになるとLEDが点滅しはじめて3秒後にブザー(PWM周期7600μ秒、PWM幅3800μ秒)が鳴る
  4. アラームがONのときにタクトスイッチを押すとINT割り込みが生じてアラームがOFFになる
  5. アラームがOFFになるとLEDか消えて点滅が止まる。もしブザーが鳴ってたら音が止まる

プロジェクト「IO_5_4」を「IO_5_5」にコピーします(プロジェクト名を右クリックして Copy を選択)。
プロジェクト IO_5_4 を閉じます(プロジェクト名を右クリックして Close を選択)。
(もし開きっぱなしになっていたら) 前のプロジェクトで開いていたソースを全て閉じます。
main.c を開きます。
仕様に従って main.c の内容を書き換えます。run関数の内容は以下の内容としてください。

void run(void) 
{
    pwm2(7600,0);
    while(1);   
    return;
}
回路には変更ありません。
書き込みボタンを押して正常に動作する事を確認して下さい。
指定場所に「作成したソースコード」を記入してください。