2022.10.7
前へ
次へ
ホームページトップへ戻る


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第70回]



●PICUSBIO−03(19)Timer1

PIC18F13K50/PIC18F14K50には内蔵タイマ/カウンタが4個あります。
Timer0〜Timer3です。
今まで説明してきましたTimer0はタイマ/カウンタに特化したシンプルな機能でした。
それに対してTimer1〜Timer3はTimer0と同じように独立したタイマ/カウンタとしても使えますがどちらかというと別の機能(シリアル通信とかADコンバータとかパルス制御などの機能)のためのクロック/タイマ/カウンタとして用意されているもののようです。
おそらくそういう機能の説明とともに動作テストをしていくことになると思います。

下はPIC18F14K50 Data SheetのTimer1の最初のページです。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

Timer0は8ビット/16ビットのTimer/Counterでした。
Timer1もTimer0に構造は似ていますが8ビットの機能はなくて16ビットオンリーのTimer/Counterです。
16ビットですがTimer0と同じように値をREAD/WRITEするときは8ビットレジスタTMR1L(下位8ビット)、TMR1H(上位8ビット)に分けてアクセスします。
Timer1専用の2ビットプリスケーラ(1:8〜1:1))が使えます。
内部クロック(システムクロック/4)か外部入力(RC6端子入力)を選択できます。
PICUSBIO−03のPIC18F13K50のシステムクロックは48MHzなのでその1/4は12MHzになります。
オーバーフロー割り込みを発生させることができます。

T1CONはTimer1の特殊レジスタです(以下普通にレジスタと表記します)。
PICOUT命令、PICIN関数でWRITE/READできます。
bit7=1のときはTimer0と同じ16ビットREAD/WRITEモード(TMR1HをTMR1Lのアクセスに同期してREAD/WRITEする機能)になります。
bit7=0のときはPIC16F以前の16ビットカウンタをREAD/WRITEする場合と同じアクセス方法が必要になります。
bit6=1のときはシステムクロックはTimer1が供給します。
bit6=0のときはシステムクロックとは切り離して動作します。
bit5、bit4はプリスケーラの分周比です。
11=1:8
10=1:4
01=1:2
00=1:1
bit3=1のときTimer1は外部端子pin8(RC6、T1OSI)、pin9(RC7、T1OSO)に接続したクリスタルの発振回路が作動してそのクロックを入力カウントします。
bit3=0のときは発振回路は働きません。
[bit1=1のとき]
 bit2=1のときは外部入力クロックをシステムクロックに同期せずにカウントします。
 bit2=0のときは外部入力クロックをシステムクロックに同期してカウントします。
[bit1=0のとき]
 bit2は無視されます。
bit1=1のときは外部入力端子(pin8)からの入力クロックをカウントします(立ち上がりエッジでカウント)
bit1=0のときはシステムクロック/4(12MHz)を入力カウントします
bit0=1のときカウントスタート、=0のときカウントストップします。

Data Sheetの続きです。

[出典]Microchip Technology Inc. PIC18F13K50/14K50 Data Sheet

FIGURE11−1はTimer1のブロック図です。
FIGURE11−2は16bit READ/WRITE MODEのときのブロック図です。
Timer0のところで説明したのと同じアクセス方法についての説明図です。
以下はT1CONのbit7=1のときの説明です。
TMR1HはTimer1の上位バイトですがカウンタ本体ではなくて上位バイトのバッファです。
カウンタ本体の上位バイトは直接Read/Writeできません。
TMR1Hにはカウンタの下位バイト(TMR1L)をReadしたときにカウンタ上位バイトの値が入ります。
下位バイトと上位バイトを読み出すタイミングによって間違った値を読み出してしまわないようにするためです。
同じことはTMR1Hの値が16bitカウンタの上位バイトにWriteされるときにもあてはまります。
TMR1Hに値をWriteしただけでは直接Timer1に影響を与えません。
TMR1LにWriteを実行したときにTimer1の上位バイトにTMR1Hの値が書き込まれます。

PIC−USBIO using BASIC[第70回]
2022.10.7upload

前へ
次へ
ホームページトップへ戻る