ここから本文です

PICのプログラミング(CCS-C)で悩んでいます。

kon********さん

2016/8/2218:14:28

PICのプログラミング(CCS-C)で悩んでいます。

PIC16F883と入出力ピンがほぼ同じPIC18F26K22に変えたところ、
PIC16F883では正常動作していたのに、PIC18F26K22で急に動かなくなってしまいました。
(ハードウェアの誤配線等ではないです)

下記のソースで、if(input(PIN_B5) == 1)前後で明らかにLED点滅動作が異なっているのですが、
何が悪いのか、ご教授頂けますでしょうか?
【現象】
〇PIN_B0とPIN_B1のLEDが交互に点滅するが、
PIN_B5に入力信号を送っても、PIN_A0とPIN_A1のLEDが交互に点滅しない。
〇エラーなくコンパイル(ビルド)出来ている。
〇PIC18F26K22への書き込みも出来ている。
(Programming/Verify completeと表示されている)
※PIN_AとPIN_Cは、全て後段に抵抗とLEDが接続されている。
※PIN_B0~PIN_B3までは後段に抵抗とLEDが接続されている。
※PIN_B4は空きピン。
※PIN_B5はフォトインタラプタからの入力信号が接続されている。
(PIC16F883では正常動作していた)
※PIN_B6とB7はPICkit3書込みに接続。

環境:MPLAB IDE8.92 + CCS-C、Windows10(64bit)、書込みはPickit3。


//#include <16F883.h>
#include <18F26K22.h>
#FUSES INTRC_IO,NOWDT,NOPROTECT,PUT,BROWNOUT,NOMCLR
#use delay( CLOCK = 8000000 ) //内部発振
void main()
{
setup_oscillator(OSC_8MHZ);
set_tris_a( 0x00 );//0:出力モード、1:入力モード
set_tris_c( 0x00 );
set_tris_b( 0x20 );
while(1)
{
//↓PIN_B0とPIN_B1のLEDが交互に点滅する。
output_b(0x01);
delay_ms(1000);
output_b(0x02);
delay_ms(1000);
//↓フォトインタラプタからの入力信号(PIN_B5)があっても、PIN_A0とPIN_A1のLEDが交互に点滅しない(なぜ???)。
if(input(PIN_B5) == 1)
{
output_a(0x01);
delay_ms(1000);
output_a(0x02);
delay_ms(1000);
}
output_a(0x00);
output_c(0x00);
output_b(0x00);
}
}

PIC16F883,フォトインタラプタ,PIC18F26K22,PICkit3,MPLAB IDE8.92,Oモード アナログ入力不使用,CCS-C

閲覧数:
281
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

kou********さん

2016/8/2300:05:51

CCS-C は未経験ですが、

#USE FAST_IO(b) // portの入出力命令 に tris 命令を付加しない

setup_adc_ports(NO_ANALOGS); // デジタルI/Oモード アナログ入力不使用

が必要では?

参考先
http://www.picfun.com/c06.html

  • 質問者

    kon********さん

    2016/8/2302:19:30

    ご回答ありがとうございます。
    動かないようです。。。

    // #include <16F883.h>
    #include <18F26K22.h>
    #FUSES INTRC_IO,NOWDT,NOPROTECT,PUT,BROWNOUT,NOMCLR
    #use delay( CLOCK = 8000000 )
    #use fast_io(A)
    #use fast_io(B)
    #use fast_io(C)
    void main()
    {
    setup_oscillator(OSC_8MHZ);
    set_tris_a( 0x00 );//0:出力モード、1:入力モード
    set_tris_c( 0x00 );
    set_tris_b( 0x20 );
    //ANSELB=0;→エラーが出る
    SETUP_ADC(ADC_OFF);
    setup_adc_ports(NO_ANALOGS); // デジタルI/Oモード アナログ入力不使用

    while(1)
    {
    output_b(0x01);//PIN_B0とPIN_B1のLEDが交互に点滅。
     delay_ms(1000);
     output_b(0x02);
     delay_ms(1000);
     if(input(PIN_B5) == 1)//フォトインタラプタからの入力信号で、PIN_A0とPIN_A1のLEDが交互に点滅してくれない。
     {
     output_a(0x01);
     delay_ms(1000);
    output_a(0x02);
     delay_ms(1000);
     }
     output_a(0x00);
    output_c(0x00);
     output_b(0x00);
    }

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/8/26 18:15:29

#byte ANSELA~ANSELEを設定後、ANSELA~ANSELE=0としたら、動くようになりました。
皆さま、ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

n11********さん

2016/8/2221:21:01

ANSELB は間違いありませんか

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる