[戻る]
過去ログ [ 0001 ]
過去ログ:     ワード検索: 条件: 表示:

タイトル
記事No
投稿日
投稿者
参照先
INT割り込みが動かないです。
337
: 15/09/24-23:30
sakkun

PIC初心者です。
PIC16F1ファミリ活用ガイドブック+F1 EVALUATION KIT(DV164132:16LF1937)で勉強中です。

INT割り込みについて下記プログラムを作成しました。
RB0がINT割り込み、立ち上がり検出でRD0のLEDが20ms点灯、
となるつもりでしたが、まったく反応してくれません。
すいませんが、どこが原因か教えていただけないでしょうか。
よろしくお願いします。

#include <xc.h>

// CONFIG1
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = OFF
#pragma config FCMEN = OFF

#pragma config WRT = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = OFF
#pragma config BORV = LO
#pragma config LVP = OFF

#define _XTAL_FREQ 2000000

void main(void) {

ANSELB = 0x00;
ANSELD = 0x00;

TRISB = 0x01;
TRISD = 0x00;

WPUB=0x01;
OPTION_REGbits.nWPUEN=0;

OPTION_REGbits.INTEDG=1;
INTCONbits.INTF=0;

INTCONbits.INTE = 1;
INTCONbits.GIE = 1;

while (1) {

}
}

void interrupt ISR(void){
INTCONbits.INTF = 0;
LATDbits.LATD0 = 1;
__delay_ms(20);
}
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: INT割り込み
339
: 15/09/25-17:22
16bit

LEDが20ms点灯は短すぎです。
500ms位にしてはどうですか?
それと、MCLRE=ONは色々つまづく点なので必ずOFFにしておいた方が良いと思います。
configはどうしても必要なところ以外はOFFにして下さい。
割り込みの最後にLATDbits.LATD0 = 0;を追加して下さい。
ご存知かどうか分かりませんが、MPLAB Xにデバッグツールがあります。
実際にLED点灯ではなく、それで検証できると思います。

> PIC初心者です。
> PIC16F1ファミリ活用ガイドブック+F1 EVALUATION KIT(DV164132:16LF1937)で勉強中です。
>
> INT割り込みについて下記プログラムを作成しました。
> RB0がINT割り込み、立ち上がり検出でRD0のLEDが20ms点灯、
> となるつもりでしたが、まったく反応してくれません。
> すいませんが、どこが原因か教えていただけないでしょうか。
> よろしくお願いします。
>
> #include <xc.h>
>
> // CONFIG1
> #pragma config FOSC = INTOSC
> #pragma config WDTE = OFF
> #pragma config PWRTE = OFF
> #pragma config MCLRE = ON
> #pragma config CP = OFF
> #pragma config CPD = OFF
> #pragma config BOREN = ON
> #pragma config CLKOUTEN = OFF
> #pragma config IESO = OFF
> #pragma config FCMEN = OFF
>
> #pragma config WRT = OFF
> #pragma config PLLEN = OFF
> #pragma config STVREN = OFF
> #pragma config BORV = LO
> #pragma config LVP = OFF
>
> #define _XTAL_FREQ 2000000
>
> void main(void) {
>
> ANSELB = 0x00;
> ANSELD = 0x00;
>
> TRISB = 0x01;
> TRISD = 0x00;
>
> WPUB=0x01;
> OPTION_REGbits.nWPUEN=0;
>
> OPTION_REGbits.INTEDG=1;
> INTCONbits.INTF=0;
>
> INTCONbits.INTE = 1;
> INTCONbits.GIE = 1;
>
> while (1) {
>
> }
> }
>
> void interrupt ISR(void){
> INTCONbits.INTF = 0;
> LATDbits.LATD0 = 1;
> __delay_ms(20);
> }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^2: INT割り込み
340
: 15/09/26-00:10
sakkun

動きました!
ありがとうございました。

ちなみにまったく動かない理由はLED出力PORTを間違えていたためでした。
このプログラムで__delay_ms(500)(→500msのdelay)としても、実際に経過する時間は2sほどあるようです。なぜ合わないのでしょうか。


