• 締切済み

超音波センサについて教えてください

超音波センサについてなのですが、パラレルポートを使って制御しようとしているのですがなかなかうまくいきません。 浅草ギ研さんからでているPING)))を使っているのですが、サンプルプログラムがPICを使用してのもので、 トリガをうってやれば、350マイクロ秒ホールドオフした後、音波を出して帰ってきた時の時間で距離を出すというものです。 プログラム全文 #include <12F675.h> #fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT //内部4MHzクロック指定 #use delay(clock=4000000) //delayを使えるようにする #use rs232(baud=9600,xmit=PIN_A5,rcv=PIN_A3,parity=N,bits=8) //シリアル設定 //(上の行説明)GP5を送信、GP3を受信に設定。 //12F675の場合は初期値がADCモードになっているので、デジタル入力を使う場合は事前にADCなどを切る必要がある。 //16F84などのPICはこの処理は不要。(初期値がデジタルIOだったり、ADCが無かったりする。) //コンパレータとADCを切るために特殊レジスタを操作します。とりあえずアドレスを割り当て。(アドレスはデータシートに書いてある) #byte CMCON=0x19 #byte GPIO=0x05 #byte ANSEL=0x9F void main(void){  set_tris_a(0x00); output_low(PIN_A0); //GP0をLowに(とりあえず。) //コンパレータなどを切って、デジタルIOピンにする処理 GPIO=0x00; //以下3行はデジタルIOに切り替える手順 CMCON=0x07; ANSEL=0x00; //タイマ0を設定(内部クロック使用の場合は4クロックで1カウントなので注意) setup_timer_0(RTCC_INTERNAL | RTCC_DIV_128); delay_ms(1000); //PINGが正常に立ち上がるまで待つ printf("START\r\n"); while(1){ set_tris_a(0x00); //GP0を出力に //トリガパルス出力 output_high(PIN_A0); //トリガパルス立ち上げ delay_us(5); output_low(PIN_A0); //トリガパルス立ち下げ //GP0を入力に切り替え set_tris_a(0x01); //GP0を入力に //パルス幅測定 while (!(input(PIN_A0))); //パルス立ち上がりまで待つ set_timer0(0); //タイマーをリセット(カウント開始) while (input(PIN_A0)); //パルスの立下りまで待つ printf("Dist=%u\r\n\r\n",get_timer0()); //結果出力 delay_ms(500); //0.5mSウェイト } } こんな感じです。 全体的にわからないんですが、 特に while (!(input(PIN_A0))); //パルス立ち上がりまで待つ set_timer0(0); //タイマーをリセット(カウント開始) while (input(PIN_A0)); //パルスの立下りまで待つ この部分のlinuxのC言語への書き換え方がわからなくて苦労しています。 どなたか教えてもらえないでしょうか? OSはVine linuxです。言語はC言語です。

みんなの回答

  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

PICで処理しているプログラムをLinuxで実現しようというのはかなり無理なこと言っていると思います。というのは、PICのプログラムはPICが持っている周辺回路のタイマを使って時間を管理しているためマイクロ秒単位やミリ秒単位の時間を待つのに問題ありませんが、Linuxの時間管理はもっと粗い精度しか期待できないからです。 参考 http://d.hatena.ne.jp/naoya/20080122/1200960926 特に、トリガをかけてから音が返ってくるまでの時間で距離を測りたいわけですから、時間の管理が正確にできないのは致命的です。Linuxで実現するのはあきらめて、PIC(または使い方の分かるマイコン)を使うことをお勧めします。

sakisan907
質問者

お礼

ありがとうございます。 確かにgettimeofdayでやっていたのですが、うまくいってませんでした。 やりかたを変えて挑戦したいと思います。 貴重なご意見ありがとうございます。

