• 締切済み

PIC16f88でLEDの点灯をしたいのですが、

PIC16f88でLEDの点灯をしたいのですが、 9番ピン(RB3)だけLEDが点灯しません。 #include<htc.h> __CONFIG(UNPROTECT & DEBUGEN & MCLRDIS & PWRTEN & WDTDIS & HS); void main() { PORTB = 0xff; TRISB = 0x00; } 上記のプログラムでBポートをすべて出力にしてLEDを光らせているつもりです。 書き込みを行い試してみたところ、6,7,8番は点灯してくれました。 いろいろと調べてみたのですが、PWM設定(CCP1)と関係があるのでしょうか? また何かしらの設定が必要でしたら、教えていただけると助かります。

みんなの回答

  • LM5505E
  • ベストアンサー率61% (8/13)
回答No.2

私はいつもBASICで書いているので、一寸違うかもしれませんが、 CCP1(1) The CCP1 pin is determined by the CCPMX bit in Configuration Word 1 register. っと書いてありますので、コンフィグレジスタでCCP1の無効化を書いておかないといけないいんじゃないかな?? RB3の代わりに、RB0があいていたら設定を変えてみる。 プログラムはそのままで、ポートだけRB0にしても同じ症状になった場合、コンフィグレジスタをきちんと設定しないといけないと思います。 ------------------------------ 16F87/88のデータシートを読んでいたら、1ページ目の表に88の10bit A/D(ch)は1っとなっているけど、同じページ内の文書には10bit-7chって書いてあるし、8~9ページにかけてもAnalogInputが計7つ書いてある。 データシート番号DS30487Cは、一寸当てにならないかも・・・ http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2046 PICデータシート検索。

全文を見る
すると、全ての回答が全文表示されます。
  • foofoo0
  • ベストアンサー率42% (39/92)
回答No.1

