A-Dコンバータと割り込みを使った応用課題です。ジョイスティックをスロットルHiで1/2以上、エルロンスティック左1/4以下または右1/4以上で、割り込みを許可しLEDを100msで点滅するプログラムを完成してください。

■ 考え方
与えられた条件をまとめると次のようになります。
スロットル: th_adc> 512
かつ
エルロン: al_adc < 256 または al_adc > 768
以上を割り込み許可条件にすれば、プログラムは完成します。
■ 課題8
// 赤外線2ch送信機TX2-006P 課題8
// 割り込み
// ジョイスティック・スロットル1/2以上、エルロン・スティック左1/4以下、右1/4以上で、割り込みを許可しLEDを100msで点滅する。
// ex8-006p.c PIC12F683用
#include<12f683.h>
#DEVICE ADC=10 //A-Dコンバータを10bitで使用
//10bit=2^10=0~1023
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR
//ウオッチドック・タイマなし、パワーアップ・タイマ使用
//プロテクトなし、MCLRなし
#use delay(CLOCK=8000000) //8MHz駆動
#byte GP=5//GPポート使用
#bit IROUT=GP.5//赤外線LED
#bit LED=GP.4//LED
#bit SW=GP.3//ジョイスティック付属スイッチ
// A-Dコンバータ割り当て
//ch0:スロットル
//ch1:エルロン
//ch2:10kΩ半固定抵抗
#define ON 1
#define OFF 0
#define HI 1
#define LOW 0
int led_sts;
long th_adc,al_adc,vdd_adc;
// 0.5*10^-6*8*(65535-x+1)=100ms
//x=40536
#int_timer1//割り込み関数定義
alart()//100msごとに割り込みを発生する
{
set_timer1(40536);
led_sts=0x01-led_sts;
LED=led_sts;
}
//VR入力をA-Dコンバータより読み出し、各変数にセットする。
void adc_in(void)
{
set_adc_channel(0);//スロットル・スティック読み込み
delay_us(20);
(その1) ;
set_adc_channel(1);//エルロン・スティック読み込み
delay_us(20);
(その2) ;
set_adc_channel(2);//10kΩボリューム読み込み
delay_us(20);
vdd_adc=read_adc();
}
//メイン・ルーチン
void main()
{
int i;
set_tris_a(0x0f);//GP0~GP4入力、GP5出力
setup_oscillator(OSC_8MHz);
(その3) (sAN0 | sAN1 | sAN2 | VSS_VDD);//A-Dコンバータ使用宣言
(その4) (ADC_CLOCK_DIV_32);//A-Dコンバータ・クロック
(その5) (T1_INTERNAL | T1_DIV_BY_8);//250msごとの割り込み
set_timer1( (その6) );//timer1初期値
IROUT=OFF;
LED=OFF;
led_sts=0;
for(i=0;i<3;i++){
LED=ON;
delay_ms(250);
LED=OFF;
delay_ms(250);
}
enable_interrupts(GLOBAL);//割り込み全体許可
while(1){
adc_in();
if( (その7) ){
(その8) ;//割り込み許可
}
else{
LED=ON;
(その9) ;//割り込み許可
}
}
}
■ 正解
(その1) th_adc=read_adc() (その2) al_adc=read_adc() (その3) setup_adc_ports (その4) setup_adc
(その5) setup_timer_1 (その6) 40536 (その7) th_adc>512 || al_adc < 256 || al_adc > 768
(その8) enable_interrupts(INT_TIMER1) (その9) disable_interrupts(INT_TIMER1)
・課題8のC言語ソース・ファイルとHEXファイルはこちらからダウンロードできます【ex8_006p.lzh
】
次回は電源電圧監視プログラムについて考えます。
長野県飯田工業高校 竹内浩一

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