水晶発振器(例えばこれ)が有りますが、

上図は18F14K50のピン構成図ですが18F13K50も同じ使い方です。
今回使用するピン番号は1番(VDD)と20番(VSS)と8番(T1OSCI)と9番(T1OSCO)です。
又、16番(RC0)ピンにLEDを接続しています。
LEDは水晶が発振しているかの確認用です。
---------------------------------------------------------------------
#include <xc.h>
#define T1COUT 49152 // タイマー用カウントアップ開始の初期値
int LEDflg ; // LEDのON/OFF状態フラグ
// コンフィギュレーションの設定
// 外部・内部クロックの切替えでの起動はなし(IESO_OFF)
// 動作クロックを4倍では動作させない(PLLEN_OFF):内部クロックを使用する(IRC)
#pragma config IESO=OFF,PLLEN=OFF,FOSC=IRC // CONFIG1H
// 電源電圧降下常時監視機能ON(BOREN_ON):監視電圧は(3.0V)に設定
// 電源ONから後65.6msにプログラムを開始する(PWRTEN_ON)
#pragma config BOREN=NOSLP,BORV=30,PWRTEN=ON // CONFIG2L
// ウオッチドッグタイマー無し(WDTE_OFF)
#pragma config WDTEN=OFF // CONFIG2H
// 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(MCLRE_OFF)
// オシレータが安定するのを待ってシステムクロックを供給する(HFOFST_OFF)
#pragma config MCLRE=OFF,HFOFST=OFF // CONFIG3H
// 低電圧プログラミング機能使用しない(LVP_OFF)
#pragma config LVP=OFF // CONFIG4L
// タイマー1割込みの処理
void interrupt InterTimer( void )
{
if (TMR1IF == 1) { // タイマー1の割込み発生か?
TMR1H = (T1COUT >> 8) ; // タイマー1の再初期値設定
TMR1L = (T1COUT & 0x00ff) ;
TMR1IF = 0 ; // タイマー1割込フラグをリセット
// 1秒毎にLEDのフラグをON/OFFさせる処理
if (LEDflg == 0) LEDflg = 1 ;
else LEDflg = 0 ;
}
}
// メインの処理
void main()
{
OSCCON = 0b01110010 ; // 内部クロックとする(16MHz)
ANSEL = 0b00000000 ; // ANS3-7 アナログは使用しない、デジタルI/Oに割当
ANSELH = 0b00000000 ; // ANS8-11アナログは使用しない、デジタルI/Oに割当
TRISA = 0b00000000 ; // 1で入力 0で出力 RA4-RA5全て出力に設定(RA3は入力専用)
TRISB = 0b00000000 ; // RB4-RB7全て出力に設定
TRISC = 0b00000000 ; // RC0-RC7全て出力に設定
UCONbits.USBEN = 0 ; // USBは使用しない
IOCAbits.IOCA0 = 1 ; // USBピン(D+)をRA0のデジタル入力として使用する
IOCAbits.IOCA1 = 1 ; // USBピン(D-)をRA1のデジタル入力として使用する
PORTA = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)
PORTB = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)
PORTC = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)
T1CON = 0b10011110 ; // 16ビット、外部クロック(32.768KHz)使用、プリスケーラカウント値 1:2、同期しない
TMR1H = (T1COUT >> 8) ; // タイマー1の初期値設定
TMR1L = (T1COUT & 0x00ff) ;
TMR1IF = 0 ; // タイマー1割込フラグを0にする
TMR1IE = 1 ; // タイマー1割り込みを許可する
PEIE = 1 ; // 周辺装置割り込みを許可する
GIE = 1 ; // 全割り込み処理を許可する
TMR1ON = 1 ; // タイマー1の開始
LEDflg = 0 ; // LEDのフラグ状態をOFFとする
while(1) {
// LEDのフラグ状態ON/OFFによりLEDをON/OFFする処理
if (LEDflg == 0) LATCbits.LATC0 = 0 ;
else LATCbits.LATC0 = 1 ;
}
}
---------------------------------------------------------------------
プログラムについて| ビッ ト | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 機能 | RD16 | T1RUN | T1CKPS | T1OSCEN | T1SYNC | TMR1CS | TMR1ON | |
TMR1H = (49152 >> 8) ; // タイマー1の初期化
TMR1L = (49152 & 0x00ff) ;
とレジスタに設定します。
T1OSCEN = 1 ; // Timer1のオシレータを有効にする(このPICではこの行が必要)
T3CON = 0b10010111 ; // 16ビット、外部クロック(32.768KHz)使用、プリスケーラカウント値 1:2、同期しない
TMR3H = (49152 >> 8) ; // タイマー3の初期値設定
TMR3L = (49152 & 0x00ff) ;
TMR3IF = 0 ; // タイマー3割込フラグを0にする
TMR3IE = 1 ; // タイマー3割り込みを許可する
PEIE = 1 ; // 周辺装置割り込みを許可する
GIE = 1 ; // 全割り込み処理を許可する
TMR3ON = 1 ; // タイマー3の開始

