PIC16F84AをPIC16F628Aに置き換え成功
すでに製作してあるLED電光掲示板やビットマン風の表示は、PIC16F84Aではメモリ限界で増やすことができません。そこで、メモリの多いPIC16F628AやPIC16F648に切り替えができるか検討しました。
幸いPIC16F628事始に置き換える時の注意点が説明されていたので、大変助かりました。
変更した4箇所は次の通りです。
(1)デバイス指定の変更
PIC16F84AからPIC16F628Aにデバイスを変更します。
【変更前】
list p=16F84A ; list directive to define processor
#include ; processor specific variable definitions
【変更後】
list p=16F628A ; list directive to define processor
#include ; processor specific variable definitions
※参考:コンパイル時にバンク切替の警告を非表示に出来る
ERRORLEVEL -302 ;アセンブル時のバンク警告メッセージ抑制
(2)コンフィグレーションワードの変更設定
デバイスにより機能が違うので、コンフィグレーションワードを設定変更します。
・LVP(Low Voltage Programming Enable bit)のON/OFF
LVPはないので無効にします
・MCLRE(RA5/MCLR Pin Function Select bit)のON/OFF
MCLRピンはOFFにします
・発振方式の指定(HS oscillator)現状に合せます
(内蔵OSCもあるので、回路の簡素化も可能)
【変更前】
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
【変更後】
__CONFIG _HS_OSC & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _DATA_CP_OFF & _WDT_OFF & _LVP_OFF & _BODEN_OFF
(3)データRAM(ユーザーメモリ)の先頭番地の変更
・16F84Aは0x0C番地を16F628Aは0x20番地に変更
・70H〜7FHの範囲だけ、どのバンクにあってもRead/Write可能
【変更前】
w_temp EQU 0x0C ; variable used for context saving
status_temp EQU 0x0D ; variable used for context saving
;---
wait_data EQU 0x10 ;wait data
count_sub EQU 0x11 ;count sub data
以下に続く
【変更後】
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
;--
wait_data EQU 0x20 ;wait data
count_sub EQU 0x21 ;count sub data
以下に続く
(4)ポート設定変更
・コンパレータのアナログ入力のOFF設定とデジタルIO設定
・ポート設定を分かりやすく記述
【変更前】
port_set ;RA0,RA1,RA2,RA4(OUT)
;RA3(IN)
;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7(OUT)
bsf STATUS,RP0
clrf TRISA
bsf TRISA,4
nop
clrf TRISB
bcf STATUS,RP0
return
【変更後】
port_set ;RA0,RA1,RA2,RA4(OUT)
;RA3(IN)
;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7(OUT)
;***** 16F628A INITAL SETTING
;------ コンパレータOFF ------
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTA
movlw 0x070 ;コンパレータOFF 16F628独自
movwf CMCON ;ディジタルI/Oとして定義
;------ I/O定義 ------
bsf STATUS,RP0 ;bank1へ切り替え
movlw b'11110000' ;INPUT PA3,4,5 出力
movwf TRISA ; RA ポートの設定
movlw b'00000000' ; OUTPUT PB0-7:00h
movwf TRISB ; RB ポート全て出力
bcf STATUS,RP0 ; bank0へ切り替え
return
幸いPIC16F628事始に置き換える時の注意点が説明されていたので、大変助かりました。
変更した4箇所は次の通りです。
(1)デバイス指定の変更
PIC16F84AからPIC16F628Aにデバイスを変更します。
【変更前】
list p=16F84A ; list directive to define processor
#include
【変更後】
list p=16F628A ; list directive to define processor
#include
※参考:コンパイル時にバンク切替の警告を非表示に出来る
ERRORLEVEL -302 ;アセンブル時のバンク警告メッセージ抑制
(2)コンフィグレーションワードの変更設定
デバイスにより機能が違うので、コンフィグレーションワードを設定変更します。
・LVP(Low Voltage Programming Enable bit)のON/OFF
LVPはないので無効にします
・MCLRE(RA5/MCLR Pin Function Select bit)のON/OFF
MCLRピンはOFFにします
・発振方式の指定(HS oscillator)現状に合せます
(内蔵OSCもあるので、回路の簡素化も可能)
【変更前】
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
【変更後】
__CONFIG _HS_OSC & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _DATA_CP_OFF & _WDT_OFF & _LVP_OFF & _BODEN_OFF
(3)データRAM(ユーザーメモリ)の先頭番地の変更
・16F84Aは0x0C番地を16F628Aは0x20番地に変更
・70H〜7FHの範囲だけ、どのバンクにあってもRead/Write可能
【変更前】
w_temp EQU 0x0C ; variable used for context saving
status_temp EQU 0x0D ; variable used for context saving
;---
wait_data EQU 0x10 ;wait data
count_sub EQU 0x11 ;count sub data
以下に続く
【変更後】
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
;--
wait_data EQU 0x20 ;wait data
count_sub EQU 0x21 ;count sub data
以下に続く
(4)ポート設定変更
・コンパレータのアナログ入力のOFF設定とデジタルIO設定
・ポート設定を分かりやすく記述
【変更前】
port_set ;RA0,RA1,RA2,RA4(OUT)
;RA3(IN)
;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7(OUT)
bsf STATUS,RP0
clrf TRISA
bsf TRISA,4
nop
clrf TRISB
bcf STATUS,RP0
return
【変更後】
port_set ;RA0,RA1,RA2,RA4(OUT)
;RA3(IN)
;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7(OUT)
;***** 16F628A INITAL SETTING
;------ コンパレータOFF ------
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTA
movlw 0x070 ;コンパレータOFF 16F628独自
movwf CMCON ;ディジタルI/Oとして定義
;------ I/O定義 ------
bsf STATUS,RP0 ;bank1へ切り替え
movlw b'11110000' ;INPUT PA3,4,5 出力
movwf TRISA ; RA ポートの設定
movlw b'00000000' ; OUTPUT PB0-7:00h
movwf TRISB ; RB ポート全て出力
bcf STATUS,RP0 ; bank0へ切り替え
return
- 2009.03.22 Sunday
- マイコン
- comments(0)
- trackbacks(0)
- by takuo1