Timer1も一度は作動させてみたい。
という事で取りあえず「動くことを確認して置きたい」と思い実験してみました。基本的にTimer 0と同じです。16BitのTimer/Counterでそれに1:1−1:8までのプリカウントがあり、こちらは選択出来ます。
T1CONレジスタの設定で出来ます。細かい設定が並んでいますが、これらを使ってTimer1をコントロールします。
---------------------------------------------------------------------------------------
[TIMER1 BLOCK DIAGRAM]
[これれは"Microchip Technology Inc"のマニアル(PIC16F818/819Data Sheet)から引用しました。詳しくは同社のsiteから!]タイマ/カウンタで内蔵発振から16Bitの設定が出来、各種の時間が作れます。カウンタとして使うにはT1CKI端子を使って外部の信号を受けます。これらも本当は実験しておくと良いのですが、問題が出てから考えてみたいと思います。
割り込み作動
今回は割り込みを使いませんが(やり方はほぼ同じ)、TMRIFとTMRIE(0x8C)の設定をするとコントロール出来ます。このFとEの違いに注意!、FはフラッグでEはイネーブル(私は何故かエナーベルと読んでいます?)で割り込み許可です。
外の割り込みと同じで、設定すると[0x04]アドレスからスタートします。1.TMRIEをセットする。
2.TIMER1ON(bit0)をセットするとカウンタが動作を始める。
3.Timer1がオーバーフロする。
4.TMRIFが自動でセットされ、割り込みが実行される。
5.アドレス4からスタートする。必要ならTIMER1ONをクリヤして止める。
6.割り込みプログラムを実行したら、そのプログラム内でTMRIFをクリヤしておく事。そのままだと、また割り込みが発生する!
7.終了したらT1OSCENをクリヤして節電の為、電源をShut-offさせる。Timer1は16bit(TMR1H+TMR1L:0x0f/0x0e)あるので、その範囲内で利用出来る。割り込みの所で次のTimerの時間を入れれば割り込みの時間を設定出来、TIMER1ONでスタートさせれば良い。
TMR1CS=0でタイマ、=1でカウンタとなる。外部の信号を数えたい時に使う。
Timer0のプリスケラは8bitですが読み出せない。Timer1は全体で16Bitあって読み出せるので何かと使い道があるかも・・・。
Timer2は8bitなのでゆっくりとした物はカウントし難いです、でも良く見ると1:16と1:16があります、これを使うと飛び飛びの16bit(1-65535)カウントやタイマとして利用出来ます。2007/MAY/5
;LED ON OFF ;2007 4/27 Ver2 ; M.KIKUCHI list P=PIC16F819 ; include "P16F819.inc" ; __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_ON &_INTRC_IO & _LVP_OFF ;-------------------------------------------- org 0 goto begin begin call IOPORT ; movlw B'00110001' ; movwf T1CON ;TIMER1 CONTROL REGISTER b2 btfss PIR1,TMR1IF ;check flag goto $-1 bcf PIR1,TMR1IF ;clear flag movlw 0x08 ;LED position xorwf PORTB,F ;on-off goto b2 ;loop ;-------------------------------------------- IOPORT BANKSEL PORTA ; select bank of PORTA clrf PORTA ; Initialize PORTA by ; clearing output banksel ADCON1 ;Bank1 ;0+111 = 8 MHz (8 MHz source drives clock directly) ;110 = 4 MHz 101 = 2 MHz 100 = 1 MHz ;011 = 500 kHz 010 = 250 kHz 001 = 125 kHz ;000 = 31.25 kHz (INTRC source drives clock directly) movlw 0x60 ;INTRC=4MHz movwf OSCCON ;set movlw 0x06 ;Configure all pins movwf ADCON1 ; as digital inputs clrf TRISA ;0=output 1=Input clrf TRISB ;all output banksel PORTB movlw B'00000001' ;LED OFF movwf PORTB return end---------------------------------------
このプログラムは単にLEDの点滅だけです(PIC12の基板を使用:右側)。基板はそのまま利用しています(プログラムを書き込んで挿して動作の確認をしただけです)。
PORTB-3につながっているLEDの点滅です、4MHzで約1秒の点滅です。(65535*8*1μS)
ポートの端子をXORで毎回逆転(+-+-…)させています。
----------------------------------------
もどる [MAIN MENU]