RB2/INT2に繋がっているスイッチを押すと割り込みが発生。
割り込みでRC1のLEDを点滅させる
- /*
- 概要:外部割込みINT2を使ってみる
- HID - Bootloaderを使った書き込み
- マイコン:PIC18F2550
- ファイル名:nain.c
- 開発環境:MPLAB C18
- */
- #include <p18f2550.h>
- #include <delays.h>
- #include <portb.h>
- void high_isr (void);
- void low_isr (void);
- // リセットベクタ
- #pragma code reset_vector=0x1000
- extern void _startup(void);
- void remapped_reset(void) {
- _asm goto
- _startup
- _endasm
- }
- #pragma code
- // 高優先割込み関連の記述 ====
- #pragma code high_vector=0x1008
- void high_interrupt (void) {
- _asm
- GOTO high_isr
- _endasm
- }
- #pragma code
- #pragma interrupt high_isr
- void high_isr (void) {
- /* ここに高優先割込み処理を記述する */
- INTCON3bits.INT2IE = 0; //外部割込みINT2の禁止
- INTCONbits.PEIE = 0; //低位割込み禁止
- INTCONbits.GIE = 0; //全割込み禁止
- INTCON3bits.INT2IF = 0; // INT2の割込みフラグをリセット
- LATCbits.LATC1 = !LATCbits.LATC1;//RC1のLED点滅点<->灯点滅
- INTCON3bits.INT2IE = 1; //外部割込みINT2の許可
- INTCONbits.PEIE = 1; //低位割込み許可
- INTCONbits.GIE = 1; //全割込み許可
- }
- // 低優先割込み関連の記述 ====
- #pragma code low_vector=0x1018
- void low_interrupt (void) {
- _asm
- GOTO low_isr
- _endasm
- }
- #pragma code
- #pragma interruptlow low_isr
- void low_isr (void) {
- /* ここに低優先割込み処理を記述する */
- }
- void main(void) {
- TRISB = 0b00000100; // B portのRB2を入力モードに その他を出力モードに設定
- TRISC=0; // ポートCをすべて出力ピンにする
- OpenRB2INT(PORTB_CHANGE_INT_ON & //ポートRB2の外部割込みON
- FALLING_EDGE_INT & //立下りエッジでON
- PORTB_PULLUPS_OFF //Bポートの抵抗プルアップOFF
- );
- RCONbits.IPEN = 1; //割込み優先順位制御ON (0:優先順位制御OFF)
- INTCON3bits.INT2IP = 1; //INT2の割り込みを高位割込みにセット(0:低位割込み)
- INTCON3bits.INT2IE= 1; //INT2割込みの許可
- INTCONbits.PEIE = 1; //低位割込み許可
- INTCONbits.GIE = 1; //全割込み許可
- LATCbits.LATC1 = 1; //電源投入でRC1のLED消灯
- while(1)
- { //通常の処理
- PORTCbits.RC0=1; //RC0ポートのLED点滅
- Delay10KTCYx(0); //0=>256 48MHzで213.3 ms
- PORTCbits.RC0=0;
- Delay10KTCYx(0);
- }
- }
0 件のコメント:
コメントを投稿