●PICプログラム( 12F675 → 12F683 )の移行
8ピンPICの12F675を使用していますが、教本などで色々と調べながらプログラ ムを作る時に独特のものがあり、何か、スッキリしない感じでしたのでデータメモリでの SFRの番地も基本となるPIC16F84AやPIC16F819の16Fシリーズと 同じような8ピンPICの12F683にプログラムを移行することにしました。
・ ・ ・ ・ ・
●LED電飾プログラム(12F675LED01)の移行 12F683仕様に合わせた修正をしました。 @標準ヘッダ、定義ファイルの変更 LIST P=12F675  → P=12F683 INCLUDE P12F675.INC → P12F683.INC Aコンフィグレーションビット設定の変更 -------------------------------------------------------------------------------- CB = _CPD_OFF ;データEEPROMを(コードプロテクトしない) CB &= _CP_OFF ;プログラムメモリを(コードプロテクトしない) CB &= _BODEN_OFF ;ブラウンアウトリセットを(使わない) CB &= _MCLRE_OFF ;MCLRリセットを(使わない)、GP3ピンが入力設定になる CB &= _PWRTE_ON ;パワーアップタイマーを(使う) CB &= _WDT_OFF ;ウォッチドックタイマを(使わない) CB &= _INTRC_OSC_NOCLKOUT ;発振回路(INTOSCモード)内部発信器を使う(4MHz) __CONFIG CB ;コンフィグレーションビットにCBを書き込む -------------------------------------------------------------------------------- ↓ -------------------------------------------------------------------------------- ;---コンフィグレーションビットの設定--- ; ●コードプロテクトの指定 :_CP_OFF :プログラムメモリを(コードプロテクトしない) ; ●コードプロテクトの指定 :_CPD_OFF :データEEPROMを(コードプロテクトしない) ; ●ウォッチドックタイマの動作指定:_WDT_OFF :ウォッチドックタイマ(WDT)の動作を禁止する ; ●ブラウンアウトリセット :_BOD_OFF :ブラウンアウトリセットを(使わない) ; ● :_IESO_OFF :内部・外部切り替えモード無効 ; ●パワーアップタイマの許可指定 :_PWRTE_ON :パワーアップタイマ(PWRTE)の動作を許可する ; ●クロック発振モード(OSC)の指 :_INTOSCIO :オシレータは内部クロック使用 ; ● :_MCLRE_OFF:マスタクリア無効 __CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_OFF & _IESO_OFF & _PWRTE_ON & _INTOSCIO & _MCLRE_OFF -------------------------------------------------------------------------------- BCMCOMレジスタ名の変更 -------------------------------------------------------------------------------- MOVWF CMCON ;CMCOMレジスタ ← Wレジスタ -------------------------------------------------------------------------------- ↓ -------------------------------------------------------------------------------- MOVWF CMCON0 ;CMCOM0レジスタ ← Wレジスタ --------------------------------------------------------------------------------
・ ・ ・ ・ ・
●スピコンプログラム(STBVE300)の移行 12F683仕様に合わせた修正をしました。 @標準ヘッダ、定義ファイルの変更 LIST P=12F675  → P=12F683 INCLUDE P12F675.INC → P12F683.INC Aコンフィグレーションビット設定の変更 -------------------------------------------------------------------------------- CB = _CPD_OFF ;データEEPROM(コードプロテクトしない) CB &= _CP_OFF ;プログラムメモリ(コードプロテクトしない) CB &= _BODEN_OFF ;ブラウンアウトリセット(使わない) CB &= _MCLRE_OFF ;データ入力ピン(GP3ピン)として使う CB &= _PWRTE_ON ;パワーアップタイマー(使う) CB &= _WDT_ON ;ウォッチドックタイマ(使う) CB &= _INTRC_OSC_NOCLKOUT ;発振回路(INTOSCモード)内部発信器を使う(4MHz) __CONFIG CB ;コンフィグレーションビットにCBを書き込む -------------------------------------------------------------------------------- ↓ -------------------------------------------------------------------------------- ;---コンフィグレーションビットの設定--- ; ●コードプロテクトの指定 :_CP_OFF :プログラムメモリを(コードプロテクトしない) ; ●コードプロテクトの指定 :_CPD_OFF :データEEPROMを(コードプロテクトしない) ; ●ウォッチドックタイマの動作指定:_WDT_OFF :ウォッチドックタイマ(WDT)の動作を禁止する ; ●電源電圧低下時の処理指定 :_BOD_OFF :ブラウンアウトリセットを(使わない) ; ●内部・外部切り替えモードの指定:_IESO_OFF :内部・外部切り替えモード無効にする ; ●パワーアップタイマの許可指定 :_PWRTE_ON :パワーアップタイマ(PWRTE)の動作を許可する ; ●クロック発振モード(OSC)の指定 :_INTOSCIO :オシレータは内部クロックを使用する ; ●マスタクリア(有効・無効)の指定:_MCLRE_OFF:マスタクリア無効(4番ピンをGP3として使用) __CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _BOD_OFF & _IESO_OFF & _PWRTE_ON & _INTOSCIO & _MCLRE_OFF -------------------------------------------------------------------------------- B内部クロック(4MHz)設定の変更 -------------------------------------------------------------------------------- CALL H'3FF' ;内部発振器キャリブレーション(発振周波数約4MHZ)する MOVWF OSCCAL ;キャブレーション・データをOSCCALレジスタに書き込む -------------------------------------------------------------------------------- ↓ -------------------------------------------------------------------------------- MOVLW 060h ;Wレジスタ ← 内部クロック(4MHZ)を使う クロック選択ビット IRCF2-0(110) MOVWF OSCCON ;OSCCONレジスタ ← Wレジスタ -------------------------------------------------------------------------------- CCMCOMレジスタ名の変更 -------------------------------------------------------------------------------- MOVWF CMCON ;CMCOMレジスタ ← Wレジスタ -------------------------------------------------------------------------------- ↓ -------------------------------------------------------------------------------- MOVWF CMCON0 ;CMCOM0レジスタ ← Wレジスタ --------------------------------------------------------------------------------
・ ・ ・ ・ ・
●テストボード上では、なんとなく動きましたが・・・ これらのプログラムは高精度を求めるものではなく動けばOKですが、スピコンのプログ ラムでは、後進動作の最大出力時に不安定になりましたので、最大出力パルス値を下げて の微妙なセッテイングをしました。これは、内部クロックの精度が微妙に相違していると 考えられます。 12F675ではプログラムの書き込み方を誤ると、プログラムエリアに持っている内蔵 クロックの補正データを消してしまうことがあるそうで、注意していましたが、12F6 83では、内蔵クロックの補正データを別枠で持っており12F675のような誤りはな いようですので、余計なことを考えずに取り扱える感じです。
・ ・ ・ ・ ・