プロが教える店舗&オフィスのセキュリティ対策術

     LIST   P=PIC16F88
#INCLUDE<P16F88.INC>

__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF &                    _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF &
                   _PWRTE_ON & _WDT_OFF & _HS_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
VAR1EQU 0x20
VAR2 EQU 0x21
ORG0

start
     BCF       STATUS,RP1
     BSF       STATUS,RP0   ;bank1へ移動
     CLRF      TRISB       ;PORTBをすべて出力
     MOVLW     0xff
     MOVWF     TRISA       ;PORTAをすべて入力
     MOVLW     x05        ;コンパレータ1つのみ使用
     MOVWF     CMCON
     BCF       STATUS,RP0   ;bank0へ移動
     CLRW
     MOVWF     PORTB
     MOVLW     0xff
     MOVWF     PORTA


18ピンのPIC16F88の内蔵アナログコンパレータ(RA1/AN1とVINRA2/AN2/CVREFが入力、C2OUTが出力の1つのみ利用する設定)を使用しPORTBからLEDへ出力し電圧の大小の判定を行いたく、上記のような設定でプログラムをつくりコンパイルは通ったのですが動作せず、
MPLABのデバッグにて確認したところ『MOVWF PORTA』の部分でPORTAのレジスタ値が0x00から変化しておりませんでした。

『BCF STATUS,RP0』まではレジスタ値は変化しており、
STATUSは0x1cでbank0、TRISAは0x3fで入力、ANSELはデフォルトで0x7fでアナログ入力
になっているのですが、何故PORTAが値を入れても変わらないのか原因が分かりません。

分かる方、ご教授頂けますと幸いです。
宜しくお願い致します。

A 回答 (1件)

PORTAをどのように使いたいのかはっきりしませんが、次の3点に注意して下さい。



1.入力設定にしたピンは、プログラムから1/0を制御できません。
  あくまでも外部入力のHi/Lowを判断するだけです。(Hiの時→1、Lowの時→0 が保持される)

2.16F88は、初期値ではアナログ設定になっています。(AN0~AN6ピンのみ)
  アナログ設定ピンは入力のみで、出力はできません。
  通常はデジタル設定にする必要がありますので、ANSELレジスタを変更して下さい。

3.RA5は入力のみで、出力設定にできません。

いずれにしても、使用できるPORTAは少ないですね。
 RA0:フリー
 RA1:Vin-(コンパレータ用)
 RA2:Vin+(コンパレータ用)
 RA3:フリー
 RA4:フリー
 RA5:フリー(入力のみ)
 RA6:OSC1(外部オシレータ用)
 RA7:OSC2(外部オシレータ用)

言葉足らずでしたら、再度質問して下さいね。
    • good
    • 0
この回答へのお礼

返答が遅れまして申し訳ございません。
見直したら接続ポートのミスだったみたいで
ご回答有難うございました。

お礼日時:2011/08/13 15:12

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