STEAM教育ならぬ、STEAMライフ Science + Technology + Engineering + Art + Mathematics
旧『“PLASSON”自作二足歩行ロボット Personal Low-tech ASSembly Of Nisokuhokou 』

割り込みプログラミング

| コメント(0)

二足歩行ロボット製作超入門

さて、モーター8個をどう動かすかなんて先走るのはこのへんまでにして、地道に手を動かすことに戻ります。

超入門本のp.108の「interrupt.c」です。割り込みで1msecごとにカウンタに1を加えて1000まできたら「0」を表示します。

さて、例によって、GDLのバージョンの違い(超入門本はVer.1.5、私のはVer.1.7)よる修正点があります。

  1. 超入門本でのインクルードファイルの「signal.h」は、新バージョンでは不要(「interrupt.h」に含まれたらしいです)。
    ちなみに「signal.h」をいれたままだとビルド時に
    warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>.
    という表示が出ます。でも、ビルド自体は「成功」で、そのままマイコンへ書き込んでも正常に動きました。
  2. そのほか、http://www.robotsfx.com/robot/ATWALKER.html 参照

ソースは、、、

*****

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <rs.h>

int count = 0;
char txb[10],rxb[10];

/*-------- タイマカウンタ 0 比較マッチ割り込み --------*/
SIGNAL(SIG_OUTPUT_COMPARE0)
{
  TCNT0 = 0X00;     /* カウンタの値をゼロにクリア */
  count++;          /* 割り込みプログラム */
  if(count == 1000)
  {
    rs_printf("0");
    count = 0;
  }
}

/*-------- メイン --------*/
void main(void)
{
  rs_init (br57600,txb,sizeof(txb),rxb,sizeof(rxb));
  SREG |= (1<<SREG_I);              /* 割り込み許可 */
  TIMSK |= (1<<OCIE0);
  OCR0 = 250;                       /* 比較レジスタに数値セット */
  TCCR0 |= (1<<CS01) | (1<<CS00);   /* 分周タイマ/カウンタをスタート */
  rs_printf("START");
  while(1){}
}

*****

コメントする

この記事について

このページは、SLANが2006年10月15日 15:28に書いた記事です。

ひとつ前の記事は「低頭ネジ発注」です。

次の記事は「仕事中(待ち)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。