■ 課題7ののCソース・ファイルとHEXファイルはこちらです【LZH】
■ 課題8
課題7の割り込み処理について理解を深めるために、応用問題を考えましょう。課題7では、一つのLEDに対して、割り込みを使って点滅パターンを変えていました。この課題では、二つのLEDに対してパターンを変えています。また、点滅間隔も0.1sec→0.25secと変更しています。
RIGHT_LEDとLEFT_LEDで1秒間隔で、
●○●○と○○○○
の点滅させましょう。
一方では、割り込み処理を使って、DOWN_LEDとUP_LEDで0.25秒間隔で、
○●○●と○○○○
の点滅をさせましょう。
// ex8_warikomi.c
// PIC16F84A用
#include<16f84a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)
#byte RA=5
#byte RB=6
#bit IRSIG=RA.2
#bit TACTSW=RA.3
#bit DOWN_LED=RB.0
#bit UP_LED=RB.2
#bit RIGHT_LED=RB.1
#bit LEFT_LED=RB.3
int led_data,wcount;
// 1/20(MHz)*4*256*195=9.8304ms
// 9.8304ms*25=0.24576s=0.25s
#INT_RTCC
timer0_led_flash(){
set_timer0(61); //255-61+1=195
wcount--;
if(wcount==0){
led_data=0x01-led_data;
DOWN_LED=UP_LED=led_data;
wcount=★★;
}
}
main()
{
set_tris_a(0x1f);
set_tris_b(0x00);
setup_timer_0(★★★★);//timer0初期化
set_timer0(61);
wcount=★;
led_data=0;
enable_interrupts(INT_RTCC);//割り込み許可
enable_interrupts(GLOBAL);
while(1){
★★★★=1;
delay_ms(1000);
★★★★=0;
delay_ms(1000);
}
}
■ヒント
wcount=★★;
点滅間隔を0.1sec→0.25secに変更するためにここの数値を変更します。
setup_timer_0(★★★★);//timer0初期化
割り込み用timer0の初期化です。課題7と同じにします。
★★★★=1;
LEFT_LEDとRIGHT_LEDのみ点滅させるにはここの記述を変更します。
割り込みの基本部分は変えていません。課題8が完成したら、割り込み時間を変更して、オリジナル点滅パターンお試しください。
■ 訂正
割り込み処理の注釈文の中に、
// 9.8304ms*25=0.09830s=0.25sとありますが、
// 9.8304ms*25=0.24576s=0.25sの間違いです。訂正させていただきます。

PICマイコンでつくるインドア・プレーン
みんなで作ろうインドア・プレーン