/********************************************************/
/*           複合走行(競技会用)   プログラム    */
/*              2003.12.12     by AND          */
/********************************************************/
/*************************************************
ロボットを(1)前進約30cm,(2)90度時計まわり,(3)前進約30cm,
(4)90度反時計まわり,(5)後退30cmさせます.
*************************************************/
/*************************************************/

#include <pic.h>
__CONFIG(0xFFFA); /* 初期設定 CP:OFF,PT:OFF,WT:OFF,HS */
#define T_MAX 30 /* 300msec周期でモータをON,OFFする */
#define COUNT 3 /* 繰り返し回数 */

wait0(short k)
{
/* 約(k×0.01)秒 のウェイト*/
	short i;
	short j; /* 16 Bit 変数の宣言 */
   	for(j=0;j<k;j++){ /* (k×3000)回の繰り返し */
		for(i=0;i<3000;i++){ /* 時間待ち */
		}
	}
}
cw(void){
	int i;
	for(i=0;i<25;i++){
		PORTB=0x24; /*left backward, right forward*/
		wait0(5);
	}
}

ccw(void){
	int i;
	for(i=0;i<32;i++){
		PORTB=0x18; /*left forward, right backward*/
		wait0(5);
	}
}

front(void){
	int i;
	for(i=0;i<60;i++){
		PORTB=0x14; /*left forward, right forward*/
		wait0(5);
	}
}

back(void){
	int i;
	for(i=0;i<50;i++){
		PORTB=0x28; /*left backward, right backward*/
		wait0(5);
	}
}

main(void)
{
	short i,j;  /* 16ビット整数型変数i,jの宣言 */
	unsigned char x;  /* 符号なし8ビット整数型変数xの宣言 */
	x=0x01;  /* xに2進数の00000001を代入 */

	TRISA = 0xFE; /* A 0:output, 1,2,3,4:input */
	TRISB = 0x00; /* B0,1,2,3,4,5,6,7:output */

	PORTB=0x00; /* モータ OFF */
	for(i=0;i<3;i++){
		PORTA=0x00; /* LED消灯 */
		wait0(20); /* 0.2秒ウェイト */
		PORTA=0x01;    /* LED点灯 */
		wait0(20); /* 0.2秒ウェイト */
	}
	PORTA=0x00; /* LED消灯 */

	while(RA4!=0){
	}
/******* main program start *******/

	front();       /* 前進30cm */
	wait0(100);
	cw();          /* 時計回り90度 */
	wait0(100);
	front();       /* 前進30cm */
	wait0(100);
	ccw();         /* 反時計回り90度 */
	wait0(100);
	back();        /* バック30cm */
	wait0(100);

/******* main program stop *******/
}

=======================================