##やりたいこと
PICマイコン(PIC16F18xx、XC8コンパイラ)を使用して、タイマ割込み処理を行っています。
割込みフラグを用意して、フラグの値によって、①と②の動作を切り替えた動作をしています。
①通常動作
3色のLEDを順番に点灯させています。
②タイマ割込み動作
SW(スイッチ)が押されたら、スイッチが押されている間は(ずっと)すべてのLEDを点灯させます。
##いまできていること
↓のコードで、割込みフラグによって、①と②の動作を切り替えるところまでできています。
##困っていること
①の動作の内容を変更したところ、タイマ割込み動作が行われなくなってしまいました。
変更した内容は、次の通りです。
①' 3色LEDの順番点灯を『100回繰り返し、100回に1度別の動作を行う。(ブザーを鳴らす)』
100回繰り返すところで、for文によるループ処理を入れています。
##コード
繰り返し処理の部分は、コメントアウトしてあります。
html
1 while(1){ 2 if(flag ==0){ 3 LED(); 4 } 5 else{ 6 SWON(); 7 flag=0; 8 } 9 } 10} 11 12//割り込み関数 13void interrupt isr(){ 14 GIE = 0; 15 if(TMR1IF == 1){ 16 //TMR1H = (63036 >>8); //タイマー1の初期化(65536-2500=63036); 17 //TMR1L = (63036 & 0x00ff); 18 flag=1; 19 TMR1IF = 0; //割り込みフラグを落とす 20 } 21 GIE = 1; 22} 23 24void LED(void) 25{ 26 int i; 27 //LED初期設定 28 LED1=0; 29 LED2=0; 30 LED3=0; 31 32 //カウントごとに行う処理(省略) 33 34 //for (i = 0; i < 100; i++) { 35 //SW = PORTCbits.RC3; 36 LED1=1; 37 __delay_ms(100); //100msec 38 LED1=0; 39 __delay_ms(100); //100msec 40 LED2=1; 41 __delay_ms(100); //100msec 42 LED2=0; 43 __delay_ms(100); //100msec 44 LED3=1; 45 __delay_ms(100); //100msec 46 LED3=0; 47 //} 48 49} 50 51void SWON(void) 52{ 53 while(SW == 0){ 54 LED1=1; 55 LED2=1; 56 LED3=1; 57 } 58 59}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/23 07:14 編集
2019/08/23 11:08
2019/08/23 11:10
2019/08/27 01:51
2019/08/27 04:07
2019/08/27 05:03