;***********************************************************************************
; Extra Initialize for PIC16F88 Ver 1.00 2009/10/23
;***********************************************************************************
list p=16F88 ; 翻訳時にリストファイルを作ります
#include ; 12F683用定義ファイルを読み込みます
errorlevel -302 ; 翻訳時に302エラーが出ないようにします
errorlevel -205 ; 翻訳時に205エラーが出ないようにします
errorlevel -305 ; 翻訳時に305エラーが出ないようにします
;-----------------------------------------------------------
GLOBAL IOINIT,OPTINIT,OSCINIT,INTINIT,PWMINIT,ADINIT,COMPINIT
;サブルーチンのラベル名がメインプログラムでEXTERNで宣言されて居る
;その為、必ずGLOBALで受ける、つまり EXTERN と GLOBAL はペア
;-----------------------------------------------------------
CODE
;==============================================
;*** IO INITIALIZATION
IOINIT
BSF STATUS,RP0 ;Set BANK1
;-------PORT A TRISA (85h)
MOVLW B'00000000' ;Port A 0=OUTPUT 1=INPUT(B=bit map / H=hex code)
MOVWF TRISA ;Port A Setup regist to PORTA
;-------PORT B TRISB (86h)
MOVLW B'11111111' ;Port B 0=OUTPUT 1=INPUT(B=bit map / H=hex code)
MOVWF TRISB ;Port B Setup regist to PORTB
BCF STATUS,RP0 ;Bank 0 へ戻る
RETURN
;==============================================
;*** OPTION RESISTER INITIALIZATION
OPTINIT
BSF STATUS,RP0 ;Bank 1 へ切替
;-----------------------
; OPTION REGISTER (81h)
;-----------------------
MOVLW B'00000111' ;Option register setting
;MSB(here)
;PORTB pull-up 0=使用する 1=使用しない
;RB0/INT割り込みエッジ 0=H-->L 1=L-->H
;TMR0のクロック 0=内部クロック(Fosc/4) 1=外部クロック(RA4,TOCKI)
;TMR0が外部クロック(RA4,TOCKI)の場合のインクリメント0=L-->H 1=H-->L
;プリスケーラをどちらに使うか 0=TMR0 1=WDT
;111=prescaller value=1/256 (2/4/8/16/32/64/128/256)
;LSB(here)
MOVWF OPTION_REG ;Optionregister to Set abovementioned value
;-----------------------
BCF STATUS,RP0 ;Bank 0 へ戻る
RETURN
;==============================================
;*** OSCCON (8Fh) & OSCTUNE (9Fh)
BSF STATUS,RP0 ;Bank 1 へ切替
OSCADJ EQU 3Fh ;内部発振クロックの調整値、デバイスに依って異なる
;00h=Center MAX 1Fh-->1Eh・・・01h-->00h-->3Fh・・・1Fh-->20h MIN
;最大で±12.5%の調整可能、但し 0.4% / 1bitと粗調である
OSCINIT
BSF STATUS,RP0 ;Bank 1 へ切替
MOVLW B'01100100' ;内部発振クロック4MHz stable(安定の意味)0110=4MHz 0111=8MHz
MOVWF OSCCON ;水晶無し(_INTRC_IO)で内部クロック利用での設定
MOVLW OSCADJ ;00h=Center MAX 1Fh-->1Eh・・・01h-->00h-->3Fh・・・1Fh-->20h MIN
MOVWF OSCTUNE ;±12.5% Adjustable
BCF STATUS,RP0 ;Bank 0 へ戻る
RETURN
;==============================================
;*** INTERRUPT INITIALIZATION
INTINIT
;-----------------------
; INTCON REGISTER (0Bh)
;-----------------------
BCF STATUS,RP0 ;Bank 0 へ戻る
MOVLW B'00000000' ;INTCON register setting (0Bh)
;MSB(here) ここでは RB0 を割り込み設定している
;GIE 1=全てのマスクされて居ない割り込み発生を許可する-->(*1)
;EEIE EEライト完了発生割り込み 0=禁止 1=許可
;TOIE TMR0割り込み発生 0=禁止 1=許可
;INTE RB0/INT割り込み発生 0=禁止 1=許可(*3)
;RBIE RBポート変化発生割り込み 0=禁止 1=許可
;TOIF 1=FLAG ON/ 0=OFF TOIF:TMR0オーバーフロー割り込みフラグビット(要クリア)
;INTF 1=FLAG ON/ 0=OFF INTF:RB0/INT割り込みフラグビット(要クリア)
;RBIF 1=FLAG ON/ 0=OFF RBIF:RBポート変更割り込みフラグビット(要クリア)
MOVWF INTCON ;INTCON register to Set abovementioned value
RETURN
;==============================================
;*** PWM INITIALIZATION CCPR1L(15h) CCP1CON(17h) T2CON(12h)
;PWMのパルスは出力命令無しに勝手に15pinに出てくる
PWMINIT
BCF STATUS,RP0 ;Bank 0 へ戻る
CLRF TMR2 ;TMR2カウンタのクリア
;(TMR0,TMR1はPWMには使用不可)
;CCP1パラメータ
MOVLW B'01111111' ; DUTY 01h(殆どLow)-->FFh(殆どHi) 00h=off
MOVWF CCPR1L ;SET CCPR1L REGISTER
MOVLW B'00000000' ;CCP1XY=0 ON=1100(PWM) OFF=0000
MOVWF CCP1CON ;SET CCP1CON REGISTER
;CCP2パラメータは存在しない(機能無し)
;CCP1パラメータ
BSF STATUS,RP0 ;CHANGE TO BANK1
MOVLW D'255' ;周期(244Hz/4MHz_X-TAL)
;PR2は、255<-- 遅い--速い-->001
MOVWF PR2 ;SET PR2 REGISTER(PR1は存在せず)
BCF STATUS,RP0 ;CHANGE TO BANK0
MOVLW B'00000110' ;PST=1:1 TMR2=ON PWM専用プリスケール=1:16
MOVWF T2CON ;SET T2CON REGISTER
;T1CONはTMR1専用PWMには使用不可
;因みにT0CONは存在せず
RETURN
;==============================================
;*** A/D 設定 ADCON0 (1Fh) & ADCON1(9Fh) & ANSEL(9Bh)
ADINIT
BSF STATUS,RP0 ;Bank 1 へ切替
MOVLW B'00000000' ;ADCON1はPIC16F873とは異なるので要注意!!
;この設定はA/D Conv Value 10 bit resister Left Shift
;Vref+ = AVdd(Vcc) / Vref- = AVss(0V,GND)
MOVWF ADCON1 ;ADCON1 to Set abovementioned value
MOVLW B'00000000' ;bit7=0 設定無し
;bit6=AN6 13pin 0=I/O 1=A/D
;bit5=AN5 12pin ↑↑
;bit4=AN4 3pin ↑↑
;bit3=AN3 2pin ↑↑
;bit2=AN2 1pin ↑↑
;bit1=AN1 18pin ↑↑
;bit0=AN0 17pin ↑↑
MOVWF ANSEL ;A/D Input AN0使用
;
BCF STATUS,RP0 ;Back to BANK0
;
MOVLW B'01000000' ;ADCON0 PIC16F873と同一
;Bit7,6 Fosc/8標準
;Bit5--3 Channel設定、下記
;110 AN6
;101 AN5
;100 AN4
;011 AN3
;010 AN2
;001 AN1
;000 AN0
;bit1は使用せず
;bit0はA/DのON/OFF 1=ON 0=OFF
MOVWF ADCON0 ;ADCON0 to Set abovementioned value
BCF STATUS,RP0 ;Bank 0 へ戻る
RETURN
;==============================================
; COMPARATOR 定義 (CMCON 9Ch)--ここでは使用しない設定--
COMPINIT
BSF STATUS,RP0 ;Bank 1 へ切替
MOVLW B'00000111' ;CMCON resister setting 使用しないのでOPアンプ入力をターミネイトする
MOVWF CMCON ;CMCON register to Set abovementioned value
BCF STATUS,RP0 ;Bank 0 へ戻る
RETURN
;==============================================
;==============================================
;==============================================
;********************************************************************************************
END
続きを読む