• ベストアンサー

タイマー割り込みについて

タイマー割り込みが、ハードの分野になるのかもよく分からないのですが・・・。 タイマー割り込みのしくみとタイマー割り込みの必要性についておしえてください。 できれば何かのプログラムを例にしてもらえればよりよいのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • kent85
  • ベストアンサー率52% (38/73)
回答No.2

「割り込み」は、コンピュータでは一般的なもの/概念/回路/IC, etcです。 タイマ割り込みは ・インターバルタイマ ・ワンショットタイマ が有名です。 音楽でいえばメトロノームか、ベースやドラムなどのリズム楽器に近い……です。 ベースのビートが、ばらついたら、メロディラインは妙な具合になります。 > タイマー割り込みをかける部分のプログラム。 汎用的には ・割り込みハンドラ(通知ハンドラ)を定義/登録する ・タイマ割り込みを許可する のようなものですけど、コンピュータ、OSの種類、OSの有無など環境によって異なります。 > 10秒たったら、osに教えてくださいという部分のプログラム。 ・目をつぶって10秒数えてから目をあけてください ・目をあけたらストップボタンを押して止めてください ・準備が出来たら開始します ・それでは、「はじめ」 というのをコンピュータにやらせます http://sourceforge.jp/projects/linux-kernel-docs/wiki/2.3%E3%80%80%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E5%89%B2%E3%82%8A%E8%BE%BC%E3%81%BF%E5%87%A6%E7%90%86 http://www5c.biglobe.ne.jp/~ecb/assembler/a_6a.html http://www-online.kek.jp/~yasu/Kenshu/interrupt.html

112233445
質問者

お礼

回答ありがとうございます。 じっくりと勉強させてもらいます。 自分の知りたいことが説明されているようなので 感謝しています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

例えばクイズを出すプログラム。 このクイズに10秒以内で答えなさい。 プログラムは、キーボード等から答えが入力されるのを待ちます。同時に10秒経過したら教えてくださいとOSに依頼します。 答えが入力されたら正否の判定をプログラムで行いますが、10秒経っても入力されない場合にはOSからその旨がプログラムに通知されるので、プログラムではタイムオーバした旨の処理をします。 このように時間で待ち合わせるような場合にタイマー割り込みを使用します。 コンピュータはタイマーを持っていますので、上記のように指定された時間が経過したらその旨をプログラムに通知する機能をOSに組み込んでいます。

112233445
質問者

補足

