さて、モーター8個をどう動かすかなんて先走るのはこのへんまでにして、地道に手を動かすことに戻ります。
超入門本のp.108の「interrupt.c」です。割り込みで1msecごとにカウンタに1を加えて1000まできたら「0」を表示します。
さて、例によって、GDLのバージョンの違い(超入門本はVer.1.5、私のはVer.1.7)よる修正点があります。
- 超入門本でのインクルードファイルの「signal.h」は、新バージョンでは不要(「interrupt.h」に含まれたらしいです)。
ちなみに「signal.h」をいれたままだとビルド時に
warning: #warning "This header file is obsolete. Use <avr/interrupt.h>.
という表示が出ます。でも、ビルド自体は「成功」で、そのままマイコンへ書き込んでも正常に動きました。 - そのほか、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){}
}
*****
コメントする