###前提・実現したいこと
現在dspicにプログラムをしております。
uartを用いて
①'1'が受信されたらOnePoint()という関数が100msごとにループで動作し続け
②'2'が受信されたらループが終了し、再度'1'が受信されるまで待機する
プログラムを作成したいのですが作り方が分かりません。
###発生している問題・エラーメッセージ
現在、'1'が受信されたらOnePoint()関数が1回動作することはできております。しかし、その場合OnePoint()関数を動作させるために毎回'1'を受信する必要があり実現したいプログラムと異なっております。
while(1)
{
while(!DataRdyUART1());
cmnd = ReadUART1();
///受信コマンドの処理
switch(cmnd)
{
case'1':
///1point measure
OnePoint();
break;
case'2': break; default : break; }
}
###該当のソースコード
/*** メイン関数 ***/
void main(void)
{
/// UART初期設定
OpenUART1(UMODEValue,USTAValue,ubrg);
IPC2bits.U1TXIP=5;
IPC2bits.U1RXIP=6;
/// PORT初期設定
ADPCFG=0xFFFF;//アナログなし
TRISB=0x0007;//0,1,2入力用,他出力用
TRISF=0x0000;//RF(2,3,6)SPI出力用
TRISD=0x0000;//RD8-SPI出力,RD9-INT0入力用
TRISC=0x1000;//UARTRX用(RC13=High)
PORTB=0xFFFF;//all LED off
PORTF=0xFFFF;//RF3=High
PORTD=0xFFFF;//RD8=High
/// 初期動作
LEDON(); delay_ms(200);
LEDOFF(); delay_ms(200);
LEDON(); delay_ms(200);
LEDOFF(); delay_ms(200);
LEDON(); delay_ms(200);
LEDOFF();
/// Open SPI クロック 30MHz/1=30MHz(33ns)
OpenSPI1(SPICONValue,SPISTATValue);
INTCON1bits.NSTDIS=1;//多重割り込み禁止
SPI_CS=1;
dds_CTRL=1;
/** DDSの初期設定 **/
DDSset();
dds_Int=0;
CloseSPI1();
///初期ch定義
TX1();TX=1;
/// ADC初期設定
OpenADC12(Config1,Config2,Config3,ConfigPort,ConfigScan);
SetChanADC12(Channel0);
///DDS tart
//タイマ2設定,OPEN
Fs2=240000;
SetTime2 = ((Fcy/Fs2)+1);//Fcy = 30MHz
OpenTimer2(T2_ON & T2_GATE_OFF & T2_PS_1_1 & T2_SOURCE_INT , SetTime2);
ConfigIntTimer2(T2_INT_PRIOR_3 & T2_INT_ON);
while(1)
{
while(!DataRdyUART1());
cmnd = ReadUART1();
///受信コマンドの処理
switch(cmnd)
{
case'1':
///1point measure OnePoint(); break; case'2': break; default : break; }
}
}
###試したこと
uartを割り込み処理する必要があるような気がするのですが、dspic初心者でよく分かっていないのが現状です。
###補足情報(言語/FW/ツール等のバージョンなど)
言語:c言語
マイコン:dspic
ツール:MPLAB IDE
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/13 08:05
2017/10/13 08:08
2017/10/13 10:10
2017/10/16 23:35
2017/10/17 02:48