関連するQ&A

  • 思い通りに動かせず、困っています

    ZIG100BeeモジュールとPIC12F675を2つずつ使って回路を作ろうとしているのですが、 ZIGBeeがどんなプログラムで動くのか、検索しても全く解りません。 送信側PIC 4ピン→1kΩ抵抗でプルアップ+スイッチ 7ピン→ZIGBeeTxDに接続 6ピン→ZIGBeeRxDに接続 受信側PIC 4ピン→ZIGBeeTxDに接続 5ピン→ZIGBeeRxDに接続 7ピン→LEDアノード側に接続 6ピン→ブザー+側に接続 このような回路で、送信側スイッチを押すと受信側LEDが点灯、ブザーが鳴るようにしたいのです。 送信側プログラム #include<12F675.h> #byte GPIO =0x09 #byte TRISTO =0x85 #byte CMCON = 0x19 #byte ANSEL =0x9F #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,NOBROWNOUT #use delay(clock=4000000) #use rs232(BAUD=9600,xmit=PIN_A1,rcv=PIN_A0,bits=8) #use fast_io(a) void main() { set_tris_a(0x09); delay_ms(50); while(1){ if(input(PIN_A3)==0x00){ putc(0x00); delay_ms(50); output_A(0x09); } } } 受信側プログラム #include<12f675.h> #byte GPIO =0x05 #byte TRISTO =0x85 #byte CMCON = 0x19 #byte ANSEL = 0x9F #fuses INTRC_IO, NOWDT, PUT, NOPROTECT,NOMCLR,NOBROWNOUT #use delay(clock = 4000000) #use rs232(BAUD = 9600, XMIT = PIN_A2, RCV = PIN_A3,bits = 8) #use fast_io(A) void main() { set_tris_A(0x08); delay_ms(50); while(1) { if(input(PIN_A3)== 0x00) { if(kbhit()) { delay_ms(500); output_high(PIN_A0); delay_ms(500); output_low(PIN_A1); } } } } このようなプログラムにしたのですが、受信側が送信側の操作に反応せず、 電源プラグを挿しただけで動作してしまいました。 すみませんが、誰か解る方がいたら教えてくれませんか?

  • プロポからのパルス値解析ソースのコンパイルエラー(PICマイコン)

    プロポからのパルス値解析ソースのコンパイルエラー(PICマイコン) いつもこちらでお世話になっております。 さて下記ソースコードはプロポの1Chと2Chからの出力パルスを ポートA0、A1ピンより、読み込みPC画面でその値を 確認する為のコードのつもりですが、 コンパイルが成功出来ずエラー行の表示はないのですが、 HEXファイルが作成しないので、大変困っております。 使用コンパイラーはCCS社C(PCM版)、 PICは16F873Aを使用してます。 以下に、コードを記述します。 #include <16f873a.h> ====プリプロセッサ部分の記述は省略================= この部分の設定は既に、1Chのみ数値確認で実証済みを記述。 =============================================== void main() { int data,data1; set_tris_a(0x0f); setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); while(1) { while (input(PIN_A0)); while (!(input(PIN_A0))); set_timer0(0); while (input(PIN_A0)); data = get_timer0(); printf("VALUE = %d\r\n",data); delay_ms(500); while (input(PIN_A1)); while (!(input(PIN_A1))); set_timer0(0); while (input(PIN_A1)); data1 = get_timer0(); printf("VALUE = %d\r\n",data1); delay_ms(500); } } 以上、while(1)コード内に構成上の問題があるのではと 思われますが何処にコンパイル上、無理が生じるのでしょうか? また、仮にこのコードでコンパイルが成功したとしても、 2つのチャンネルからの信号を読取る事が可能でしょうか? 目に留めて下さった方で、ご教示頂けるなら大変幸いです。 どうか宜しくお願いいたします。

  • MPLABでのビルドがうまくいかない

    C、picともに初心者です。 いまだにビルドがうまくいかず、書き込みができなくて困っています。 以下のようなソースです ・・・・・・・・・・・・・・・・・・・・・・・・・ #include <12f675.h> #fuses INTRC_IO,NOWDT,NOPROTECT,BROWNOUT,NOMCLR //#device ADC = 10 #use delay(CLOCK = 4000000) #use fast_io(A) #define GP0 PIN_A0 #define GP1 PIN_A1 #define GP2 PIN_A2 #define GP3 PIN_A3 #define GP4 PIN_A4 #define GP5 PIN_A5 #define DAN 255 void main() { set_tris_A(0x04); setup_adc(ADC_OFF); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); setup_counters(RTCC_INTERNAL,RTCC_DIV_32); setup_timer_1(T1_DISABLED); while(1) { int i,j,k; for(i=0;i<DAN;i++) { for(k=0;k<DAN-i;k++) { for(j=0;j<i;j++) { output_a(0x12); delay_us(10); } for(j=0;j<DAN-i;j++) { output_a(0x00); delay_us(10); } } } } } ・・・・・・・・・・・・・・・・・・・・・・・・・ エラーメッセージは以下のとおりです。 Clean: Deleting intermediary and output files. Clean operation failed. BUILD FAILED: Fri Aug 01 13:19:45 2008 簡単な事のように思いますが、なぜうまくいかないのかわかりません。 よろしければ、ご教授ください。。

  • C言語のPICプログラミングなんですが、

    C言語のPICプログラミングなんですが、 これのどこがおかしいか教えてください。 if(input(PIN_B1)) { while(input(PIN_B2) == 0) { output_high(PIN_B7); //前進後進パルス出力 delay_us(50); //変換待ち output_low(PIN_B7); delay_us(16000); //共通遅延16000us } break; } if(input(PIN_B1)) { while(input(PIN_B2) == 0) { output_high(PIN_B7); //前進後進パルス出力 delay_us(50); //変換待ち output_low(PIN_B7); delay_us(16000); //共通遅延16000us } break; }

  • ニキシー管時計の自作について

    ニキシー管時計を自作しているのですか、スイッチ入力のプログラムが分かりません。 #include <16f1938.h> #fuses INTRC_IO,NOWDT,NOPROTECT,NOCPD,NOMCLR,NOPUT,NOBROWNOUT,NOIESO #use delay(clock=16MHZ) // クロック周波数は16MHz #byte RA = 0x0c //RAをポートAのアドレス0Ch番地に設定 #bit MODE_SW = RA.0 #bit UP_SW = RA.1 #bit DOWN_SW = RA.2 #bit NIXI_8 = RA.6 #bit NIXI_9 = RA.7 #byte RB = 0x0d //RBをポートBのアドレス0Dh番地に設定 #byte RC = 0x0e //RCをポートCのアドレス0Eh番地に設定 void io_init(void); // i/o設定関数 signed int sec=56,min=34,hour=12; void disp_nixi(int v); int flag=0; /*-------------------------------------- timer0割り込み 1ms間隔 ---------------------------------------*/ #INT_TIMER0 void timer0(void) { static signed int flag=0; static signed long m_sec=0;//msカウンタ set_timer0(131); //256-125 =131 125* 8us = 1000us //全て消灯 RB=0x00; disp_nixi(10); delay_us(10); m_sec++; if(m_sec>1000){ sec++; m_sec=0; } if(sec>60){ min++; sec=0; } if(min>60){ hour++; min=0; } if(hour>=24){ hour=0; } if(flag<6)flag++; else flag=0; switch(flag){ case 0: disp_nixi(sec%10); RB=0x01;//1桁ON break; case 1: disp_nixi(sec/10); RB=0x02;//2桁ON //RB=0x02;//2桁ON break; case 2: disp_nixi(min%10); RB=0x04;//3桁ON break; case 3: disp_nixi(min/10); RB=0x08;//4桁ON break; case 4: disp_nixi(hour%10); RB=0x10;//5桁ON break; case 5: disp_nixi(hour/10); RB=0x20;//6桁ON break; }//end switch } // end timer0(void) void main(void) { long int flag=0,i; io_init(); while(1){ //ここにプログラムを書きたいです }// end while() } // end main(void) void io_init(void){ setup_oscillator(OSC_16MHZ); // 内部クロックを16MHzに設定 RA=0x00; RB=0x00; RC=0x00; setup_adc_ports(NO_ANALOGS); // ポートAはデジタルI/Oに設定 //timer0の設定 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_32); // 4ck 1命令 4/16M = 0.25us 0.25us*32 : 1ct = 8us タイマ0のモード設定 set_timer0(131); //256-125 =131 125* 8us = 1000us // TRIS_aの設定 A0~A7:入力 1111 1111 A2:sw2 A1:sw1 A1:sw1 set_tris_a(0x3f); // TRIS_bの設定 set_tris_b(0x00); //H-side ドライブ0~5 // TRIS_cの設定 set_tris_c(0x00); //7~4:free  C3~0:L-side ドライブ // TRIS_eの設定 set_tris_e(0xff); enable_interrupts(INT_TIMER0);//tmr0割り込み許可 enable_interrupts(GLOBAL);//グローバル割込み許可 } void disp_nixi(int v){ switch(v){ case 0: NIXI_8 =0; NIXI_9 =0; RC=0b10000000; break; case 1: NIXI_8 =0; NIXI_9 =1; RC=0b00000000; break; case 2: NIXI_8 =0; NIXI_9 =0; RC=0b00010000; break; case 3: NIXI_8 =1; NIXI_9 =0; RC=0b00000000; break; case 4: NIXI_8 =0; NIXI_9 =0; RC=0b00000010; break; case 5: NIXI_8 =0; NIXI_9 =0; RC=0b00000100; break; case 6: NIXI_8 =0; NIXI_9 =0; RC=0b00001000; break; case 7: NIXI_8 =0; NIXI_9 =0; RC=0b00000001; break; case 8: NIXI_8 =0; NIXI_9 =0; RC=0b01000000; break; case 9: NIXI_8 =0; NIXI_9 =0; RC=0b00100000; break; default : NIXI_8 =0; NIXI_9 =0; RC=0b00000000; } } ↑のプログラムのwhile文部分にプログラムを書きたいのですが、 どのようなプログラムを書いたらよいのでしょうか。 教えていただけると助かります。

  • PICのA/D変換の入力が何故か0Vになってしまいます・・・

    現在、PIC12f675を用いて下記のようなことをしたいと検討しているのですが、 中々思った通りに動いてくれません。 どなたか分かる方がいらっっしゃいましたらアドバイスお願い出来ないでしょうか? 「開発環境」 ・CCSのCコンパイラを使用 ・PICは12f675 「内容」 アナログ入力端子に任意の電圧を加えて、RS232CでPC上にその電圧を表示する。 現在、アナログ入力端子(AN0)に電源電圧から分圧して0.5Vや1Vなどの電圧を加えているのですが、 何故か入力端子の電圧をテスターで測定すると0Vとなり、PC上でもやはり0Vと表示されてしまいます。 何故、任意の電圧を加えても全て0Vとなってしまうのかが分かりません。 おそらくプログラム上でのミスがあると思うのですが・・・ 検討中のプログラムを下記に書きます。 ***************************************************** ///// 初期設定 ///// #include <12f675.h> #device ADC=10 #fuses INTRC_IO, NOWDT, PUT, NOPROTECT, BROWNOUT /////RS232C使用宣言///// #use delay(CLOCK = 4000000) #use rs232(BAUD = 9600, XMIT = PIN_A2, RCV = PIN_A1) //GP1=受信 GP2=送信 //// メイン関数 void main() { // A/D初期設定 float data; setup_adc_ports(AN0_ANALOG); //AN0をアナログ設定 setup_adc(ADC_CLOCK_INTERNAL); //ADCのクロック設定(内部発振) set_tris_a(0); output_A(0); while(1) { set_adc_channel(0); delay_us(50); data = read_adc(); data = (data * 3.0) / 1024; printf("電圧 = %1.3fV\r\n",data); } } ***************************************************** 申し訳ありませんが、アドバイスお願いします。

  • PICでのプログラミングについて教えて下さい。

    現在電圧計を製作していて4桁の7セグダイナミック点灯で行き詰っております(超初心者です)。 PICは16F873Aを使用、コンパイラはCCS、書き込みはピックライタ、あとシリアルデバッカを使用しています。 外部から電圧をかけそれをAD変換し、AD変換結果(0~5V)を7セグに表示させようとしています。 一応今の状態でも電圧表示はできていることはできているのですが一桁目から4桁目まで目で追えるくらい遅いスピードでこれを改善したいです。ソースは下記のソースを製作しました。この状態で3日間悩んでおります...知恵をお貸しいただけないでしょうか。 よろしくお願いします。 #include <16F873a.h> #device ADC=10 //A/D変換10bitモード #use fast_io(A) /* TRISレジスタの設定が必要 */ #use fast_io(B) #use fast_io(C) #use delay (clock=10000000) //10MHz #use RS232( BAUD = 9600, XMIT = PIN_C6, RCV = PIN_C7, PARITY = N, BITS = 8 ) #fuses HS,NOWDT,PUT,NOPROTECT,NOBROWNOUT,NOLVP #define VOLTAGE PIN_A0 // (in) #define CORRENT PIN_A1 // (in) #define VREF1 PIN_A2 // (in) #define VREF2 PIN_A3 // (in) #define RESERVE1 PIN_A4 // (out) #define RESERVE2 PIN_A5 // (out) #define LED_DP PIN_B0 // (out) #define LED_A PIN_B1 // (out) #define LED_B PIN_B2 // (out) #define LED_C PIN_B3 // (out) #define LED_D PIN_B4 // (out) #define LED_E PIN_B5 // (out) #define LED_F PIN_B6 // (out) #define LED_G PIN_B7 // (out) #define DIG_0 PIN_C0 // (out) #define DIG_1 PIN_C1 // (out) #define DIG_2 PIN_C2 // (out) #define DIG_3 PIN_C3 // (out) #define INI_TRIS_A_VAL 0x0F // 7:x 6:x 5:out 4:out 3in 2:in 1:in 0:in #define INI_TRIS_B_VAL 0x00 // 7:out 6:out 5:out 4:out 3out 2:out 1:out 0:out #define INI_TRIS_C_VAL 0x80 // 7:in 6:out 5:out 4:out 3:out 2:out 1:out 0:out int ct;//数字の更新間隔 long val;//表示する数字 int digit;//表示する桁 //表示パターン int segment_data[]={0x81,0xF3,0x49,0x61,0x33,0x25,0x05,0xF1,0x01,0x31}; char st[4]; void main() { float ata1,data2,data3,data4; long data5; long val; SET_TRIS_A( INI_TRIS_A_VAL ); SET_TRIS_B( INI_TRIS_B_VAL ); SET_TRIS_C( INI_TRIS_C_VAL ); setup_adc_ports(AN0_AN1_VSS_VREF); setup_adc(ADC_CLOCK_DIV_32); //Fosc/32 最高速度 digit=0; ct=1;//数字を更新する周期 val=0;//表示する値 while(1) { output_low(RESERVE2); //動作ランプ //////////////////////電圧測定///////////////////////////////// set_adc_channel(0); delay_us(50); //アクイジションタイム待ち(マイクロ秒) data1 = read_adc(); //AD変換結果読み込み printf("ADC V %9.3f \r\n", data1 ); //AD変換データ表示 data2 = (data1 * 4.959695) / 1024; //BCDに変換 printf("Volt %6.3f \r\n", data2 ); //変換データ表示 data5 = data2 * 1000 ; //data2を整数に変換 val = data5 ; printf("val %ld \r\n", val); //整数にし表示 /////////////////////7SEG表示////////////////////////////////// ct --; if(ct == 0){//数字の更新 st[3]=val/1000; //4桁目数値取り出し st[2]=val/100-st[3]*10;//3桁目数値取り出し st[1]=val/10-((st[3]*100)+(st[2]*10));//2桁目数値取り出し st[0]=val%10;//あまり val++; if(val==1000) val=0; ct=20; } if(digit== 3){//第4桁の表示 output_b( segment_data[st[3]]); output_bit(DIG_0,1);  //4桁表示開始 output_low(LED_DP);  //小数点表示  delay_us (5); //表示期間(ミリ秒) output_bit(DIG_0,0); //表示を消す output_high(LED_DP); //小数点を消す delay_us(50); //待ち(マイクロ秒) } if(digit== 2){ output_b( segment_data[st[2]]); output_bit(DIG_1,1); delay_ms (5); output_bit(DIG_1,0); delay_us(50); } if(digit== 1){ output_b( segment_data[st[1]]); output_bit(DIG_2,1); delay_ms (5); output_bit(DIG_2,0); delay_us(50); } if(digit == 0){ output_b( segment_data[st[0]]); output_bit(DIG_3,1); delay_ms (5); output_bit(DIG_3,0); delay_us(50); } digit ++;//表示桁を変更 if(digit ==4 ) digit=0; } }

  • PICプログラミングに対する質問

    PIC16F627Aを使い、160KHzの周波数を外部に出力したいのですが、うまくいきません。 仕様はこのようになっています。 セラロックとして10MHzを使っています。(20MHzを使うことも考えている) 電源は5Vです。 開発環境はMPLAB IDEに CCS社Cコンパイラを使っています。 現在のプログラムはこのようになっています。 //////////////////////////////////////////////////////////////////////// //タイマ0を用いて160KHzの周波数を出力する //3.1μsでタイマ0の割り込み //////////////////////////////////////////////////////////////////////// #include<16f627a.h> #fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP  //コンフィグレーションの設定 #use delay(CLOCK = 10000000)      //発振子の周波数10MHz  //delay_ms()の使用 //定数の定義 #byte  PORTA=0x05 #bytePORTB=x06 #byte TMR0 = 0x01 #bit T0IF = 0x0B.2 //タイマ0割り込み処理 #INT_RTCC //タイマ0の割り込み処理関数の宣言 void rtcc_isr(void) { T0IF=0; //タイマ0の割り込みフラグ TMR0=0xF8; //タイマ0の初期値 PORTA^=0x04; //PORTAの出力反転 } //メイン関数 void main(void){ set_tris_a(0xF8); //出力ポートの設定 set_tris_b(0xF7); //出力ポートの設定 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_1);//プリスケーラを使用しない set_timer0(0x0); //TMR0に0x0を書き込む enable_interrupts(INT_RTCC); //タイマ0の割り込み許可 enable_interrupts(GLOBAL); //グローバルの許可 PORTB = 0x7F; //出力 while(1){ //割り込みを待つ delay_ms(1); //1μs } } ///////////////////////////////////////////////////////////////////// このようなプログラムで160KHzの周波数を出力することは可能でしょうか? もし不足の部分や誤っていることがあったら教えてください。

  • C言語でLEDを点灯させるプログラムです

    C言語を使ってLEDを点灯させるプログラムです。 以下のプログラムを変更して、Aポートの入力(下位4ビット) と、Cポートの入力(下位4ビット)を加算した値をBポートに出力しなさい 。 という問題なのですが、加算した値を出力するにはどうプログラムを記述すればいいか 分かりません。教えてください。 また、加算するというのは、たとえばどういうふうにしろ ということなのか、教えてください。 #include<18F452/h> #device HIGH_INTS=TRUE #priority ext,rb #fuses NOOSCSEN,HS,BORV45,NOBROWNOUT,PUT #fuses WDT128,NOWDT #fuses NODEBUG,NOLVP,NOSTVREN #fuses NOPROTECT,NOCPD,NOCPB #fuses NOWRT,NOWRTD,NOWRTB,NOWRTC,NOEBTR,NOEBTRB #use delay (CLOCK=20000000) #use fast_io(A) #use fast_io(B) #use fast_io(C) #use fast_io(D) #use fast_io(E) #byte port_a=0xf80 #byte port_b=0xf81 #byte port_c=0xf82 #byte port_d=0xf83 #byte port_e=0xf84 int i=0,j=0; void main() { if(input(PIN_b4)){output_high(PIN_d4);} else{output_low(PIN_d4);} if(input(PIN_b5)){output_high(PIN_d5);} else{output_low(PIN_d5);} if(input(PIN_b6)){output_high(PIN_d6);} else{output_low(PIN_d6);} if(input(PIN_b7)){output_high(PIN_d7);} else{output_low(PIN_d7);} while(1) { output_c(0b10101010); } }

  • C言語でプログラミングし、PICマイコンでLEDを制御する

    現在PICを使ってLEDを制御する事を勉強しています。 3つのLEDを3秒間隔で点灯させ、それを無限に繰り返すプログラムを考えてみました。LEDは一つのポートに一つのLEDを割り振るのではなく、ICを使って制御しています。 これを発展させ、待ち時間の3秒間にRA2ポートに入力があるとLEDの点灯をその場所で停止させ、もう一度RA2ポートに入力するとループが再開するといった内容にしようと考えていますが、調べてもどうすればいいのか分かりません、分かる方は教えて頂けないでしょうか # include <16f84a.h> # fuses HS, NOWDT, NOPROTECT # use delay(clock=20000000) int flag, sec, count; main() //main関数の開始宣言 { set_tris_a(0x10); set_tris_b(0x10); #use fast_io(a) //port_aの高速処理を行う設定 #use fast_io(b) //port_bの高速処理を行う設定 while(1){ //無限ループのwhile文の宣言 output_low(PIN_A0); //RA0の出力 output_low(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED1が点灯 delay_ms( 3000 ) ; //3秒待つ   output_high(PIN_A0); //RA0の出力 output_low(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED2が点灯 delat_ms( 3000 ) ; //3秒待つ        output_low(PIN_A0); //RA0の出力 output_high(PIN_B5); //RB5の出力 output_low(PIN_B6); //RB6の出力 output_low(PIN_B7); //RB7の出力 //LED3が点灯 delay_ms( 3000 ) ; //3秒待つ }

専門家に質問してみよう