#include<3694.h> char txData[12],rxData[4]; //送受信データ格納用配列 /* Initial SCI3 */ void initSCI3 () { IO.PMR1.BIT.TXD = 1; //P22端子をTXDに選択 SCI3.SCR3.BIT.TE = 1; //送信許可 SCI3.SCR3.BIT.RE = 1; //受信許可,P21端子をRXDに選択 SCI3.SCR3.BIT.CKE = 0; //クロックソースを内部ボーレートジェネレータへ SCI3.SMR.BYTE = 0x00; //調歩同期、8ビット、パリティなし、ストップ1、クロックn=0 SCI3.BRR = 64; //ボーレートを9600bpsに設定 SCI3.SSR.BIT.TDRE = 0; //送信バッファクリア } /* Send a Data */ void sendSCI3_DATA (char c) { while (SCI3.SSR.BIT.TDRE == 0); //送信バッファが空いてなかったら待つ SCI3.TDR = c; //送信バッファにセット } /*Com95*/ void com95(int ch, long startSpd, long accStep, long maxSpd) { int j; txData[0] = 255; //シンクロバイト txData[1] = 20; //ID txData[2] = 8; //バイト長 txData[3] = 95; //命令 txData[4] = ch; //ch 0:Ach 1:Bch txData[5] = (unsigned char)(startSpd>>8); //開始速度上位 txData[6] = (unsigned char)(startSpd & 0x00FF); //開始速度下位 txData[7] = (unsigned char)(accStep>>8); //加速ステップ数上位 txData[8] = (unsigned char)(accStep & 0x00FF); //加速ステップ数下位 txData[9] = (unsigned char)(maxSpd>>8); //上限速度上位 txData[10] = (unsigned char)(maxSpd & 0x00FF); //上限速度下位 for (j = 0; j < 11; j++){ //送信 sendSCI3_DATA(txData[j]); } } /*Com105*/ void com105(int ch, int mode, int dir, long step) { int j; txData[0] = 255; //シンクロバイト txData[1] = 20; //ID txData[2] = 6; //バイト長 txData[3] = 105; //命令 txData[4] = ch; //ch 0:Ach 1:Bch txData[5] = mode; //モード 1:ハーフステップ 2:2相励起 3:マイクロステップ txData[6] = dir; //方向 0:停止 1:CW 2:CCW txData[7] = (unsigned char)(step>>8); //ステップ数上位 txData[8] = (unsigned char)(step & 0x00FF); //ステップ数下位 for (j = 0; j < 9; j++){ //送信 sendSCI3_DATA(txData[j]); } } /*----------------------------------------------------------------------------------------*/ /* 引数x1msウェイト */ /* (CPUクロック20MHz、1/128クロックで1カウントモード、156倍で19968クロック=約1mS) */ /*----------------------------------------------------------------------------------------*/ void wait (int spd) { TV.TCRV0.BYTE = 0x03; //下の行と合わせて1/128クロックで1カウントモード TV.TCRV1.BYTE = 0X01; TV.TCNTV = 0; //カウンタクリア while (spd){ /*1mSウェイト*/ while(TV.TCNTV < 156); TV.TCNTV = 0; //カウンタクリア spd--; } } void main (void) { initSCI3(); com95(0,100,20,500); //AchのSTM加速設定 while(1){ com105(0,2,1,1000); //Achを2相励起でCW方向に1000ステップ実行 wait(5000); //5秒間待つ } } // (c)2007.浅草ギ研