例)
time_t t ;
t = time() ;
printf("%s",ctime(&t)) ;
例)
time_t t ;
t = MakeTime(13,6,9,16,40,0) ; // 2013/6/9 16:40:00 の経過秒数を得る
sTime(&t) ; // 得た経過秒数を現在の時刻として設定する
※ グリニッジ標準時間に変換したくない場合は、mktime( )標準関数を使って下さい。
例)
int ans ;
while(1) {
ans = ScheduleTimer(16,45,16,46) ;
LATCbits.LATC0 = ans ; // 16時45分〜16時46分の間だけLEDをONさせる
}
また注意として、
ans = ScheduleTimer(16,45,16,46) ;
ans = ScheduleTimer(19,00,5,00) ;
という感じに2個の同時スケジュール起動は出来ません。
例)
void interrupt InterFunction( void )
{
// タイマー1関連の割り込み処理
InterTMR1() ;
}
skTime.h#define TZ -9 // 日本のタイムゾーン(GMT-9)と記述されています、これはグリニッジ標準時間からの日本での時間差で9時間進んでいます。
#define T1COUT 49152 // タイマー用カウントアップ開始の初期値と記述されているのは、タイマー1の1秒間に1回割り込みを行う為の設定値です、
T1CON = 0b10011110 ; // 16ビット、外部クロック(32.768KHz)使用、プリスケーラカウント値 1:2、同期しない
TMR1H = (49152 >> 8) ; // タイマー1の初期値設定
TMR1L = (49152 & 0x00ff) ;
TMR1IF = 0 ; // タイマー1割込フラグを0にする
TMR1IE = 1 ; // タイマー1割り込みを許可する
PEIE = 1 ; // 周辺装置割り込みを許可する
GIE = 1 ; // 全割り込み処理を許可する
TMR1ON = 1 ; // タイマー1の開始
Timer3/Timer5はレジスタ名称を1から3/5に変えます。
T1CON = 0b10011100 ; // 外部クロック(32.768KHz)使用する、プリスケーラカウント値 1:2、同期しない
TMR1H = (49152 >> 8) ; // タイマー1の初期値設定
TMR1L = (49152 & 0x00ff) ;
TMR1IF = 0 ; // タイマー1割込フラグを0にする
TMR1IE = 1 ; // タイマー1割り込みを許可する
PEIE = 1 ; // 周辺装置割り込みを許可する
GIE = 1 ; // 全割り込み処理を許可する
TMR1ON = 1 ; // タイマー1の開始
リンクの見直し(*2) 2017/01/13
"skMonitorLCD.c"変更により"t1osc.c"のプログラム変更(*1) 2014/02/02
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2017 Shigehiro Kimura All Rights Reserved.