PIC12F675、HC-SR04のプログラム

このQ&Aのポイント
  • PIC12F675にプログラムを書き込み、HC-SR04の距離が5cm以下の時にブザーが鳴るようにしたいです。
  • 現在のプログラムでは、距離に関わらず出力が一定になっています。
  • プログラムに間違いがあれば教えていただけませんか。
回答を見る
  • 締切済み

PIC12F675、HC-SR04のプログラム

PIC12F675にプログラムをMPLABX IPEで書き込んで、超音波センサ HC-SR04の距離が5cm以下の時にブザーが鳴る(出力が5Vになる)ようにしたいです。 以下のプログラムで出力は、距離に関わらず5Vか0Vで一定になっています。 プログラムに間違いがあれば、教えていただけないでしょうか。 #include <xc.h> #include <stdio.h> //12F675 #include <stdlib.h> #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-Up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #define _XTAL_FREQ 32000000 #define TX_UART_SIZE 3 #define SONIC_TRIG GPIO5 #define SONIC_ECHO GPIO4 #define SONIC_TEMP GPIO2 #define SONIC_BUZZ GPIO1 #define IO_OFF 0 #define IO_ON 1 #define TIME_OFF -1 #define TIME_UP 0 #define TIME_START_H 0xD8 #define TIME_START_L 0xF0 #define TIME_LED_CNT_MAX 5 #define TIME_LED_CNT2_MAX 15 unsigned char cnt10ms; char TimerLed1; char TimerLed2; int main(int argc, char** argv) { long echo_time; long dist; OSCCAL = 0b00110000 ; // 内部クロック8MHz ANSEL = 0x00 ; // AN未使用、デジタルI/Oに割当てる CMCON = 0x07; // コンパレータ未使用 TRISIO = 0b00011100 ; // RA2,3,4を入力にし、他は出力に割当てる GPIO = 0b00000000 ; // 出力ピンの初期化(全てLOWにする) T1CON = 0b01110000 ; // ゲート有効、Hiでカウント、単一パルス、T1Gピン TMR1ON = 1; // タイマー1開始 while(1) { // タイマ1のカウンタ準備 TMR1 = 0; // カウンタの初期化TMR1 = 0; // トリガ送信 SONIC_TRIG = IO_ON; __delay_us( 10 ); SONIC_TRIG = IO_OFF; // エコー信号のON待ち while( SONIC_ECHO == IO_OFF ) { } // エコー信号のOFF待ち while( SONIC_ECHO == IO_ON ) { } // 超音波の往復時間を取得 echo_time = TMR1; // 往復時間から片道の時間にする echo_time /= 2; // パルス時間から距離(cm)に変更 dist = echo_time * 34 / 1000; if( dist <= 5 ) //距離5cm以下でブザー出力 { (SONIC_BUZZ = 1); } else { (SONIC_BUZZ = 0); } __delay_ms( 1000 ); } return (EXIT_SUCCESS); }

みんなの回答

  • mzee
  • ベストアンサー率25% (1/4)
回答No.2

PICに接続される外部回路が分からないので、 内部のみに関して見れば、クロックに関する 設定などが何か所か間違っていると思います。 ・PIC12F675の内部クロックは4MHz固定で  ないのか。 ・それなのに距離計算は32MHzクロック想定  のままでよいのか。 etc....

  • TIGANS
  • ベストアンサー率35% (244/680)
回答No.1