> LEDが20ms点灯は短すぎです。
> 500ms位にしてはどうですか?
> それと、MCLRE=ONは色々つまづく点なので必ずOFFにしておいた方が良いと思います。
> configはどうしても必要なところ以外はOFFにして下さい。
> 割り込みの最後にLATDbits.LATD0 = 0;を追加して下さい。
> ご存知かどうか分かりませんが、MPLAB Xにデバッグツールがあります。
> 実際にLED点灯ではなく、それで検証できると思います。
>
> > PIC初心者です。
> > PIC16F1ファミリ活用ガイドブック+F1 EVALUATION KIT(DV164132:16LF1937)で勉強中です。
> >
> > INT割り込みについて下記プログラムを作成しました。
> > RB0がINT割り込み、立ち上がり検出でRD0のLEDが20ms点灯、
> > となるつもりでしたが、まったく反応してくれません。
> > すいませんが、どこが原因か教えていただけないでしょうか。
> > よろしくお願いします。
> >
> > #include <xc.h>
> >
> > // CONFIG1
> > #pragma config FOSC = INTOSC
> > #pragma config WDTE = OFF
> > #pragma config PWRTE = OFF
> > #pragma config MCLRE = ON
> > #pragma config CP = OFF
> > #pragma config CPD = OFF
> > #pragma config BOREN = ON
> > #pragma config CLKOUTEN = OFF
> > #pragma config IESO = OFF
> > #pragma config FCMEN = OFF
> >
> > #pragma config WRT = OFF
> > #pragma config PLLEN = OFF
> > #pragma config STVREN = OFF
> > #pragma config BORV = LO
> > #pragma config LVP = OFF
> >
> > #define _XTAL_FREQ 2000000
> >
> > void main(void) {
> >
> > ANSELB = 0x00;
> > ANSELD = 0x00;
> >
> > TRISB = 0x01;
> > TRISD = 0x00;
> >
> > WPUB=0x01;
> > OPTION_REGbits.nWPUEN=0;
> >
> > OPTION_REGbits.INTEDG=1;
> > INTCONbits.INTF=0;
> >
> > INTCONbits.INTE = 1;
> > INTCONbits.GIE = 1;
> >
> > while (1) {
> >
> > }
> > }
> >
> > void interrupt ISR(void){
> > INTCONbits.INTF = 0;
> > LATDbits.LATD0 = 1;
> > __delay_ms(20);
> > }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^3: INT割り込み
341
: 15/09/26-15:22
エスパー

発振周波数が合っているでしょうか。
picマイコンは、RISC型なので周波数の1/4になります。

以上、確認お願いします。

> 動きました!
> ありがとうございました。
>
> ちなみにまったく動かない理由はLED出力PORTを間違えていたためでした。
> このプログラムで__delay_ms(500)(→500msのdelay)としても、実際に経過する時間は2sほどあるようです。なぜ合わないのでしょうか。
>
>
> > LEDが20ms点灯は短すぎです。
> > 500ms位にしてはどうですか?
> > それと、MCLRE=ONは色々つまづく点なので必ずOFFにしておいた方が良いと思います。
> > configはどうしても必要なところ以外はOFFにして下さい。
> > 割り込みの最後にLATDbits.LATD0 = 0;を追加して下さい。
> > ご存知かどうか分かりませんが、MPLAB Xにデバッグツールがあります。
> > 実際にLED点灯ではなく、それで検証できると思います。
> >
> > > PIC初心者です。
> > > PIC16F1ファミリ活用ガイドブック+F1 EVALUATION KIT(DV164132:16LF1937)で勉強中です。
> > >
> > > INT割り込みについて下記プログラムを作成しました。
> > > RB0がINT割り込み、立ち上がり検出でRD0のLEDが20ms点灯、
> > > となるつもりでしたが、まったく反応してくれません。
> > > すいませんが、どこが原因か教えていただけないでしょうか。
> > > よろしくお願いします。
> > >
> > > #include <xc.h>
> > >
> > > // CONFIG1
> > > #pragma config FOSC = INTOSC
> > > #pragma config WDTE = OFF
> > > #pragma config PWRTE = OFF
> > > #pragma config MCLRE = ON
> > > #pragma config CP = OFF
> > > #pragma config CPD = OFF
> > > #pragma config BOREN = ON
> > > #pragma config CLKOUTEN = OFF
> > > #pragma config IESO = OFF
> > > #pragma config FCMEN = OFF
> > >
> > > #pragma config WRT = OFF
> > > #pragma config PLLEN = OFF
> > > #pragma config STVREN = OFF
> > > #pragma config BORV = LO
> > > #pragma config LVP = OFF
> > >
> > > #define _XTAL_FREQ 2000000
> > >
> > > void main(void) {
> > >
> > > ANSELB = 0x00;
> > > ANSELD = 0x00;
> > >
> > > TRISB = 0x01;
> > > TRISD = 0x00;
> > >
> > > WPUB=0x01;
> > > OPTION_REGbits.nWPUEN=0;
> > >
> > > OPTION_REGbits.INTEDG=1;
> > > INTCONbits.INTF=0;
> > >
> > > INTCONbits.INTE = 1;
> > > INTCONbits.GIE = 1;
> > >
> > > while (1) {
> > >
> > > }
> > > }
> > >
> > > void interrupt ISR(void){
> > > INTCONbits.INTF = 0;
> > > LATDbits.LATD0 = 1;
> > > __delay_ms(20);
> > > }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^4: INT割り込み
344
: 15/09/27-07:31
sakkun

