#ifndef _osc_inc_ #define _osc_inc_ messg "include 'osc.inc'" LIST ; Title : internal oscillator ; By : komi ; Last update : 2005.11.18 ; Version : 0.4 NOLIST ; ; とりあえず PIC16F819,88用 ;---------------------------------------------------------------------------- ; 解説 ;---------------------------------------------------------------------------- ; ; ■内部発振器の設定 ; ・マクロ定義 ; set_oscillator_V1 MACRO clock ; ・周波数の定義 ; clk31250Hz ; clk125kHz ; clk250kHz ; clk500kHz ; clk1MHz ; clk2MHz ; clk4MHz ; clk8MHz ; ; ; ■内部発振が安定するまで待つ ; ・マクロ定義 ; wait_oscillator_stable MACRO ; ; ; ■発振周波数の微調整 ; ・マクロ定義 ; set_oscillator_tuning_V1 MACRO value ; set_oscillator_tuning_U1 MACRO var ; set_oscillator_tuning_S1 MACRO var ; set_oscillator_tuning_W MACRO ; ・値の範囲 ; 0が標準状態 ; -32 〜 +31 までの値を指定 ; ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ; 内部発振器の設定 #define clk31250Hz D'0' #define clk125kHz D'1' #define clk250kHz D'2' #define clk500kHz D'3' #define clk1MHz D'4' #define clk2MHz D'5' #define clk4MHz D'6' #define clk8MHz D'7' ;------------------------------------------------------------------ set_oscillator_V1 MACRO clock banksel OSCCON NOLIST if (clock & B'001') LIST BSF OSCCON, IRCF0 NOLIST else LIST BCF OSCCON, IRCF0 NOLIST endif if (clock & B'010') LIST BSF OSCCON, IRCF1 NOLIST else LIST BCF OSCCON, IRCF1 NOLIST endif if (clock & B'100') LIST BSF OSCCON, IRCF2 NOLIST else LIST BCF OSCCON, IRCF2 NOLIST endif #ifdef SCS1 BSF OSCCON, SCS1 BCF OSCCON, SCS0 #endif LIST ENDM ;------------------------------------------------------------------ set_oscillator_W MACRO banksel OSCCON MOVWF OSCCON ENDM ;------------------------------------------------------------------ ;---------------------------------------------------------------------------- ; 内部発振が安定するまで待つ ;------------------------------------------------------------------ wait_oscillator_stable MACRO banksel OSCCON BTFSS OSCCON, IOFS GOTO $-1 ENDM ;------------------------------------------------------------------ ;---------------------------------------------------------------------------- ; 発振周波数微調整 ;------------------------------------------------------------------ ; OSCTUNE ← value set_oscillator_tuning_V1 MACRO value NOLIST if (value < -D'32' || value > D'31') messg "The value is outside the range." endif LIST banksel OSCTUNE MOVLW value MOVWF OSCTUNE ENDM ;------------------------------------------------------------------ ; OSCTUNE ← var set_oscillator_tuning_U1 MACRO var banksel var MOVF var, W banksel OSCTUNE MOVWF OSCTUNE ENDM #define set_oscillator_tuning_S1 set_oscillator_tuning_U1 ;------------------------------------------------------------------ ; OSCTUNE ← Wreg set_oscillator_tuning_W MACRO banksel OSCTUNE MOVWF OSCTUNE ENDM ;------------------------------------------------------------------ ;---------------------------------------------------------------------------- LIST #endif