SSブログ

ソースコード枠

bandicam 2018-12-20 10-09-27-070


;***********************************************************************************
;  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

続きを読む


nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。