LVPがenableのままではないですか? RB3をデジタルI/Oで使用するためには、LVPをdisableにする必要があります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 16F88を用いてLEDの点灯パターンを制御する

    16F88を用いてLEDの点灯パターンを制御するプログラムを作ったのですが、思うように動作してくれません。 電源を入れたときはLEDはすべて消灯しており、スタートのためのスイッチを押すとすべてのLEDが3回点滅するはずなのですが、実際のところ、全てのLEDが点灯しっぱなしになってしまいます。 心当たりはコンフィギュレーションビットの設定が間違っている、PICの出力が間違っている(A/Dが正しく設定されていない)といったことを考えたのですが、結局解決には至りませんでした。 ほぼ同じプログラムを16F84Aにて作ったところ正常に作動したため、PICの移行に伴って不具合が生じてしまったのでしょうか。 どなたかお力をお貸しください。 プログラムはMPLAB v8.85 にて作成しており、コンパイラはHI-TECH ANSI C Compiler で、書き込みにはPICKIT2を用いています。 RB0~7にLEDが接続されており、RA0にスイッチが接続されています。 以下、ソースコードになります。 #define _LEGACY_HEADERS #include <htc.h> #define _XTAL_FREQ 20000000 __CONFIG ( HS & WDTDIS & PWRTDIS & UNPROTECT & MCLREN & BOREN & LVPDIS & DEBUGDIS & IESODIS & FCMDIS); void kaeru(void){ ////////////準備点灯3回////////////// PORTB=0xFF; __delay_ms(500); PORTB=0x00; __delay_ms(500); PORTB=0xFF; __delay_ms(500); PORTB=0x00; __delay_ms(500); PORTB=0xFF; __delay_ms(500); PORTB=0x00; __delay_ms(800); //////////////////////////////////// //スペースの都合で省略しています。 } void main(void) { ANSEL=0b00000000;//16F88のPORTAのA/D変換の無効化 OPTION=0x7F;//PORTBのプルアップ PORTA=0x00;//初期設定 PORTB=0x00;//初期設定 TRISA=0x01;//RA0を入力 TRISB=0x00;//RB0~7を出力 if(RA0==1) kaeru(); }

  • PIC16F819

    PIC16F819のADコンバータを使用しています。 RA0からアナログ信号を入力して、PORTBのそれぞれのピンから1bitずつ(計8bit)のデジタル信号を出力させるためのプログラムを書いてみましたが、まったく動作しません。レジスタの設定なども変えてみましたが動作しませんでした。特にPORTBを全てHighにした場合、なぜかRB6とRB7からの出力を確認することができませんでした。 動作しない原因がまったく分からないので困っています。原因が分かる方がおられましたらご教授お願いします。 #include <pic.h> __CONFIG(DEBUGEN&WDTDIS&LVPDIS&HS&PWRTEN); void init_a2d(void){  ADCON0=0x40;  ADCON1=0x40;  ADON=1; } unsigned char read_a2d(unsigned char channel){  channel&=0x07;  ADCON0&=0xC5;  ADCON0|=(channel<<3);  GODONE=1;  while(GODONE)continue;  return(ADRESH); } void main(void){  unsigned char x1;  init_a2d(); //initialise the A2D module  GIE=0; // we don't want interrupts  TRISB=0x00;     // PORTB will be used in output mode  PORTB=0x00;  x1=read_a2d(1); // sample the analog value on RA0  PORTB=x1; }

  • PIC12F615でGP5が使えません(T_T)

    お世話になりますm(_ _)m PICマイコン初心者です(^^;) MPLAB IDE v8.80で、C言語でプログラムして、 PICkit3を使ってPIC12F615に書き込んでいます。 GP2にスイッチ、GP5にLEDを接続して、スイッチを押すとLEDが点灯するプログラムです。 これだけなら、普通にGP5は利用できます。 タイトルの「GP5が使えない」というのは、 このプログラムに、 割り込みを使用するために INTE=1; を書き込むと何故か、GP5が使えなくなります。 入力も出力も出来ません。 どなたか分かる方、よろしくお願い致しますm(_ _)m ↓プログラム↓ ---------------------------------------------------------------- #include <htc.h> __CONFIG(OSC_4MHZ & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO & BORDIS); void main(void) { //PIC12F615仕様  CMCON0 = 0x07 ; //コンパレート無効化  ANSEL = 0x00 ; //全てデジタル  TRISIO = 0b00001100 ; //入力出力設定  WPU = 0b00000100; //プルアップビット指定  GPPU = 0; //プルアップ有効化  GPIO = 0 ; //各ピンデフォルト値  INTEDG = 0; //INT割り込み立ち下がりエッジ  INTE = 1;  GIE = 1;  while(1)   {    if(!GP2) GP5=1; else GP5=0;   } } ----------------------------------------------------------------

  • PIC初心者です。 PIC16F88のLED制御で以下のプログラムを実

    PIC初心者です。 PIC16F88のLED制御で以下のプログラムを実行すると点滅を繰り返します。 意図としては1度だけ光って消えてほしいのですが… CONFIG部分がおかしいのでしょうか? 環境として、PCはVista、MPLABとPICkit2を使用しています お分かりになる方、お願いいたします。 以下ソースです LIST P=PIC16F88 INCLUDE "P16F88.INC" __CONFIG _CONFIG1, _INTRC_IO & _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_ON BSF STATUS,RP0 CLRF TRISB BCF STATUS,RP0 BCF STATUS,0 CLRF PORTB MAIN BSF PORTB,0 NOP NOP NOP (以下、NOPが100個ほど) NOP BCF PORTB,0 END

  • PIC16F627Aを低電圧で動かすには

    PIC16F627Aです 電池で駆動するプログラムを書いていてうまく動かないので 5V安定化電源につないだら動きました。 確かめるために BポーがをHIにするところでストップするようにして確かめました。 4.4Vでは動作しません。5Vでは動作します。 プログラムは下記です。 このPICは3Vから動作すると思いますが低電圧で 動かすために特別な設定が必要なのでしょうか。 あるいは小生の設定に問題があるのでしょうか。 ご教授ください。   TRISA = 0xFF;   TRISB = 0x01; CCP1CON = 0x0C; PR2 = 0x19; CCPR1L = 0x0C; CCP1CON = PWM_STOP;   T2CON = 0x0C; T1CON = 0x01; TMR1L = 0; TMR1H = 0; TMR1IF = 0; TMR1IE = 1; PORTA = 0x00; PORTB = 0xFF;   ここで4.4V(電池)ではPORTB がHIになりません。   5V電源ではHIになります。   電圧チェックおよびダイオード発光で確認しました while(1) {;}; 以下省略

  • PICマイコン 動作せず、教えて下さい。

    PICマイコン初心者です。 PICマイコン(PIC16F877)をHI-TEC社のPICCでコンパイルして、Buildしたものを 焼き込んで電源印可しますが全然動作せず。  出力に設定しているピン(PORTB)の電圧をみると全て3.8Vぐらいになっています。(不定??)  ちなみに出力PinはVdd(5V) => 発光D => 抵抗 => PORTBと接続されています。  どこが悪いか教えて頂きたく。  *** ソース ファイル ****   #include"pic.h"   void main(void){ unsigned long i; TRISA = 0x00; TRISB = 0x00;   while(1){ PORTB = 0b11111111; //RB0をLowに設定 for(i=0;i<20000000;i++); PORTB = 0b11111110; //RB1をLowに設定 for(i=0;i<40000000;i++); PORTB = 0b11111101; //RB2をLowに設定 for(i=0;i<15000000;i++);          }        }

  • PIC18Fマイコンの使い方

    次のような簡単なアセンブラーのプログラムを書いてアセンブルし、PICkit2を使ってマイコン(PIC18F4685)に書き込みましたが、添付の回路図のように組んだLEDとスイッチの回路が働きません。RB7のスイッチを押すとRB3のLEDが点灯し、RB6のスイッチを押すとRB1のLEDが点灯すると思ったのですが。 スイッチを押すとRB7の電位が0Vに落ちますが、RB3の電位はあがりません。 PICマイコンはNorthMicro の評価ボードに乗っていて、Vddは5Vあります。 発振素子はついていません。どこが悪いのでしょうか?詳しい方、どうか教えてください。 Main: ; *** main code goes here *** Memory EQU 0x0C Mem1 EQU Memory+0 ; Mem1 at 0C Time1 EQU Memory+1 ; Time1 at 0D Time2 EQU Memory+2 ; Time2 at 0E Time3 EQU Memory+3 ; Time3 at 0F ; ORG 0 GOTO Start Start ; setting of Port B    ;  BSF STATUS, RP0 ; 18Fには不要なのでコメントアウト    MOVLW b'110000' ; bit 7 & 6 =1, Bit 6 to 0 =0    MOVWF TRISB ; specify port in/out function   ; BCF STATUS, RP0 ;18Fには不要なのでコメントアウト    MOVLW b'00001010'    MOVWF PORTB ; output the data to port B ; main loop Repeat MOVF PORTB, 0 ; read the port B data into W reg   ANDLW b'110000'   MOVWF Mem1    BTFSS Mem1, 7 ; if 7th bit is '1' then skip the next line ; else execute the next line    CALL RotateR    BTFSS Mem1,6 ; if 6th bit is '1' then skip the next line ; else execute the next line    CALL RotateL    GOTO Repeat ; infinite loop ; end of main loop RotateR MOVLW b'00001000'    MOVWF PORTB    RETURN RotateL MOVLW b'00000010'    MOVWF PORTB    RETURN

  • PICの__CONFIGのラインについて

    PICのことで解らないことがあります。初歩的な問題ですがご容赦ください。以下にソースファイルとエラーメッセージを載せています。どうすればコンパイルできますか?よろしくお願いします。 ******************************************************************************* /***************************** STEP03_TEST.c *****************************/ // インクルードファイルの読み込み #include <pic.h> #include "16F627A.h" // コンフィギュレーションワードの設定 __CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO ); // メイン関数 void main (void) { // 1,2,17,18端子を入出力端子に設定 CMCON = 0x07; // 電圧レベルの初期設定 PORTA = 0xFF; PORTB = 0xFF; // 入出力設定 TRISA = 0x21; TRISB = 0x00; // 永久ループ while(1) { // SW1がONの場合 if (RA0 == 0) { // LED1点灯 RB0 = 0; } // その他の場合(SW1がOFFの場合) else { // LED1消灯 RB0 = 1; } } } ******************************************************************************* Build C:\fivethapp\fiveth for device 16F627A Using driver C:\Program Files\HI-TECH Software\PICC\9.81\bin\picc.exe Make: The target "C:\fivethapp\STEP03_TEST.p1" is up to date. Executing: "C:\Program Files\HI-TECH Software\PICC\9.81\bin\picc.exe" -ofiveth.cof -mfiveth.map --summary=default --output=default STEP03_TEST.p1 --chip=16F627A "-IC:\Program Files\HI-TECH Software\PICC\9.81\include" -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.81 Copyright (C) 2010 Microchip Technology Inc. (1273) Omniscient Code Generation not available in Lite mode (warning) Error [800] fiveth.as; 45. undefined symbol "INTIO" Error [800] fiveth.as; 45. undefined symbol "WDTDIS" Error [800] fiveth.as; 45. undefined symbol "PWRTEN" Error [800] fiveth.as; 45. undefined symbol "MCLREN" Error [800] fiveth.as; 45. undefined symbol "BOREN" Error [800] fiveth.as; 45. undefined symbol "LVPDIS" Error [800] fiveth.as; 45. undefined symbol "UNPROTECT" ********** Build failed! **********

  • PICのプログラミングについて

    16F88をC言語でプログラムしています。 HI-TECH cでコンパイルしたところ、delay関数がうまく動作しません。 delay関数の直前までは動作するのですが、そこでストップしてしまいます。 どうもincludeの設定のところに問題があると思うのですが、 初心者なもので原因がいまひとつ掴めません。 とりあえず、delayが動作しているか確かめるために作った下記のプログラムでいろいろと試しているのですが、おかしいところがあればご指摘お願いします。 **************************** //RB0~RB4にはLEDを接続 #include <pic.h> #include <htc.h> #define _XTAL_FREQ 8000000 // 8Mhz __CONFIG(0x3F22); void main(){ TRISA = 0b00000100; TRISB = 0b00000000; PORTB = 0b00000101; __delay_ms(500); PORTB = 0b00000111; }

  • PIC12F683を用いたCapture実験

    いま、PIC12F683を用いてCCPモジュールのCapture機能の実験をしています。一応、ビルドはできたので書き込んで動かしてみましたが、思ったとおり(スイッチを押したときにLEDを点灯させる)に動作しませんでした 動作はとしては、押しボタンスイッチを押したときにキャプチャーして LEDを点灯させるという簡単なものです。 下に使用しているプログラムを掲載しますので、どうしたらいいか教えてください。 // CaptureTest.c #include <pic.h> #include "delay.h" #include "CCP.h" __CONFIG( FCMDIS & IESODIS & BORDIS & WDTDIS & UNPROTECT & UNPROTECT & MCLRDIS & PWRTEN & INTIO); __IDLOC(0x00); unsigned char temp; ioport(); main(void) { //ポートの初期化、入出力設定など     ioport(); //Captureモード、立ち上がりエッジに設定 setCcpMode(CCP_CAPUTURE_PGE);      //フラグ(CCP1IF)を「0」にセット ResetCcpFlag();      //CCP割り込み許可 setCcpEnable(ENABLED); //TIMER1のプリスケーラを「1/8」に設定      T1CKPS1=1; T1CKPS0=1;     //外部回路を動作させない T1OSCEN=0;     //TIMER1を同期モードにセット T1SYNC=0;     //TIMER1のクロックは内部クロックを使用 TMR1CS=0;     //全割り込み、周辺割り込み許可 GIE=1; PEIE=1;      //TIMER1をリセット(0セット) ResetTMR1(); //TIMER1スタート     T1_START();      //CCP割り込みフラグが立つまでチェック while(ChkCcpFlag()==0);     //CCP割り込みフラグクリア ResetCcpFlag();     //GP3をハイレベルに設定してLEDを点灯 temp=1; GPIO3=temp; } ioport() { ANSEL=0x00; TRISIO=0x04; } //CCP.c #include <pic.h> void setCcpMode(unsigned char mode) { CCP1CON= mode; } void setPwmPeriod(unsigned char T) { PR2=(T-1); } void setPwmDuty(unsigned int duty) { DC1B0 = 0x01&duty; DC1B1 = 0x02&duty; CCPR1L = 0xFC &duty; } void setCcpEnable(unsigned char flag) { CCP1IE=flag; } void ResetCcpFlag(void) { CCP1IF=0; } unsigned char ChkCcpFlag(void) { unsigned char ret=0; if(CCP1IF==1) return ret=1; return ret; } void ResetTMR1(void) { TMR1H=0x00; TMR1L=0x00; } void T1_START(void) { TMR1ON=1; } void T1_STOP(void) { TMR1ON=0; } //CCP.h #define ENABLED 1 #define DISABLED 0 #define CCP_OFF 0x00 #define CCP_CAPUTURE_NGE 0x04 #define CCP_CAPUTURE_PGE 0x05 #define CCP_CAPUTURE_4th_PGE 0x06 #define CCP_CAPUTURE_16th_PGE 0x07 #define CCP_COMPARE_SET_ON_MATCH 0x08 #define CCP_COMPARE_CLR_ON_MATCH 0x09 #define CCP_COMPARE_INT 0x0A #define CCP_COMPARE_RESET_TIMER 0x0B #define CCP_PWM 0x0C extern void setCcpMode(unsigned char); extern void setPwmPeriod(unsigned char); extern void setPwmDuty(unsigned int); extern void setCcpEnable(unsigned char); extern void ResetCcpFlag(void); extern unsigned char ChkCcpFlag(void); extern void ResetTMR1(void); extern void T1_START(void); extern void T1_STOP(void);