課題4でPIC12F683の割り込みプログラミングを説明しました。この課題では250msの間隔を100msに変更しましょう。
■割り込み計算
set_timer1(初期値);
この初期値の数値で割り込み時間を変えることができます。
初期値をxとして、一次方程式を立てます。
0.5*10^-6*8*(65535-x+1)=100ms
■割り込み計算
set_timer1(初期値);
この初期値の数値で割り込み時間を変えることができます。
初期値をxとして、一次方程式を立てます。
0.5*10^-6*8*(65535-x+1)=100ms
これを解くと、
x=(その1)
と求めることができます。この値を初期値とすればtimer1には100msの割り込みが発生します。
■課題5
起動時にLEDを250ms間隔でで3回点滅後、割り込みを使い100msでLEDを点滅する。
空欄を埋めてプログラムを完成してください。
■正解
(その1)40536 (その2)T1_INTERNAL | T1_DIV_BY_8 (その3)40536 (その4)delay_ms(250) (その5)delay_ms(250) (その6)INT_TIMER1 (その7)GLOBAL
課題5のC言語ソース・ファイルとHEXファイルはこちらからダウンロードできます【ex5_006p.lzh】
x=(その1)
と求めることができます。この値を初期値とすればtimer1には100msの割り込みが発生します。
■課題5
起動時にLEDを250ms間隔でで3回点滅後、割り込みを使い100msでLEDを点滅する。
// 赤外線2ch送信機TX2-006P 課題5
// 割り込み
// 起動時250msで3回点滅後、割り込みを使い100msで点滅する。
// ex5-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;
// 0.5*10^-6*8*(65535-x+1)=100ms
//x=(その1)
#int_timer1//割り込み関数定義
alart()//100msごとに割り込みを発生する
{
set_timer1((その1));
led_sts=0x01-led_sts;
LED=led_sts;
}
//メイン・ルーチン
void main()
{
int i;
set_tris_a(0x0f);//GP0~GP4入力、GP5出力
setup_oscillator(OSC_8MHz);
setup_timer_1((その2));//250msごとの割り込み
set_timer1((その3));//timer1初期値
IROUT=OFF;
LED=OFF;
led_sts=0;
for(i=0;i<3;i++){
LED=ON;
(その4);
LED=OFF;
(その5);
}
enable_interrupts((その6));//割り込み許可
enable_interrupts((その7));//割り込み全体許可
while(1){
}
}
空欄を埋めてプログラムを完成してください。
■正解
(その1)40536 (その2)T1_INTERNAL | T1_DIV_BY_8 (その3)40536 (その4)delay_ms(250) (その5)delay_ms(250) (その6)INT_TIMER1 (その7)GLOBAL
課題5のC言語ソース・ファイルとHEXファイルはこちらからダウンロードできます【ex5_006p.lzh】
長野県飯田工業高校 竹内浩一

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