すいません。プログラムに一部抜け(OSCCONの設定)がありました。

ちょっと話がずれてしまいますが、下記の2つの意味(違い)が分かりません。
delay関数を使用する場合は下記#defineが必要なんだなって漠然と思っているだけです。

よろしければご教示いただけないでしょうか。
よろしくお願いします。
(ちなみに下記記載すると正しく動作しているように見えます。)

/* delay関数用クロック定数に定義 */
#define _XTAL_FREQ 2000000 //2MHz

/*クロック周波数の設定 */
OSCCON = 0x60; //2MHz PLL OFF



> 発振周波数が合っているでしょうか。
> picマイコンは、RISC型なので周波数の1/4になります。
>
> 以上、確認お願いします。
>
> > 動きました!
> > ありがとうございました。
> >
> > ちなみにまったく動かない理由はLED出力PORTを間違えていたためでした。
> > このプログラムで__delay_ms(500)(→500msのdelay)としても、実際に経過する時間は2sほどあるようです。なぜ合わないのでしょうか。
> >
> >
> > > LEDが20ms点灯は短すぎです。
> > > 500ms位にしてはどうですか?
> > > それと、MCLRE=ONは色々つまづく点なので必ずOFFにしておいた方が良いと思います。
> > > configはどうしても必要なところ以外はOFFにして下さい。
> > > 割り込みの最後にLATDbits.LATD0 = 0;を追加して下さい。
> > > ご存知かどうか分かりませんが、MPLAB Xにデバッグツールがあります。
> > > 実際にLED点灯ではなく、それで検証できると思います。
> > >
> > > > PIC初心者です。
> > > > PIC16F1ファミリ活用ガイドブック+F1 EVALUATION KIT(DV164132:16LF1937)で勉強中です。
> > > >
> > > > INT割り込みについて下記プログラムを作成しました。
> > > > RB0がINT割り込み、立ち上がり検出でRD0のLEDが20ms点灯、
> > > > となるつもりでしたが、まったく反応してくれません。
> > > > すいませんが、どこが原因か教えていただけないでしょうか。
> > > > よろしくお願いします。
> > > >
> > > > #include <xc.h>
> > > >
> > > > // CONFIG1
> > > > #pragma config FOSC = INTOSC
> > > > #pragma config WDTE = OFF
> > > > #pragma config PWRTE = OFF
> > > > #pragma config MCLRE = ON
> > > > #pragma config CP = OFF
> > > > #pragma config CPD = OFF
> > > > #pragma config BOREN = ON
> > > > #pragma config CLKOUTEN = OFF
> > > > #pragma config IESO = OFF
> > > > #pragma config FCMEN = OFF
> > > >
> > > > #pragma config WRT = OFF
> > > > #pragma config PLLEN = OFF
> > > > #pragma config STVREN = OFF
> > > > #pragma config BORV = LO
> > > > #pragma config LVP = OFF
> > > >
> > > > #define _XTAL_FREQ 2000000
> > > >
> > > > void main(void) {
> > > >
> > > > ANSELB = 0x00;
> > > > ANSELD = 0x00;
> > > >
> > > > TRISB = 0x01;
> > > > TRISD = 0x00;
> > > >
> > > > WPUB=0x01;
> > > > OPTION_REGbits.nWPUEN=0;
> > > >
> > > > OPTION_REGbits.INTEDG=1;
> > > > INTCONbits.INTF=0;
> > > >
> > > > INTCONbits.INTE = 1;
> > > > INTCONbits.GIE = 1;
> > > >
> > > > while (1) {
> > > >
> > > > }
> > > > }
> > > >
> > > > void interrupt ISR(void){
> > > > INTCONbits.INTF = 0;
> > > > LATDbits.LATD0 = 1;
> > > > __delay_ms(20);
> > > > }
▲pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re^5: INT割り込み
345
: 15/09/27-08:45
16bit