丁寧に具体的に回答いただきありがとうございます。 2、3行のプログラム(c言語、アセンブリ言語)でよいのでもしできたらどんなプログラムになるのか。教えてもらえないでしょうか。 ・タイマー割り込みをかける部分のプログラム。 ・10秒たったら、osに教えてくださいという部分のプログラム。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • タイマーが動作しません

    H8/3052を使っていろいろ動作させようと考えてます、 タイマー割り込みのところで詰まっていますが、タイマー割り込みを使ってLEDを反転するというプログラムです。 結果、LEDが反転しないつまり、タイマー割り込みが動作してないのではないかと考えています。 うちが使いたいタイマーはウオッチドッグタイマです。イエローで、C言語を使っています。 皆様の知識をお借りしたいです。 //20msごとに割り込み、50回の割り込みでLED点灯反転 #include <3048.h> //3048、3052の内部I/O定義 #include <sysio.h> int c; //割り込み回数、外部変数とする //ITUインターバルタイマ割り込み void int_imia0(void) { ITU0.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア c-=1; if(c==0){ P5.DR.BYTE = ~P5.DR.BYTE; //LED出力データを反転 c=50; } } int main(void) { P5.DDR = 0xff; ITU0.TCR.BIT.CCLR = 1; //カウンタクリア要因 ITU0.TCR.BIT.TPSC = 3; //タイマプリスケーラ25MHz/8=3.125MHz ITU0.GRA =62499; //3.125MHz/62,500=50Hz、周期20ms ITU0.TIER.BIT.IMIEA = 1; //IMFAフラグによる割り込み許可 ITU.TSTR.BIT.STR0 = 1; //タイマスタート P5.DR.BYTE = 0xff; //LED出力データ初期値 c=50; //割り込み回数 _ei(); //割り込み許可 while (1); //何もしない } 動作できない為、ご指摘よろしくお願いします。

  • PIC タイマー0の使い方

    PIC16F886を触り始めたのですが、タイマー割り込みで苦戦しています。 タイマー割り込みを使ったLEDの点滅の間隔が、自分の思った時間にならないのです。 下に今のプログラムを載せておきます。 私の今の考え方はこうです。 ・内部クロックは4MHzに設定してある ・TMR0のカウントはクロックの1/4らしい→1MHzなので周期は1μsec ・プリスケーラは1:128に設定→128μsecでTMR0がカウントアップ ・TMR0の初期値を61に設定→195回のカウントアップでT0IF=1 ・128μsec*195μsec=2496μsec≒0.025msec←タイマー割り込み ・40回カウントすると1秒 と、1秒ごとにLEDのON,OFFが切り替わるはずだと考えているのですが、書き込んで計測したところ、約0.8秒でon,offを繰り返しています。 私の考え方やプログラムに間違いがあるのでしょうか? もしくはPICがハード的に壊れているのでしょうか?(picに5Vをかけても動かず、mainが実行中に点灯するLED(この時点では点いていない)の端子の両端を指で触ると何故か動き出します。) 以下プログラムです。(注釈などは省いたので見難いかもしれません) #include <stdio.h> #include <stdlib.h> #include <xc.h> #include <pic.h> #pragma config FOSC = INTRC_NOCLKOUT #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = ON #pragma config IESO = OFF #pragma config FCMEN = OFF #pragma config LVP = ON void interrupt tc_int(void); volatile unsigned int cnt = 0; volatile unsigned int cnt1 = 0; #define sw RB0 #define led RA0 #define led2 RA1 #define led3 RA2 #define _XTAL_FREQ 4000000 void init(void) //初期設定 { OSCCON=0b01101000; // 内部クロック設定 4MHz TRISA=0b00000000; TRISB=0b00000000; TRISC=0b00000000; ANSEL=0x00; /* 割り込み初期設定 */ GIE = 1; // すべての割り込みを許可 T0IE = 0; // タイマー割り込みを禁止 T0CS = 0; // TIMAR0モジュールをタイマーとして使用 PSA = 0; // プリスケーラをTIMER0モジュール用にセット OPTION_REG |= 0x06; // CPUクロックを128分周 TMR0 = 61; // カウンタ値をリセット T0IE = 1; // タイマー割り込みを許可 T0IF = 0; // 割り込みフラグをクリア } int main(void) { init(); sw=1; led=1; led3=0; cnt1=0; LEDflg=0; while(1) { if(cnt1>=10){ led3=~led3; cnt1=0; } } } void interrupt tc_int(void){ // 割り込みハンドラ if(T0IF == 1){ cnt++; TMR0=61; T0IF = 0; // 割り込みフラグをクリア if(cnt>=40){ cnt=0; cnt1++; led2= ~led2; } } }

  • タイマーとスイッチ

    タイマーが10分にセットして、そのタイマーが0分になると「スイッチが切れる」これはどうゆう仕組みになっているのでしょうか?どうして、0分になるとスイッチが切れるのでしょうか?

  • PIC16F628Aのタイマー機能について

    PIC16F628Aでタイマー0とタイマー1を同時に使用することは可能でしょうか?カウント時間は異なりますがどちらも終了時に割り込みを発生させます。使用可能な場合なにか注意点とかあるのでしょうか?よろしくお願いします。

  • タイマーについて

    又お世話になります。 ルーレットをプログラムした際、ストップボタンを押すと止まりますが、パチスロのように直ぐに止まらずに、パチンコのリーチがかかったような止まり方をしたいのですが、タイマー?を使ってプログラムすると出来るそうですが、よくわからないので・・。 すみませんがよろしくお願いします。

  • モータータイマーってなんですか?

    有接点シーケンスでつかわれてるモータータイマーの役割や仕組みをどなたか教えてください

  • タイマーに時差をつけたい

    こんにちは。 タイマーAとタイマーBがあって、タイマーA実行の後 時差(例:0.1秒)でタイマーBを動かす方法を教えてください。 よろしくお願いします。

  • 【PICマイコン】AD変換中にタイマー割り込みしたらAD変換はやりなおしですか?

    PICでデジタル時計を作っているんですが AD変換を使ってみようと思って調べたら AD変換中は他の処理は出来ないような事が書いてありました。 メインの処理は時計のカウントなのでタイマー割り込みを止めたら時間が狂ってしまいます。 AD変換中にタイマー割り込みが発生して変換処理を中断してしまったらAD変換は始めからやり直しになってしまうんでしょうか?

  • タイマーを探しています

    仕事で、ハードな条件で使えるキッチンタイマーを探しています。 なかなか必要な条件を満たすものが見つからないので、 質問します。 条件は、以下の5つです (1)防水であること (2)誤動作防止機能が付いていること (3)アラームの音量が大きいこと (4)8時間程度の設定ができること (5)2つか3つの時間を設定できること 携帯のアラーム機能で、OKなのですが、 汗でぬれたり、汚れも付きやすいので、 仕事中には携帯を身につけておきたくないのです。 よろしくお願いします。

  • パソコンで使うタイマー

    今、パソコンのタイマーがたくさんフリーで出ています。 自分も、プログラムの練習で、タイマーを作ってみようと思いました。 『普通のタイマーにどんな機能をつければもっと便利になるか』 ということを考えていろいろ考えてみたのですが、なかなかいいアイデアが浮かびません。 皆様がもし、パソコンタイマーを使うとすると、どのような機能がついていてほしいですか。 また、今公開されているソフトで、『これは使いやすい!』っと思ったものがありましたら、教えていただけないでしょうか。

このQ&Aのポイント
  • 男性恐怖症の好きな人の繊細さを知る
  • 彼女のおかげで高校二年生が楽しいものになりました
  • 好きな人の関わり方を教えて貰えると嬉しいです
回答を見る