PICのお勉強(23) C言語編 RB0/INT外部割り込み
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){ //無限ループ
}
}
| 固定リンク | 0
「PICマイコン」カテゴリの記事
- ZK-80で足し算(2020.07.23)
- TK-80互換機 ZK-80のキット(2020.07.21)
- PICのお勉強(37) C言語編 12F683でA/D変換(2015.06.02)
- UVレジンでLEDイルミネーション (2)(2015.05.15)
- PICのお勉強(35) C言語編 PWMでサーボモータを動かす(2014.10.05)
コメント