#include <12F675.h> #fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT #use delay(clock=4000000) #use rs232(baud=9600,xmit=PIN_A0,rcv=PIN_A3,parity=N,bits=8) /* (上の行の説明)GP0をシリアル通信の送信、GP3を受信に設定。 */ /* [255][ID][長(4)][Command(2)][S-Number][S-Position][Speed] */ unsigned char mov_data[7] = {255, 3, 4, 2, 0, 127, 5}; /* [255][ID][長(2)][Command(22)][S-Number] */ unsigned char cap_data[5] = {255, 3, 2, 22, 0}; /* とりあえずセット */ /* 結果 */ unsigned char rcv_data[6]; int cnt; /*-----------------------------------------------*/ /* 指定したサーボを動かす命令発行 */ /*-----------------------------------------------*/ void S_Move(unsigned char s_number, unsigned char s_position) { mov_data[4] = s_number; mov_data[5] = s_position; for(cnt = 0; cnt < 7; cnt++){ putc(mov_data[cnt]); } } /*-----------------------------------------------*/ /* 指定したサーボのポジションキャプチャ命令発行 */ /*-----------------------------------------------*/ void P_Cap(unsigned char servo_number) { cap_data[4] = servo_number; for (cnt = 0; cnt < 5; cnt++){ putc(cap_data[cnt]); } } /*----------------------------------------------*/ /* main */ /*----------------------------------------------*/ void main(void) { set_tris_a(0x08); /* IO setting */ delay_ms(1000); /* wait for RSC start up */ while(1){ /* main loop */ P_Cap(0); /* #0 Position capture */ for(cnt=0; cnt<6; cnt++){ /* Recieve data (6 byte) */ rcv_data[cnt] = getc(); } S_Move(1,rcv_data[5]); /* #1 Move as #0 position*/ } }