関連するQ&A

  • PIC16F タイマ0使い方

    久しぶりにPICを引っ張り出して触っていたのですが、タイマ割込みの部分がうまくできていないようで、LED(led_green)を1秒で点滅させたいのですが2秒ぐらいの中途半端な点滅をしてしまいます。 内部クロックを4MHzに設定しているので、これをプリスケーラで8分周しTMR0の値を130に設定し、1msごとに割込みが発生する算段なのですが、どこか間違えてますでしょうか? マイコンは PIC16F886 を使用しています。 #include<pic.h> #include<stdio.h> #include <stdlib.h> #include <xc.h> #define _XTAL_FREQ 4000000 // 内部クロック 4MHz // CONFIG1 #pragma config FOSC = INTRC_NOCLKOUT// Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // RE3/MCLR pin function select bit (RE3/MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown Out Reset Selection bits (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) #pragma config LVP = OFF // Low Voltage Programming Enable bit (RB3 pin has digital I/O, HV on MCLR must be used for programming) // CONFIG2 #pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V) #pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off) #define TMR_set 130 // TMR0初期値 #define led_green RB0 #define led_white RC3 volatile unsigned int count = 0; volatile unsigned int cnt = 0; // タイマー割込みの処理 void __interrupt() int_f (void){ // 割り込みハンドラ if(T0IF == 1){ // 1ms count++; cnt++; TMR0=TMR_set; T0IF = 0; // 割り込みフラグをクリア (オーバーフローフラグ) if(count>=1000){ // 1s count=0; led_green = ~led_green; } } } void init(){ OSCCON = 0b01100000; ANSEL = 0b00000000; ANSELH = 0b00000000; TRISA = 0b00000000; TRISB = 0b00000000; TRISC = 0b00000000; PORTA = 0; PORTB = 0; PORTC = 0; GIE = 1; // すべての割り込みを許可 (0:禁止, 1:許可) T0IE = 0; // タイマー割り込みを禁止 (0:禁止, 1:許可) T0CS = 0; // TIMAR0モジュールをタイマーとして使用 (0:通常のタイマーとして使用, 1:T0CK端子に入ってきた入力のカウンタ) PSA = 0; // プリスケーラをTIMER0モジュール用にセット OPTION_REG = 0x02; // プリスケーラ 1:8 TMR0 = TMR_set; T0IE = 1; // タイマー割り込みを許可 (0:禁止, 1:許可) T0IF = 0; // 割り込みフラグをクリア (オーバーフローフラグ) } void main(void){ init(); led_white = 1; while(1){ } return; }

  • PIC 16F84A でLEDが点滅しない

    どんな事をしても、LEDが点滅しません何が原因なのかわかりません。何方か教えて頂けませんか。 環境は、Windowos8 MPLAB X IDE XC8 PICkit3  Pickit3対応ICSP書き込みアダブターです。 PICは PIC16F84A を使用しています。ソースコードは下記のようにしてあります。  #include <xc.h> // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator) #pragma config WDTE = ON // Watchdog Timer (WDT enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (Power-up Timer is disabled) #pragma config CP = OFF // Code Protection bit (Code protection disabled) #define_XTAL_FREQ 20000000 void main(void) { TRISA = 0x00; PORTA = 0x031; TRISB = 0x00; PORTB = 0x00; while (1) { PORTA = 0x02; Delay_ms(1000); PORTA = 0x01; Delay_(1000); } } ------------回路  PIC16F84A      ------------   18  RA1-----1Kオーム----- (K)LED(A)----←  5V      17  RA0----- 1Kオーム-----(K)LED(A)----←  5V     16  OSC1----             セラロック20MHZ -------- GND   15  OSC2----   14 VDD---------------← 5V    4  MCLR--------------← 5V 5 VSS----------------- GND   コンパイルも、書き込みもできましたが駄目でした。いろいろ試みましたが成功しません。 コンフィギレーションに決定的な間違いがあるのではないか?疑っております。 よろしくお願いいたします。

  • PIC16F88のエラーについて教えてください

    PICを勉強中ですが、16F88用にコーディングしたソースをMPLAB IDE v8.66を使用してアッセンブルすると必ずコンフィグの部分で Error[108]の Illegal character (,) になり原因がわかりません。何方かご教授お願いします。ちなみにコンフィグは下記(1)(2)(3)で試しましたがどれも同じエラーになります。 ンフィグの部分でにコーディングしたソースを (1)__CONFIG _CONFIG1, _WDT_OFF & _BOREN_ON & _PWRTE_ON & _INTRC_IO & _CCP1_RB3 & _LVP_OFF (2)__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO (3)__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC

  • PIC タイマー0の使い方

    PIC16F886を触り始めたのですが、タイマー割り込みで苦戦しています。 タイマー割り込みを使ったLEDの点滅の間隔が、自分の思った時間にならないのです。 下に今のプログラムを載せておきます。 私の今の考え方はこうです。 ・内部クロックは4MHzに設定してある ・TMR0のカウントはクロックの1/4らしい→1MHzなので周期は1μsec ・プリスケーラは1:128に設定→128μsecでTMR0がカウントアップ ・TMR0の初期値を61に設定→195回のカウントアップでT0IF=1 ・128μsec*195μsec=2496μsec≒0.025msec←タイマー割り込み ・40回カウントすると1秒 と、1秒ごとにLEDのON,OFFが切り替わるはずだと考えているのですが、書き込んで計測したところ、約0.8秒でon,offを繰り返しています。 私の考え方やプログラムに間違いがあるのでしょうか? もしくはPICがハード的に壊れているのでしょうか?(picに5Vをかけても動かず、mainが実行中に点灯するLED(この時点では点いていない)の端子の両端を指で触ると何故か動き出します。) 以下プログラムです。(注釈などは省いたので見難いかもしれません) #include <stdio.h> #include <stdlib.h> #include <xc.h> #include <pic.h> #pragma config FOSC = INTRC_NOCLKOUT #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = ON #pragma config IESO = OFF #pragma config FCMEN = OFF #pragma config LVP = ON void interrupt tc_int(void); volatile unsigned int cnt = 0; volatile unsigned int cnt1 = 0; #define sw RB0 #define led RA0 #define led2 RA1 #define led3 RA2 #define _XTAL_FREQ 4000000 void init(void) //初期設定 { OSCCON=0b01101000; // 内部クロック設定 4MHz TRISA=0b00000000; TRISB=0b00000000; TRISC=0b00000000; ANSEL=0x00; /* 割り込み初期設定 */ GIE = 1; // すべての割り込みを許可 T0IE = 0; // タイマー割り込みを禁止 T0CS = 0; // TIMAR0モジュールをタイマーとして使用 PSA = 0; // プリスケーラをTIMER0モジュール用にセット OPTION_REG |= 0x06; // CPUクロックを128分周 TMR0 = 61; // カウンタ値をリセット T0IE = 1; // タイマー割り込みを許可 T0IF = 0; // 割り込みフラグをクリア } int main(void) { init(); sw=1; led=1; led3=0; cnt1=0; LEDflg=0; while(1) { if(cnt1>=10){ led3=~led3; cnt1=0; } } } void interrupt tc_int(void){ // 割り込みハンドラ if(T0IF == 1){ cnt++; TMR0=61; T0IF = 0; // 割り込みフラグをクリア if(cnt>=40){ cnt=0; cnt1++; led2= ~led2; } } }

  • PIC18F2550・コンパイルできない(再掲)

    初めて投稿します。 技術職(機械系)の会社員です。 マイコンプログラム作成歴:約3ヶ月のほぼド素人です。 現在、会社の技術研修でPIC18F2550を使ったライントレーサの動作プログラムを作成しています。先日までPIC16F84A&88でのプログラミングを行なっており、基本は理解できているつもりです。 …が、これまで見た事のないエラーコードが出てしまい、理由がわからず困っています。 エラーコードは、[1101]lvalue required と[1105]symbol '○○○' has not been defined というもので、コンパイラのユーザーガイドを見ると、変数(GIE,LATA0等)の認識ができない?エラーのようです。ヘッダーファイルのインクルードもしており、これまでの84A&88では出なかったエラーです。 webも調べましたが、わかりませんでした。 作成環境はMPLAB V8.36、MPLAB C18コンパイラV3.33 です。 エラーメッセージ画面添付、ソースコード掲載しますので、PICプログラムに精通されている方、間違い部分をご教授頂けないでしょうか? 何卒ご協力のほどよろしくお願いします。 --【以下、コード抜粋】-- //●使用マイコン:PIC18F2550 //===《初期設定》=== //---<ヘッダーファイル>--- #include<p18f2550.h> #include"delays.h" //---<コンフィグレーション>--- #pragma config PLLDIV = 5 #pragma config CPUDIV = OSC1_PLL2 #pragma config USBDIV = 2 #pragma config FOSC = HSPLL_HS #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config PWRT = ON #pragma config BOR = OFF #pragma config BORV = 3 #pragma config VREGEN = OFF #pragma config WDT = OFF #pragma config WDTPS = 1 #pragma config MCLRE = ON #pragma config LPT1OSC = OFF #pragma config PBADEN = OFF #pragma config CCP2MX = ON #pragma config STVREN = OFF #pragma config LVP = OFF #pragma config XINST = OFF #pragma config DEBUG = OFF #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF #pragma config CPB = OFF, CPD = OFF #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF #pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF #pragma config EBTRB = OFF //---<関数宣言>--- void ioport(void); void interr(void); void pwm_settei(void); void move_A(void); void move_B(void); void delay_ms(long); //---<変数宣言>--- int c_flg = 0; //変数「c_flg」を宣言 //------------------------------------------------------------ //===《動作プログラム》=== //---<メイン関数>--- void main() { ioport(); interr(); pwm_settei(); while(1) { move_A(); } } //---<サブルーチン>--- void ioport(void) //[入出力ポート初期設定] { ADCON1 = 0b00001111; //A/D設定:全ポートデジタル TRISA = 0b00000000; //ポートA・I/O設定 TRISB = 0b11111111; //ポートB・I/O設定 TRISC = 0b00110000; //ポートC・I/O設定 } void interr(void) //[割り込み初期設定] { GIE = 1; //グローバル割り込み設定:許可 TMR2IE = 1; //タイマ2割り込み設定:許可 } --【途中省略】-- void move_A(void) //[動作A(直線&曲線走行モード)] { switch(PORTB) { case 0b01000000 : //センサB(内左)認識 CCPR1L = 100; //CCP1 Duty値設定 CCPR2L = 30; //CCP2 Duty値設定 LATC7 = 1; //モータR1:正転 LATA0 = 1; //モータL1:正転 LATC6 = 1; //モータR2:ON LATA1 = 1; //モータL2:ON break; --【以下続く】--

  • PICでダイナミック点灯 なぜかLEDがOFF

    8×8のLEDマトリクスをダイナミック点灯制御するのに PIC16F1938を使用し PORTAをX軸 PORTBをY軸 として、以下のようなコードを書きましたが、 なぜか、1秒ぐらいで全て消灯してしまいます トラブルシューティングが終わりません 分かる方、教えて頂けませんか? XC8を使用しています // PIC16F1938 #include <stdio.h> #include <stdlib.h> #include <xc.h> #include<math.h> #include<stdbool.h> #define _XTAL_FREQ 32000000 // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG1 #pragma config FOSC = INTOSC #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = OFF #pragma config CLKOUTEN = OFF #pragma config IESO = OFF #pragma config FCMEN = OFF // CONFIG2 #pragma config WRT = OFF #pragma config VCAPEN = OFF #pragma config PLLEN = ON #pragma config STVREN = OFF #pragma config BORV = LO #pragma config LVP = OFF #define true 1 #define false 0 void main(){ OSCCON = 0b11110000; TRISA = 0x00; TRISB = 0x00; TRISC = 0x00; ANSELA = 0x00; ADCON0 = 0x00; ADCON1 = 0x00; PORTA = 0x00; PORTB = 0x00; PORTC = 0x00; unsigned char i; LATA=0b11111110; LATB=0b10000000; unsigned char b; bool a; b=0b11111110; while (true) { for(i=1;i<=8;i++){ __delay_ms(1); a=b>>7; b=b<<1; b=b|a; LATA=b; } a=LATB>>7; LATB=LATB<<1; LATB=LATB|a; } }

  • PIC18F2550の割り込み処理について

    PIC18F2550を使って、外部入力割り込みがちゃんと入るかどうかをチェックするため非常に簡単なサンプルコードを書いてみたのですが割り込みが発生しないのでどなたかご助力お願いします。(コンパイラ : MPLAB C18) とりあえずスイッチを押せばINT2ピンに5Vが入力され、割り込みでLEDを点滅させるという主旨で以下のコードを書きこんで動作させました。 #include <p18f2550.h> #include <delays.h> #include <portb.h> #pragma config FOSC = INTOSCIO_EC, FCMEN = ON, IESO = OFF #pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF #pragma config WDT = OFF, CCP2MX = OFF #pragma config PBADEN = ON, LPT1OSC = ON, MCLRE = OFF #pragma config STVREN = ON, LVP = OFF, XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF #pragma config CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF #pragma config WRT2 = OFF, WRT3 = OFF, WRTC = OFF #pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF #pragma config EBTR3 = OFF, EBTRB = OFF int i; void isr(void); #pragma code isrcode = 0x0000008 void isr_direct(void) {_asm GOTO isr _endasm} #pragma code #pragma interrupt isr void isr(void) { //外部入力割り込みの処理はここに記述 INTCON3bits.INT2IF = 0; for(i=0; i<10; i++) { LATCbits.LATC1 = 1; Delay10KTCYx(255); LATCbits.LATC1 = 0; Delay10KTCYx(255); } } void main() { OSCCON = 0b01110000; //システムクロックを8MHZに設定 TRISA = 0b1111111; //ポートAをすべて入力に設定 TRISB = 0b11111111; //ポートBをすべて TRISC = 0; //ポートCをすべて出力に設定 //ポートRB2の外部割込みON, 立上がりエッジでON, Bポートの抵抗プルアップOFF OpenRB2INT(PORTB_CHANGE_INT_ON & RISING_EDGE_INT & PORTB_PULLUPS_OFF); RCONbits.IPEN = 0; //割り込み優先制御OFF INTCON3bits.INT2IE = 1; INTCONbits.GIE = 1; //全割り込み許可 while(1); } しかし、スイッチを押しても割り込み処理に移行せず無反応のままです。 スイッチを押した時にINT2ピンに5V入力があることはテスターで確認したので、ソースコードの方に問題があるかと思います。 よろしくお願いします。

  • LCDを用いたカウントダウンプログラムについて

    今、PIC16F84AとLCDを用いて255からカウントダウンするところをLCDに表示するプログラムを作っています。 開発環境は ・MPLAB X IDE ・XC8コンパイラー ・PIC Kit3 を使っています。 プログラムはコンパイル、ビルドおよび書き込みは正常にできます。 しかし、いざ動かしてみるとカウントが「255」から「254」にならず「52」になってしまいます。 プログラムのどこがおかしいか全くわかりません。 また、プログラムにおいてLCDの表示ルーチンは、「Hi-Tech C」のサンプルを使用していて (Delay関数の個所をXC8用に書き換えています。)パスコンは、つけたほうが良いのですが、今回はつけていません。 参考のため回路図とプログラムを掲載しますので解決策がありましたら教えてください。 よろしくお願いいたします。 ////////////////以下ソースコード//////////////////// /* * File: main.c * * Created on 2015/12/24, 16:37 */ //#define _LEGACY_HEADERS #include <pic.h> #include <stdlib.h> #include "lcd.h" #define _XTAL_FREQ 4000000 #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (Power-up Timer is disabled) #pragma config CP = OFF // Code Protection bit (Code protection disabled) void ioport(void); void main(void) { unsigned char data; char str[2]; ioport(); lcd_init(); data=255; while(1){ lcd_clear(); lcd_goto(0x00); itoa(str,data,10); lcd_puts(str); if(data<0){ data=255; } __delay_ms(250); __delay_ms(250); data--; } } void ioport(void) { TRISA=0x00; PORTA=0x00; TRISB=0x00; PORTB=0x00; } //////////////////////////////////

  • PIC初心者です。 PIC16F88のLED制御で以下のプログラムを実

    PIC初心者です。 PIC16F88のLED制御で以下のプログラムを実行すると点滅を繰り返します。 意図としては1度だけ光って消えてほしいのですが… CONFIG部分がおかしいのでしょうか? 環境として、PCはVista、MPLABとPICkit2を使用しています お分かりになる方、お願いいたします。 以下ソースです LIST P=PIC16F88 INCLUDE "P16F88.INC" __CONFIG _CONFIG1, _INTRC_IO & _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_ON BSF STATUS,RP0 CLRF TRISB BCF STATUS,RP0 BCF STATUS,0 CLRF PORTB MAIN BSF PORTB,0 NOP NOP NOP (以下、NOPが100個ほど) NOP BCF PORTB,0 END

  • PIC18F2550の外部入力割込みについて

    PIC18F2550で外部入力割り込みがちゃんと入るかどうかをチェックするため非常に簡単なサンプルコードを書いてみたのですが、mainの処理を行うだけで割り込みが発生しないのでどなたかご助力お願いします。(コンパイラ : MPLAB C18) 以前ほぼ同様の質問を掲載しましたが、解決につながる回答が得られませんでした↓ 長い間解決出来ず困り果てているので、有益な回答をいただけると幸いです。 mainのwhileループではLEDを点滅させ、スイッチを押せばINT2ピンに0Vが入力され、割り込みでLEDを点灯し続けるという主旨で以下のコードを書きこんで動作させました。 #include <p18f2550.h> #include <delays.h> #pragma config FOSC = INTOSCIO_EC, FCMEN = ON, IESO = OFF #pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF #pragma config WDT = OFF, CCP2MX = OFF #pragma config PBADEN = ON, LPT1OSC = ON, MCLRE = OFF #pragma config STVREN = ON, LVP = OFF, XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF #pragma config CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF #pragma config WRT2 = OFF, WRT3 = OFF, WRTC = OFF #pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF #pragma config EBTR3 = OFF, EBTRB = OFF int i; int j; void high_isr(void); // リセットベクタ #pragma code reset_vector=0x1000 extern void _startup(void); void remapped_reset(void) { _asm goto _startup _endasm } #pragma code high_vector = 0x000008 void interrupt_high_vector(void) {_asm GOTO high_isr _endasm} #pragma code #pragma interrupt high_isr void high_isr(void) { //外部入力割り込みの処理はここに記述 for(j=0; j<10; j++) { LATCbits.LATC1 = 1; Delay10KTCYx(255); } INTCON3bits.INT2IF = 0; } void main() { OSCCON = 0b01111100; //システムクロックを8MHZに設定 TRISA = 0b01111111; //ポートAをすべて入力に設定 TRISB = 0b11111111; //ポートBをすべて入力に設定 TRISC = 0b00000000; //ポートCをすべて出力に設定 RCON = 0b10000100; INTCON = 0b10010000; INTCON2 = 0b10000000; INTCON3 = 0b10011000; //INT2ピンの立下りエッジで割り込み処理に移行する     while(1) { LATCbits.LATC1 = 1; Delay10KTCYx(255); LATCbits.LATC1 = 0; Delay10KTCYx(255); } } スイッチ入力時に0VがINT2ピンに入力されていることは確認できたので、プログラムの方に問題があると思われます。 回答お待ちしております。