« PIC16F84Aのテストボード その2 | トップページ | PICのお勉強(24) C言語編 電子オルガン »

2012年6月11日 (月)

PICのお勉強(23) C言語編 RB0/INT外部割り込み

16f84a2 PIC16F84Aテストボード(その2)のRB0/INTピンを入力端子としてタクトスイッチをつなぎ,RB1~RB7は出力端子としてLEDをつなぎました。
 RB0のタクトスイッチを押す(Lowレベルになる)と割り込み処理が行われるように,INTEDG = 0;(割込み条件を立下がりエッジにする)とします。さらにINTE = 1;(RB0/INT外部割込みを許可),GIE = 1;(すべての割り込みを許可)などをmain関数に書いておけばOKです。
 これで,スイッチを押すたびに7つのLEDを点滅させることができます。
ソースはこれ→lesson23.c
チャタリング対策として,__delay_ms(20);の待ち時間を適切に調節しましょう。

/************************************
16F84A  HI-TECH C v.9.83
RB0/INT外部割り込みでLEDの点滅
************************************/

#define _LEGACY_HEADERS
#include "PIC.h"
#define _XTAL_FREQ 20000000 //20MHz
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);

static void interrupt warikomi(void) //割り込み処理
{
INTF = 0; // RB0/INT外部割り込み禁止
RB1 = ~RB1; // RB0~7のLEDを点滅させる
RB2 = ~RB2;
RB3 = ~RB3;
RB4 = ~RB4;
RB5 = ~RB5;
RB6 = ~RB6;
RB7 = ~RB7;
__delay_ms(20);
}

main(void)
{
TRISB = 0b00000001; // RB0端子は入力端子,他は出力端子
INTEDG = 0; // 割込み条件を立下がりエッジにする
INTF = 0; // RB0/INT外部割込みフラグをクリア
INTE = 1; // RB0/INT外部割込み許可
GIE = 1; // すべての割り込み許可

RB1 = 1;
RB2 = 0;
RB3 = 1;
RB4 = 0;
RB5 = 1;
RB6 = 0;
RB7 = 1;

while(1){ //無限ループ
}
}

|

« PIC16F84Aのテストボード その2 | トップページ | PICのお勉強(24) C言語編 電子オルガン »

PICマイコン」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/26930/54928972

この記事へのトラックバック一覧です: PICのお勉強(23) C言語編 RB0/INT外部割り込み:

« PIC16F84Aのテストボード その2 | トップページ | PICのお勉強(24) C言語編 電子オルガン »