電子書籍の厳選無料作品が豊富!

PIC12F683でLEDをスイッチで点滅させる
電源から3番ピンの間に10KΩの抵抗を入れ、3番ピンからグランドの間にタクトスイッチをつなげ

5番ピンからFETでLEDをドライブさせる回路を組みました。
開発環境は、mikroC PRO for PICです。
いろんなサイトを見ながらコードを書きましたが動いてくれません。
どなたかご教示お願いします。
PIC触るの初めてです。

void main() {
TRISIO = 0b00100000; //GP4を1:入力に、他を0:出力設定
OSCCON = 0b01110000; // 8MHz internal clock
ANSEL = 0b00000000; //GP0~5をデジタル利用に設定
OPTION_REG.NOT_GPPU = 0; //内部プルアップ利用に設定
WPU = 0b00100000; //GP2を内部プルアップ

GPIO = 0b00000000; //GPIOの中身をきれいにする
CMCON0 = 0b00000111; //コンパレータを使わない

do {
if(Button(&GPIO, 4, 1, 0)) { //スイッチONの場合
GPIO.F4 = 1; //LED ON
} else { //スイッチOFFの場合
GPIO.F4 = 0; //LED OFF
}
}while(1);
}

A 回答 (2件)

3番ピン(GP4)が入力で、Pull-upがONですね。

だったら、
TRISIOの1にするビットが上にずれていませんか? bit4のはずです。
WPUも同様。
これらを設定の際にバンク切換をちゃんと指定していますか?
PICのメモリーやI/Oのアドレスは7ビットですね。これを超えるアドレスに対してはバンク切換で対応します。バンク指定はSTATUSレジスタ(アドレスは03h)のbit5です(ビット名はRP0)。これを1にしておくとバンク1が選択され、0ではバンク0が選択されます。なおSTATUSレジスタは現在指定されているバンク値と無関係にアクセスできます。
お使いの開発ツール(言語処理)によってはバンクは指定しなくても自動的に命令が付加されるものもあります。

もうひとつ気になったのがクロック発振の指定。OSCCONだけでなくCONFIGレジスタへの指定が必要です。
CONFIGレジスタはハード的な動作指定になるのでプログラムとして書くのではなくこのレジスタ自体もSFR(I/Oやメモリー)の並びにありません。開発ツールによって表記の仕方が違うと思うのでツールの説明書を見てください。内部発振、クロック出力なし に指定します。
なおCONFIGレジスタについてはPIC12F683 Data Sheet の84ページにあります(マイクロチップからDLできます)。

私も経験がありますが最初に動くまでが大変。でもちょっとでも動いたら後は楽チンです。頑張って!!
    • good
    • 0
この回答へのお礼

m-jiroさんのおっしゃる通りTRISIOが間違っていました。
修正したところ無事動きました。
ありがとうございます。

お礼日時:2017/01/06 03:48

ICの端子にテスタを当てて電圧が出力しているのを確認します。

LED-ONしているはずが0Vならプログラムがおかしいし5V(VCC)が出ていてLEDが点かないなら回路がおかしいことになります。入力のほうも同様に検査します。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2017/01/06 03:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!