#define _XTAL_FREQ 2000000 //2MHz → delay用

OSCCON = 0x60; //2MHz PLL OFF →メインクロック

ご自身の設定ミスが多いので、質問よりも先ずデバッグツールを使いましょう。
現物が無い、見れない環境では質問しても周りを振り回すだけです。

> すいません。プログラムに一部抜け(OSCCONの設定)がありました。
>
> ちょっと話がずれてしまいますが、下記の2つの意味(違い)が分かりません。
> delay関数を使用する場合は下記#defineが必要なんだなって漠然と思っているだけです。
>
> よろしければご教示いただけないでしょうか。
> よろしくお願いします。
> (ちなみに下記記載すると正しく動作しているように見えます。)
>
> /* delay関数用クロック定数に定義 */
> #define _XTAL_FREQ 2000000 //2MHz
>
> /*クロック周波数の設定 */
> OSCCON = 0x60; //2MHz PLL OFF
>
>
>
> > 発振周波数が合っているでしょうか。
> > picマイコンは、RISC型なので周波数の1/4になります。
> >
> > 以上、確認お願いします。
> >
> > > 動きました!
> > > ありがとうございました。
> > >
> > > ちなみにまったく動かない理由はLED出力PORTを間違えていたためでした。
> > > このプログラムで__delay_ms(500)(→500msのdelay)としても、実際に経過する時間は2sほどあるようです。なぜ合わないのでしょうか。
> > >
> > >
> > > > LEDが20ms点灯は短すぎです。
> > > > 500ms位にしてはどうですか?
> > > > それと、MCLRE=ONは色々つまづく点なので必ずOFFにしておいた方が良いと思います。
> > > > configはどうしても必要なところ以外はOFFにして下さい。
> > > > 割り込みの最後にLATDbits.LATD0 = 0;を追加して下さい。
> > > > ご存知かどうか分かりませんが、MPLAB Xにデバッグツールがあります。
> > > > 実際にLED点灯ではなく、それで検証できると思います。
> > > >
> > > > > PIC初心者です。
> > > > > PIC16F1ファミリ活用ガイドブック+F1 EVALUATION KIT(DV164132:16LF1937)で勉強中です。
> > > > >
> > > > > INT割り込みについて下記プログラムを作成しました。
> > > > > RB0がINT割り込み、立ち上がり検出でRD0のLEDが20ms点灯、
> > > > > となるつもりでしたが、まったく反応してくれません。
> > > > > すいませんが、どこが原因か教えていただけないでしょうか。
> > > > > よろしくお願いします。
> > > > >
> > > > > #include <xc.h>
> > > > >
> > > > > // CONFIG1
> > > > > #pragma config FOSC = INTOSC
> > > > > #pragma config WDTE = OFF
> > > > > #pragma config PWRTE = OFF
> > > > > #pragma config MCLRE = ON
> > > > > #pragma config CP = OFF
> > > > > #pragma config CPD = OFF
> > > > > #pragma config BOREN = ON
> > > > > #pragma config CLKOUTEN = OFF
> > > > > #pragma config IESO = OFF
> > > > > #pragma config FCMEN = OFF
> > > > >
> > > > > #pragma config WRT = OFF
> > > > > #pragma config PLLEN = OFF
> > > > > #pragma config STVREN = OFF
> > > > > #pragma config BORV = LO
> > > > > #pragma config LVP = OFF
> > > > >
> > > > > #define _XTAL_FREQ 2000000
> > > > >
> > > > > void main(void) {
> > > > >
> > > > > ANSELB = 0x00;
> > > > > ANSELD = 0x00;
> > > > >
> > > > > TRISB = 0x01;
> > > > > TRISD = 0x00;
> > > > >
> > > > > WPUB=0x01;
> > > > > OPTION_REGbits.nWPUEN=0;
> > > > >
> > > > > OPTION_REGbits.INTEDG=1;
> > > > > INTCONbits.INTF=0;
> > > > >
> > > > > INTCONbits.INTE = 1;
> > > > > INTCONbits.GIE = 1;
> > > > >
> > > > > while (1) {
> > > > >
> > > > > }
> > > > > }
> > > > >
> > > > > void interrupt ISR(void){
> > > > > INTCONbits.INTF = 0;
> > > > > LATDbits.LATD0 = 1;
> > > > > __delay_ms(20);
> > > > > }
▲pagetop

- WebForum -